From a84eeeb240200be5a9f63a043d14939e0630095d Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Tue, 29 Nov 2022 15:02:37 +0200 Subject: [PATCH] mux/{mp4, fmp4}: Hard depend on feature v1_18 Else --no-default-features was failing to compile. v1_18 is needed to for the aggregator code. Part-of: --- mux/fmp4/Cargo.toml | 15 ++- mux/fmp4/src/fmp4mux/boxes.rs | 172 +++++++++++----------------------- mux/mp4/Cargo.toml | 15 ++- mux/mp4/src/mp4mux/boxes.rs | 90 +++++------------- 4 files changed, 92 insertions(+), 200 deletions(-) diff --git a/mux/fmp4/Cargo.toml b/mux/fmp4/Cargo.toml index fb60b4c9..be62aae7 100644 --- a/mux/fmp4/Cargo.toml +++ b/mux/fmp4/Cargo.toml @@ -10,11 +10,11 @@ rust-version = "1.63" [dependencies] anyhow = "1" -gst = { package = "gstreamer", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } -gst-base = { package = "gstreamer-base", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } -gst-audio = { package = "gstreamer-audio", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } -gst-video = { package = "gstreamer-video", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } -gst-pbutils = { package = "gstreamer-pbutils", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } +gst = { package = "gstreamer", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } +gst-base = { package = "gstreamer-base", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } +gst-audio = { package = "gstreamer-audio", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } +gst-video = { package = "gstreamer-video", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } +gst-pbutils = { package = "gstreamer-pbutils", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } once_cell = "1.0" [lib] @@ -33,11 +33,10 @@ chrono = "0.4" gst-plugin-version-helper = { path="../../version-helper" } [features] -default = ["v1_18"] +default = [] static = [] capi = [] -v1_18 = ["gst-video/v1_18"] -doc = ["gst/v1_18"] +doc = [] [package.metadata.capi] min_version = "0.8.0" diff --git a/mux/fmp4/src/fmp4mux/boxes.rs b/mux/fmp4/src/fmp4mux/boxes.rs index e8bb78b9..938d1c71 100644 --- a/mux/fmp4/src/fmp4mux/boxes.rs +++ b/mux/fmp4/src/fmp4mux/boxes.rs @@ -82,34 +82,26 @@ fn cmaf_brands_from_caps(caps: &gst::CapsRef, compatible_brands: &mut Vec<&'stat && level <= ("3", "1") && fps <= gst::Fraction::new(60, 1) { - #[cfg(feature = "v1_18")] + if let Some(colorimetry) = + colorimetry.and_then(|c| c.parse::().ok()) { - if let Some(colorimetry) = colorimetry - .and_then(|c| c.parse::().ok()) - { - if matches!( - colorimetry.primaries(), - gst_video::VideoColorPrimaries::Bt709 - | gst_video::VideoColorPrimaries::Bt470bg - | gst_video::VideoColorPrimaries::Smpte170m - ) && matches!( - colorimetry.transfer(), - gst_video::VideoTransferFunction::Bt709 - | gst_video::VideoTransferFunction::Bt601 - ) && matches!( - colorimetry.matrix(), - gst_video::VideoColorMatrix::Bt709 - | gst_video::VideoColorMatrix::Bt601 - ) { - compatible_brands.push(b"cfsd"); - } - } else { - // Assume it's OK + if matches!( + colorimetry.primaries(), + gst_video::VideoColorPrimaries::Bt709 + | gst_video::VideoColorPrimaries::Bt470bg + | gst_video::VideoColorPrimaries::Smpte170m + ) && matches!( + colorimetry.transfer(), + gst_video::VideoTransferFunction::Bt709 + | gst_video::VideoTransferFunction::Bt601 + ) && matches!( + colorimetry.matrix(), + gst_video::VideoColorMatrix::Bt709 + | gst_video::VideoColorMatrix::Bt601 + ) { compatible_brands.push(b"cfsd"); } - } - #[cfg(not(feature = "v1_18"))] - { + } else { // Assume it's OK compatible_brands.push(b"cfsd"); } @@ -118,30 +110,22 @@ fn cmaf_brands_from_caps(caps: &gst::CapsRef, compatible_brands: &mut Vec<&'stat && level <= ("4", "0") && fps <= gst::Fraction::new(60, 1) { - #[cfg(feature = "v1_18")] + if let Some(colorimetry) = + colorimetry.and_then(|c| c.parse::().ok()) { - if let Some(colorimetry) = colorimetry - .and_then(|c| c.parse::().ok()) - { - if matches!( - colorimetry.primaries(), - gst_video::VideoColorPrimaries::Bt709 - ) && matches!( - colorimetry.transfer(), - gst_video::VideoTransferFunction::Bt709 - ) && matches!( - colorimetry.matrix(), - gst_video::VideoColorMatrix::Bt709 - ) { - compatible_brands.push(b"cfhd"); - } - } else { - // Assume it's OK + if matches!( + colorimetry.primaries(), + gst_video::VideoColorPrimaries::Bt709 + ) && matches!( + colorimetry.transfer(), + gst_video::VideoTransferFunction::Bt709 + ) && matches!( + colorimetry.matrix(), + gst_video::VideoColorMatrix::Bt709 + ) { compatible_brands.push(b"cfhd"); } - } - #[cfg(not(feature = "v1_18"))] - { + } else { // Assume it's OK compatible_brands.push(b"cfhd"); } @@ -271,7 +255,6 @@ fn cmaf_brands_from_caps(caps: &gst::CapsRef, compatible_brands: &mut Vec<&'stat && level <= ("5", "1") && fps <= gst::Fraction::new(60, 1) { - #[cfg(feature = "v1_18")] if let Some(colorimetry) = colorimetry.and_then(|c| c.parse::().ok()) { @@ -318,11 +301,6 @@ fn cmaf_brands_from_caps(caps: &gst::CapsRef, compatible_brands: &mut Vec<&'stat compatible_brands.push(b"cud1"); } } - #[cfg(not(feature = "v1_18"))] - { - // Assume it's OK - compatible_brands.push(b"cud1"); - } } } } @@ -1109,50 +1087,11 @@ fn write_visual_sample_entry( write_box(v, b"colr", move |v| { v.extend(b"nclx"); let (primaries, transfer, matrix) = { - #[cfg(feature = "v1_18")] - { - ( - (colorimetry.primaries().to_iso() as u16), - (colorimetry.transfer().to_iso() as u16), - (colorimetry.matrix().to_iso() as u16), - ) - } - #[cfg(not(feature = "v1_18"))] - { - let primaries = match colorimetry.primaries() { - gst_video::VideoColorPrimaries::Bt709 => 1u16, - gst_video::VideoColorPrimaries::Bt470m => 4u16, - gst_video::VideoColorPrimaries::Bt470bg => 5u16, - gst_video::VideoColorPrimaries::Smpte170m => 6u16, - gst_video::VideoColorPrimaries::Smpte240m => 7u16, - gst_video::VideoColorPrimaries::Film => 8u16, - gst_video::VideoColorPrimaries::Bt2020 => 9u16, - _ => 2, - }; - let transfer = match colorimetry.transfer() { - gst_video::VideoTransferFunction::Bt709 => 1u16, - gst_video::VideoTransferFunction::Gamma22 => 4u16, - gst_video::VideoTransferFunction::Gamma28 => 5u16, - gst_video::VideoTransferFunction::Smpte240m => 7u16, - gst_video::VideoTransferFunction::Gamma10 => 8u16, - gst_video::VideoTransferFunction::Log100 => 9u16, - gst_video::VideoTransferFunction::Log316 => 10u16, - gst_video::VideoTransferFunction::Srgb => 13u16, - gst_video::VideoTransferFunction::Bt202012 => 15u16, - _ => 2, - }; - let matrix = match colorimetry.matrix() { - gst_video::VideoColorMatrix::Rgb => 0u16, - gst_video::VideoColorMatrix::Bt709 => 1u16, - gst_video::VideoColorMatrix::Fcc => 4u16, - gst_video::VideoColorMatrix::Bt601 => 6u16, - gst_video::VideoColorMatrix::Smpte240m => 7u16, - gst_video::VideoColorMatrix::Bt2020 => 9u16, - _ => 2, - }; - - (primaries, transfer, matrix) - } + ( + (colorimetry.primaries().to_iso() as u16), + (colorimetry.transfer().to_iso() as u16), + (colorimetry.matrix().to_iso() as u16), + ) }; let full_range = match colorimetry.range() { @@ -1170,29 +1109,26 @@ fn write_visual_sample_entry( })?; } - #[cfg(feature = "v1_18")] - { - if let Ok(cll) = gst_video::VideoContentLightLevel::from_caps(&stream.caps) { - write_box(v, b"clli", move |v| { - v.extend((cll.max_content_light_level() as u16).to_be_bytes()); - v.extend((cll.max_frame_average_light_level() as u16).to_be_bytes()); - Ok(()) - })?; - } + if let Ok(cll) = gst_video::VideoContentLightLevel::from_caps(&stream.caps) { + write_box(v, b"clli", move |v| { + v.extend((cll.max_content_light_level() as u16).to_be_bytes()); + v.extend((cll.max_frame_average_light_level() as u16).to_be_bytes()); + Ok(()) + })?; + } - if let Ok(mastering) = gst_video::VideoMasteringDisplayInfo::from_caps(&stream.caps) { - write_box(v, b"mdcv", move |v| { - for primary in mastering.display_primaries() { - v.extend(primary.x.to_be_bytes()); - v.extend(primary.y.to_be_bytes()); - } - v.extend(mastering.white_point().x.to_be_bytes()); - v.extend(mastering.white_point().y.to_be_bytes()); - v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); - v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); - Ok(()) - })?; - } + if let Ok(mastering) = gst_video::VideoMasteringDisplayInfo::from_caps(&stream.caps) { + write_box(v, b"mdcv", move |v| { + for primary in mastering.display_primaries() { + v.extend(primary.x.to_be_bytes()); + v.extend(primary.y.to_be_bytes()); + } + v.extend(mastering.white_point().x.to_be_bytes()); + v.extend(mastering.white_point().y.to_be_bytes()); + v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); + v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); + Ok(()) + })?; } // Write fiel box for codecs that require it diff --git a/mux/mp4/Cargo.toml b/mux/mp4/Cargo.toml index dbcd89c5..121baf12 100644 --- a/mux/mp4/Cargo.toml +++ b/mux/mp4/Cargo.toml @@ -10,11 +10,11 @@ rust-version = "1.63" [dependencies] anyhow = "1" -gst = { package = "gstreamer", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } -gst-base = { package = "gstreamer-base", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } -gst-audio = { package = "gstreamer-audio", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } -gst-video = { package = "gstreamer-video", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } -gst-pbutils = { package = "gstreamer-pbutils", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" } +gst = { package = "gstreamer", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } +gst-base = { package = "gstreamer-base", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } +gst-audio = { package = "gstreamer-audio", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } +gst-video = { package = "gstreamer-video", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } +gst-pbutils = { package = "gstreamer-pbutils", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] } once_cell = "1.0" [lib] @@ -30,11 +30,10 @@ url = "2" gst-plugin-version-helper = { path="../../version-helper" } [features] -default = ["v1_18"] +default = [] static = [] capi = [] -v1_18 = ["gst-video/v1_18"] -doc = ["gst/v1_18"] +doc = [] [package.metadata.capi] min_version = "0.8.0" diff --git a/mux/mp4/src/mp4mux/boxes.rs b/mux/mp4/src/mp4mux/boxes.rs index b160ce2b..760e627d 100644 --- a/mux/mp4/src/mp4mux/boxes.rs +++ b/mux/mp4/src/mp4mux/boxes.rs @@ -904,50 +904,11 @@ fn write_visual_sample_entry( write_box(v, b"colr", move |v| { v.extend(b"nclx"); let (primaries, transfer, matrix) = { - #[cfg(feature = "v1_18")] - { - ( - (colorimetry.primaries().to_iso() as u16), - (colorimetry.transfer().to_iso() as u16), - (colorimetry.matrix().to_iso() as u16), - ) - } - #[cfg(not(feature = "v1_18"))] - { - let primaries = match colorimetry.primaries() { - gst_video::VideoColorPrimaries::Bt709 => 1u16, - gst_video::VideoColorPrimaries::Bt470m => 4u16, - gst_video::VideoColorPrimaries::Bt470bg => 5u16, - gst_video::VideoColorPrimaries::Smpte170m => 6u16, - gst_video::VideoColorPrimaries::Smpte240m => 7u16, - gst_video::VideoColorPrimaries::Film => 8u16, - gst_video::VideoColorPrimaries::Bt2020 => 9u16, - _ => 2, - }; - let transfer = match colorimetry.transfer() { - gst_video::VideoTransferFunction::Bt709 => 1u16, - gst_video::VideoTransferFunction::Gamma22 => 4u16, - gst_video::VideoTransferFunction::Gamma28 => 5u16, - gst_video::VideoTransferFunction::Smpte240m => 7u16, - gst_video::VideoTransferFunction::Gamma10 => 8u16, - gst_video::VideoTransferFunction::Log100 => 9u16, - gst_video::VideoTransferFunction::Log316 => 10u16, - gst_video::VideoTransferFunction::Srgb => 13u16, - gst_video::VideoTransferFunction::Bt202012 => 15u16, - _ => 2, - }; - let matrix = match colorimetry.matrix() { - gst_video::VideoColorMatrix::Rgb => 0u16, - gst_video::VideoColorMatrix::Bt709 => 1u16, - gst_video::VideoColorMatrix::Fcc => 4u16, - gst_video::VideoColorMatrix::Bt601 => 6u16, - gst_video::VideoColorMatrix::Smpte240m => 7u16, - gst_video::VideoColorMatrix::Bt2020 => 9u16, - _ => 2, - }; - - (primaries, transfer, matrix) - } + ( + (colorimetry.primaries().to_iso() as u16), + (colorimetry.transfer().to_iso() as u16), + (colorimetry.matrix().to_iso() as u16), + ) }; let full_range = match colorimetry.range() { @@ -965,29 +926,26 @@ fn write_visual_sample_entry( })?; } - #[cfg(feature = "v1_18")] - { - if let Ok(cll) = gst_video::VideoContentLightLevel::from_caps(&stream.caps) { - write_box(v, b"clli", move |v| { - v.extend((cll.max_content_light_level() as u16).to_be_bytes()); - v.extend((cll.max_frame_average_light_level() as u16).to_be_bytes()); - Ok(()) - })?; - } + if let Ok(cll) = gst_video::VideoContentLightLevel::from_caps(&stream.caps) { + write_box(v, b"clli", move |v| { + v.extend((cll.max_content_light_level() as u16).to_be_bytes()); + v.extend((cll.max_frame_average_light_level() as u16).to_be_bytes()); + Ok(()) + })?; + } - if let Ok(mastering) = gst_video::VideoMasteringDisplayInfo::from_caps(&stream.caps) { - write_box(v, b"mdcv", move |v| { - for primary in mastering.display_primaries() { - v.extend(primary.x.to_be_bytes()); - v.extend(primary.y.to_be_bytes()); - } - v.extend(mastering.white_point().x.to_be_bytes()); - v.extend(mastering.white_point().y.to_be_bytes()); - v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); - v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); - Ok(()) - })?; - } + if let Ok(mastering) = gst_video::VideoMasteringDisplayInfo::from_caps(&stream.caps) { + write_box(v, b"mdcv", move |v| { + for primary in mastering.display_primaries() { + v.extend(primary.x.to_be_bytes()); + v.extend(primary.y.to_be_bytes()); + } + v.extend(mastering.white_point().x.to_be_bytes()); + v.extend(mastering.white_point().y.to_be_bytes()); + v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); + v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); + Ok(()) + })?; } // Write fiel box for codecs that require it