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]
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"

View file

@ -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::<gst_video::VideoColorimetry>().ok())
{
if let Some(colorimetry) = colorimetry
.and_then(|c| c.parse::<gst_video::VideoColorimetry>().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::<gst_video::VideoColorimetry>().ok())
{
if let Some(colorimetry) = colorimetry
.and_then(|c| c.parse::<gst_video::VideoColorimetry>().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::<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");
}
}
#[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

View file

@ -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"

View file

@ -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