-
Notifications
You must be signed in to change notification settings - Fork 368
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into andreas/rav1d-windows-fix
- Loading branch information
Showing
21 changed files
with
444 additions
and
144 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,102 +1,27 @@ | ||
//! Video decoding library. | ||
mod time; | ||
|
||
pub mod decode; | ||
pub mod demux; | ||
|
||
pub use decode::{Chunk, Frame, PixelFormat}; | ||
pub use demux::{Config, Sample, VideoData, VideoLoadError}; | ||
pub use re_mp4::{TrackId, TrackKind}; | ||
|
||
/// A value in time units. | ||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] | ||
pub struct Time(i64); | ||
|
||
impl Time { | ||
pub const ZERO: Self = Self(0); | ||
pub const MAX: Self = Self(i64::MAX); | ||
|
||
/// Create a new value in _time units_. | ||
/// | ||
/// ⚠️ Don't use this for regular timestamps in seconds/milliseconds/etc., | ||
/// use the proper constructors for those instead! | ||
/// This only exists for cases where you already have a value expressed in time units, | ||
/// such as those received from the `WebCodecs` APIs. | ||
#[inline] | ||
pub fn new(v: i64) -> Self { | ||
Self(v) | ||
} | ||
|
||
#[inline] | ||
pub fn from_secs(v: f64, timescale: Timescale) -> Self { | ||
Self((v * timescale.0 as f64).round() as i64) | ||
} | ||
|
||
#[inline] | ||
pub fn from_millis(v: f64, timescale: Timescale) -> Self { | ||
Self::from_secs(v / 1e3, timescale) | ||
} | ||
|
||
#[inline] | ||
pub fn from_micros(v: f64, timescale: Timescale) -> Self { | ||
Self::from_secs(v / 1e6, timescale) | ||
} | ||
|
||
#[inline] | ||
pub fn from_nanos(v: i64, timescale: Timescale) -> Self { | ||
Self::from_secs(v as f64 / 1e9, timescale) | ||
} | ||
|
||
/// Convert to a duration | ||
#[inline] | ||
pub fn duration(self, timescale: Timescale) -> std::time::Duration { | ||
std::time::Duration::from_nanos(self.into_nanos(timescale) as _) | ||
} | ||
|
||
#[inline] | ||
pub fn into_secs(self, timescale: Timescale) -> f64 { | ||
self.0 as f64 / timescale.0 as f64 | ||
} | ||
pub use self::{ | ||
decode::{Chunk, Frame, PixelFormat}, | ||
demux::{Config, Sample, VideoData, VideoLoadError}, | ||
time::{Time, Timescale}, | ||
}; | ||
|
||
#[inline] | ||
pub fn into_millis(self, timescale: Timescale) -> f64 { | ||
self.into_secs(timescale) * 1e3 | ||
/// Which features was this crate compiled with? | ||
pub fn features() -> Vec<&'static str> { | ||
// TODO(emilk): is there a helper crate for this? | ||
let mut features = vec![]; | ||
if cfg!(feature = "av1") { | ||
features.push("av1"); | ||
} | ||
|
||
#[inline] | ||
pub fn into_micros(self, timescale: Timescale) -> f64 { | ||
self.into_secs(timescale) * 1e6 | ||
} | ||
|
||
#[inline] | ||
pub fn into_nanos(self, timescale: Timescale) -> i64 { | ||
(self.into_secs(timescale) * 1e9).round() as i64 | ||
} | ||
} | ||
|
||
impl std::ops::Add for Time { | ||
type Output = Self; | ||
|
||
#[inline] | ||
fn add(self, rhs: Self) -> Self::Output { | ||
Self(self.0.saturating_add(rhs.0)) | ||
} | ||
} | ||
|
||
impl std::ops::Sub for Time { | ||
type Output = Self; | ||
|
||
#[inline] | ||
fn sub(self, rhs: Self) -> Self::Output { | ||
Self(self.0.saturating_sub(rhs.0)) | ||
} | ||
} | ||
|
||
/// The number of time units per second. | ||
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] | ||
pub struct Timescale(u64); | ||
|
||
impl Timescale { | ||
pub(crate) fn new(v: u64) -> Self { | ||
Self(v) | ||
if cfg!(feature = "nasm") { | ||
features.push("nasm"); | ||
} | ||
features | ||
} |
Oops, something went wrong.