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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/588>
This commit is contained in:
Jordan Petridis 2022-11-29 15:02:37 +02:00
parent 821c23e202
commit a84eeeb240
4 changed files with 92 additions and 200 deletions

View file

@ -10,11 +10,11 @@ rust-version = "1.63"
[dependencies] [dependencies]
anyhow = "1" anyhow = "1"
gst = { package = "gstreamer", 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" } 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" } 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" } 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" } gst-pbutils = { package = "gstreamer-pbutils", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] }
once_cell = "1.0" once_cell = "1.0"
[lib] [lib]
@ -33,11 +33,10 @@ chrono = "0.4"
gst-plugin-version-helper = { path="../../version-helper" } gst-plugin-version-helper = { path="../../version-helper" }
[features] [features]
default = ["v1_18"] default = []
static = [] static = []
capi = [] capi = []
v1_18 = ["gst-video/v1_18"] doc = []
doc = ["gst/v1_18"]
[package.metadata.capi] [package.metadata.capi]
min_version = "0.8.0" min_version = "0.8.0"

View file

@ -82,34 +82,26 @@ fn cmaf_brands_from_caps(caps: &gst::CapsRef, compatible_brands: &mut Vec<&'stat
&& level <= ("3", "1") && level <= ("3", "1")
&& fps <= gst::Fraction::new(60, 1) && fps <= gst::Fraction::new(60, 1)
{ {
#[cfg(feature = "v1_18")] if let Some(colorimetry) =
colorimetry.and_then(|c| c.parse::<gst_video::VideoColorimetry>().ok())
{ {
if let Some(colorimetry) = colorimetry if matches!(
.and_then(|c| c.parse::<gst_video::VideoColorimetry>().ok()) colorimetry.primaries(),
{ gst_video::VideoColorPrimaries::Bt709
if matches!( | gst_video::VideoColorPrimaries::Bt470bg
colorimetry.primaries(), | gst_video::VideoColorPrimaries::Smpte170m
gst_video::VideoColorPrimaries::Bt709 ) && matches!(
| gst_video::VideoColorPrimaries::Bt470bg colorimetry.transfer(),
| gst_video::VideoColorPrimaries::Smpte170m gst_video::VideoTransferFunction::Bt709
) && matches!( | gst_video::VideoTransferFunction::Bt601
colorimetry.transfer(), ) && matches!(
gst_video::VideoTransferFunction::Bt709 colorimetry.matrix(),
| gst_video::VideoTransferFunction::Bt601 gst_video::VideoColorMatrix::Bt709
) && matches!( | gst_video::VideoColorMatrix::Bt601
colorimetry.matrix(), ) {
gst_video::VideoColorMatrix::Bt709
| gst_video::VideoColorMatrix::Bt601
) {
compatible_brands.push(b"cfsd");
}
} else {
// Assume it's OK
compatible_brands.push(b"cfsd"); compatible_brands.push(b"cfsd");
} }
} } else {
#[cfg(not(feature = "v1_18"))]
{
// Assume it's OK // Assume it's OK
compatible_brands.push(b"cfsd"); 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") && level <= ("4", "0")
&& fps <= gst::Fraction::new(60, 1) && fps <= gst::Fraction::new(60, 1)
{ {
#[cfg(feature = "v1_18")] if let Some(colorimetry) =
colorimetry.and_then(|c| c.parse::<gst_video::VideoColorimetry>().ok())
{ {
if let Some(colorimetry) = colorimetry if matches!(
.and_then(|c| c.parse::<gst_video::VideoColorimetry>().ok()) colorimetry.primaries(),
{ gst_video::VideoColorPrimaries::Bt709
if matches!( ) && matches!(
colorimetry.primaries(), colorimetry.transfer(),
gst_video::VideoColorPrimaries::Bt709 gst_video::VideoTransferFunction::Bt709
) && matches!( ) && matches!(
colorimetry.transfer(), colorimetry.matrix(),
gst_video::VideoTransferFunction::Bt709 gst_video::VideoColorMatrix::Bt709
) && matches!( ) {
colorimetry.matrix(),
gst_video::VideoColorMatrix::Bt709
) {
compatible_brands.push(b"cfhd");
}
} else {
// Assume it's OK
compatible_brands.push(b"cfhd"); compatible_brands.push(b"cfhd");
} }
} } else {
#[cfg(not(feature = "v1_18"))]
{
// Assume it's OK // Assume it's OK
compatible_brands.push(b"cfhd"); 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") && level <= ("5", "1")
&& fps <= gst::Fraction::new(60, 1) && fps <= gst::Fraction::new(60, 1)
{ {
#[cfg(feature = "v1_18")]
if let Some(colorimetry) = if let Some(colorimetry) =
colorimetry.and_then(|c| c.parse::<gst_video::VideoColorimetry>().ok()) colorimetry.and_then(|c| c.parse::<gst_video::VideoColorimetry>().ok())
{ {
@ -318,11 +301,6 @@ fn cmaf_brands_from_caps(caps: &gst::CapsRef, compatible_brands: &mut Vec<&'stat
compatible_brands.push(b"cud1"); 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| { write_box(v, b"colr", move |v| {
v.extend(b"nclx"); v.extend(b"nclx");
let (primaries, transfer, matrix) = { let (primaries, transfer, matrix) = {
#[cfg(feature = "v1_18")] (
{ (colorimetry.primaries().to_iso() as u16),
( (colorimetry.transfer().to_iso() as u16),
(colorimetry.primaries().to_iso() as u16), (colorimetry.matrix().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)
}
}; };
let full_range = match colorimetry.range() { 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| {
if let Ok(cll) = gst_video::VideoContentLightLevel::from_caps(&stream.caps) { v.extend((cll.max_content_light_level() as u16).to_be_bytes());
write_box(v, b"clli", move |v| { v.extend((cll.max_frame_average_light_level() as u16).to_be_bytes());
v.extend((cll.max_content_light_level() as u16).to_be_bytes()); Ok(())
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) { if let Ok(mastering) = gst_video::VideoMasteringDisplayInfo::from_caps(&stream.caps) {
write_box(v, b"mdcv", move |v| { write_box(v, b"mdcv", move |v| {
for primary in mastering.display_primaries() { for primary in mastering.display_primaries() {
v.extend(primary.x.to_be_bytes()); v.extend(primary.x.to_be_bytes());
v.extend(primary.y.to_be_bytes()); v.extend(primary.y.to_be_bytes());
} }
v.extend(mastering.white_point().x.to_be_bytes()); v.extend(mastering.white_point().x.to_be_bytes());
v.extend(mastering.white_point().y.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());
v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); v.extend(mastering.max_display_mastering_luminance().to_be_bytes());
Ok(()) Ok(())
})?; })?;
}
} }
// Write fiel box for codecs that require it // Write fiel box for codecs that require it

View file

@ -10,11 +10,11 @@ rust-version = "1.63"
[dependencies] [dependencies]
anyhow = "1" anyhow = "1"
gst = { package = "gstreamer", 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" } 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" } 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" } 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" } gst-pbutils = { package = "gstreamer-pbutils", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", features = ["v1_18"] }
once_cell = "1.0" once_cell = "1.0"
[lib] [lib]
@ -30,11 +30,10 @@ url = "2"
gst-plugin-version-helper = { path="../../version-helper" } gst-plugin-version-helper = { path="../../version-helper" }
[features] [features]
default = ["v1_18"] default = []
static = [] static = []
capi = [] capi = []
v1_18 = ["gst-video/v1_18"] doc = []
doc = ["gst/v1_18"]
[package.metadata.capi] [package.metadata.capi]
min_version = "0.8.0" min_version = "0.8.0"

View file

@ -904,50 +904,11 @@ fn write_visual_sample_entry(
write_box(v, b"colr", move |v| { write_box(v, b"colr", move |v| {
v.extend(b"nclx"); v.extend(b"nclx");
let (primaries, transfer, matrix) = { let (primaries, transfer, matrix) = {
#[cfg(feature = "v1_18")] (
{ (colorimetry.primaries().to_iso() as u16),
( (colorimetry.transfer().to_iso() as u16),
(colorimetry.primaries().to_iso() as u16), (colorimetry.matrix().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)
}
}; };
let full_range = match colorimetry.range() { 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| {
if let Ok(cll) = gst_video::VideoContentLightLevel::from_caps(&stream.caps) { v.extend((cll.max_content_light_level() as u16).to_be_bytes());
write_box(v, b"clli", move |v| { v.extend((cll.max_frame_average_light_level() as u16).to_be_bytes());
v.extend((cll.max_content_light_level() as u16).to_be_bytes()); Ok(())
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) { if let Ok(mastering) = gst_video::VideoMasteringDisplayInfo::from_caps(&stream.caps) {
write_box(v, b"mdcv", move |v| { write_box(v, b"mdcv", move |v| {
for primary in mastering.display_primaries() { for primary in mastering.display_primaries() {
v.extend(primary.x.to_be_bytes()); v.extend(primary.x.to_be_bytes());
v.extend(primary.y.to_be_bytes()); v.extend(primary.y.to_be_bytes());
} }
v.extend(mastering.white_point().x.to_be_bytes()); v.extend(mastering.white_point().x.to_be_bytes());
v.extend(mastering.white_point().y.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());
v.extend(mastering.max_display_mastering_luminance().to_be_bytes()); v.extend(mastering.max_display_mastering_luminance().to_be_bytes());
Ok(()) Ok(())
})?; })?;
}
} }
// Write fiel box for codecs that require it // Write fiel box for codecs that require it