-
Notifications
You must be signed in to change notification settings - Fork 377
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Require nasm for AV1 decoding, unless on arm64 macOS (#7742)
### What * Closes #7669 * Closes #7671 * Disable AV1 decoding unless the `nasm` feature is turned on * Turn on the `nasm` feature when building pre-built binaries * Print enabled video features with `rerun --version` to make testing of the above easy ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using examples from latest `main` build: [rerun.io/viewer](https://rerun.io/viewer/pr/7742?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [rerun.io/viewer](https://rerun.io/viewer/pr/7742?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! * [x] If have noted any breaking changes to the log API in `CHANGELOG.md` and the migration guide - [PR Build Summary](https://build.rerun.io/pr/7742) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) To run all checks from `main`, comment on the PR with `@rerun-bot full-check`.
- Loading branch information
Showing
11 changed files
with
144 additions
and
110 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
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 | ||
} |
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 |
---|---|---|
@@ -0,0 +1,93 @@ | ||
/// 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) | ||
} | ||
} | ||
|
||
/// A value in time units. | ||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] | ||
pub struct Time(pub 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 | ||
} | ||
|
||
#[inline] | ||
pub fn into_millis(self, timescale: Timescale) -> f64 { | ||
self.into_secs(timescale) * 1e3 | ||
} | ||
|
||
#[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)) | ||
} | ||
} |
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