mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2025-02-22 05:46:24 +00:00
pbutils: Fix new H266 codec helper bindings
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1632>
This commit is contained in:
parent
e1e4162e1b
commit
557379bc27
3 changed files with 51 additions and 25 deletions
|
@ -90,7 +90,7 @@ status = "generate"
|
||||||
ignore = true
|
ignore = true
|
||||||
|
|
||||||
[[object.function]]
|
[[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
|
# Needs mutable caps references and checks for the caps
|
||||||
manual = true
|
manual = true
|
||||||
|
|
||||||
|
@ -133,6 +133,21 @@ status = "generate"
|
||||||
[object.function.return]
|
[object.function.return]
|
||||||
nullable_return_is_error = "Failed to get H265 tier"
|
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]]
|
[[object.function]]
|
||||||
name = "codec_utils_mpeg4video_get_level"
|
name = "codec_utils_mpeg4video_get_level"
|
||||||
[object.function.return]
|
[object.function.return]
|
||||||
|
|
|
@ -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(feature = "v1_26")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
|
||||||
#[doc(alias = "gst_codec_utils_h266_get_level")]
|
#[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!();
|
assert_initialized_main_thread!();
|
||||||
let len = ptl_record.len() as _;
|
let len = ptl_record.len() as _;
|
||||||
unsafe {
|
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,
|
ptl_record.to_glib_none().0,
|
||||||
len,
|
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(feature = "v1_26")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
|
||||||
#[doc(alias = "gst_codec_utils_h266_get_profile")]
|
#[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!();
|
assert_initialized_main_thread!();
|
||||||
let len = ptl_record.len() as _;
|
let len = ptl_record.len() as _;
|
||||||
unsafe {
|
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,
|
ptl_record.to_glib_none().0,
|
||||||
len,
|
len,
|
||||||
))
|
))
|
||||||
|
.ok_or_else(|| glib::bool_error!("Failed to get H266 profile"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "v1_26")]
|
#[cfg(feature = "v1_26")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
|
#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
|
||||||
#[doc(alias = "gst_codec_utils_h266_get_tier")]
|
#[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!();
|
assert_initialized_main_thread!();
|
||||||
let len = ptl_record.len() as _;
|
let len = ptl_record.len() as _;
|
||||||
unsafe {
|
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,
|
ptl_record.to_glib_none().0,
|
||||||
len,
|
len,
|
||||||
))
|
))
|
||||||
|
.ok_or_else(|| glib::bool_error!("Failed to get H266 tier"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"))
|
.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"
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue