pbutils: Fix new H266 codec helper bindings

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1632>
This commit is contained in:
Sebastian Dröge 2025-02-16 14:03:19 +02:00
parent e1e4162e1b
commit 557379bc27
3 changed files with 51 additions and 25 deletions

View file

@ -90,7 +90,7 @@ status = "generate"
ignore = true
[[object.function]]
pattern = "codec_utils_(aac_caps_set_level_and_profile|h264_caps_set_level_and_profile|h265_caps_set_level_tier_and_profile|mpeg4video_caps_set_level_and_profile)"
pattern = "codec_utils_(aac_caps_set_level_and_profile|h264_caps_set_level_and_profile|h265_caps_set_level_tier_and_profile|h266_caps_set_level_tier_and_profile|mpeg4video_caps_set_level_and_profile)"
# Needs mutable caps references and checks for the caps
manual = true
@ -133,6 +133,21 @@ status = "generate"
[object.function.return]
nullable_return_is_error = "Failed to get H265 tier"
[[object.function]]
name = "codec_utils_h266_get_level"
[object.function.return]
nullable_return_is_error = "Failed to get H266 level"
[[object.function]]
name = "codec_utils_h266_get_profile"
[object.function.return]
nullable_return_is_error = "Failed to get H266 profile"
[[object.function]]
name = "codec_utils_h266_get_tier"
[object.function.return]
nullable_return_is_error = "Failed to get H266 tier"
[[object.function]]
name = "codec_utils_mpeg4video_get_level"
[object.function.return]

View file

@ -172,35 +172,18 @@ pub fn codec_utils_h265_get_tier(
}
}
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
#[doc(alias = "gst_codec_utils_h266_caps_set_level_tier_and_profile")]
pub fn codec_utils_h266_caps_set_level_tier_and_profile(
caps: &gst::Caps,
decoder_configuration: &[u8],
) -> bool {
assert_initialized_main_thread!();
let len = decoder_configuration.len() as _;
unsafe {
from_glib(ffi::gst_codec_utils_h266_caps_set_level_tier_and_profile(
caps.to_glib_none().0,
decoder_configuration.to_glib_none().0,
len,
))
}
}
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
#[doc(alias = "gst_codec_utils_h266_get_level")]
pub fn codec_utils_h266_get_level(ptl_record: &[u8]) -> Option<glib::GString> {
pub fn codec_utils_h266_get_level(ptl_record: &[u8]) -> Result<glib::GString, glib::BoolError> {
assert_initialized_main_thread!();
let len = ptl_record.len() as _;
unsafe {
from_glib_none(ffi::gst_codec_utils_h266_get_level(
Option::<_>::from_glib_none(ffi::gst_codec_utils_h266_get_level(
ptl_record.to_glib_none().0,
len,
))
.ok_or_else(|| glib::bool_error!("Failed to get H266 level"))
}
}
@ -215,28 +198,30 @@ pub fn codec_utils_h266_get_level_idc(level: &str) -> u8 {
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
#[doc(alias = "gst_codec_utils_h266_get_profile")]
pub fn codec_utils_h266_get_profile(ptl_record: &[u8]) -> Option<glib::GString> {
pub fn codec_utils_h266_get_profile(ptl_record: &[u8]) -> Result<glib::GString, glib::BoolError> {
assert_initialized_main_thread!();
let len = ptl_record.len() as _;
unsafe {
from_glib_none(ffi::gst_codec_utils_h266_get_profile(
Option::<_>::from_glib_none(ffi::gst_codec_utils_h266_get_profile(
ptl_record.to_glib_none().0,
len,
))
.ok_or_else(|| glib::bool_error!("Failed to get H266 profile"))
}
}
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
#[doc(alias = "gst_codec_utils_h266_get_tier")]
pub fn codec_utils_h266_get_tier(ptl_record: &[u8]) -> Option<glib::GString> {
pub fn codec_utils_h266_get_tier(ptl_record: &[u8]) -> Result<glib::GString, glib::BoolError> {
assert_initialized_main_thread!();
let len = ptl_record.len() as _;
unsafe {
from_glib_none(ffi::gst_codec_utils_h266_get_tier(
Option::<_>::from_glib_none(ffi::gst_codec_utils_h266_get_tier(
ptl_record.to_glib_none().0,
len,
))
.ok_or_else(|| glib::bool_error!("Failed to get H266 tier"))
}
}

View file

@ -470,3 +470,29 @@ pub fn codec_utils_av1_create_av1c_from_caps(
.ok_or_else(|| glib::bool_error!("Failed to create AV1C header from caps"))
}
}
#[cfg(feature = "v1_26")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
#[doc(alias = "gst_codec_utils_h266_caps_set_level_tier_and_profile")]
pub fn codec_utils_h266_caps_set_level_tier_and_profile(
caps: &mut gst::CapsRef,
decoder_configuration: &[u8],
) -> Result<(), glib::BoolError> {
assert_initialized_main_thread!();
let len = decoder_configuration.len() as _;
unsafe {
let res: bool = from_glib(ffi::gst_codec_utils_h266_caps_set_level_tier_and_profile(
mut_override(caps.as_ptr()),
decoder_configuration.to_glib_none().0,
len,
));
if res {
Ok(())
} else {
Err(glib::bool_error!(
"Failed to set H266 level/tier/profile to caps"
))
}
}
}