gstreamer: Improve accessors to various pad template fields

This commit is contained in:
Sebastian Dröge 2022-05-06 16:06:02 +03:00
parent 45856ac35b
commit 0aa59be45c
3 changed files with 88 additions and 36 deletions

View file

@ -1796,6 +1796,36 @@ final_type = true
# static pad template manual
manual = true
[[object.function]]
name = "get_caps"
# directly access the field
manual = true
[[object.function]]
name = "get_documentation_caps"
# directly access the field
manual = true
[[object.property]]
name = "name-template"
# directly access the field and borrow the string
manual = true
[[object.property]]
name = "direction"
# directly access the field
manual = true
[[object.property]]
name = "presence"
# directly access the field
manual = true
[[object.property]]
name = "gtype"
# directly access the field
manual = true
[[object]]
name = "Gst.ParseContext"
status = "manual"

View file

@ -13,7 +13,6 @@ use glib::object::ObjectType as ObjectType_;
use glib::signal::connect_raw;
use glib::signal::SignalHandlerId;
use glib::translate::*;
use glib::StaticType;
use std::boxed::Box as Box_;
use std::mem::transmute;
@ -68,24 +67,6 @@ impl PadTemplate {
}
}
#[doc(alias = "gst_pad_template_get_caps")]
#[doc(alias = "get_caps")]
pub fn caps(&self) -> Caps {
unsafe { from_glib_full(ffi::gst_pad_template_get_caps(self.to_glib_none().0)) }
}
#[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
#[doc(alias = "gst_pad_template_get_documentation_caps")]
#[doc(alias = "get_documentation_caps")]
pub fn documentation_caps(&self) -> Caps {
unsafe {
from_glib_full(ffi::gst_pad_template_get_documentation_caps(
self.to_glib_none().0,
))
}
}
#[doc(alias = "gst_pad_template_pad_created")]
pub fn pad_created(&self, pad: &impl IsA<Pad>) {
unsafe {
@ -105,23 +86,6 @@ impl PadTemplate {
}
}
pub fn direction(&self) -> PadDirection {
glib::ObjectExt::property(self, "direction")
}
pub fn gtype(&self) -> glib::types::Type {
glib::ObjectExt::property(self, "gtype")
}
#[doc(alias = "name-template")]
pub fn name_template(&self) -> Option<glib::GString> {
glib::ObjectExt::property(self, "name-template")
}
pub fn presence(&self) -> PadPresence {
glib::ObjectExt::property(self, "presence")
}
#[doc(alias = "pad-created")]
pub fn connect_pad_created<F: Fn(&Self, &Pad) + Send + Sync + 'static>(
&self,

View file

@ -1,8 +1,13 @@
// Take a look at the license at the top of the repository in the LICENSE file.
use crate::Caps;
use crate::PadDirection;
use crate::PadPresence;
use crate::PadTemplate;
use crate::StaticPadTemplate;
use glib::prelude::*;
use glib::translate::*;
use std::ffi::CStr;
impl PadTemplate {
#[doc(alias = "gst_pad_template_new_from_static_pad_template_with_gtype")]
@ -21,4 +26,57 @@ impl PadTemplate {
.ok_or_else(|| glib::bool_error!("Failed to create PadTemplate"))
}
}
#[doc(alias = "gst_pad_template_get_caps")]
#[doc(alias = "get_caps")]
pub fn caps(&self) -> &Caps {
unsafe {
let templ = &*(self.as_ptr() as *const ffi::GstPadTemplate);
&*(&templ.caps as *const *mut ffi::GstCaps as *const Caps)
}
}
#[cfg(any(feature = "v1_18", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_18")))]
#[doc(alias = "gst_pad_template_get_documentation_caps")]
#[doc(alias = "get_documentation_caps")]
pub fn documentation_caps(&self) -> &Caps {
unsafe {
let templ = &*(self.as_ptr() as *const ffi::GstPadTemplate);
if !templ.ABI.abi.documentation_caps.is_null() {
&*(&templ.ABI.abi.documentation_caps as *const *mut ffi::GstCaps as *const Caps)
} else {
&*(&templ.caps as *const *mut ffi::GstCaps as *const Caps)
}
}
}
pub fn direction(&self) -> PadDirection {
unsafe {
let templ = &*(self.as_ptr() as *const ffi::GstPadTemplate);
from_glib(templ.direction)
}
}
pub fn gtype(&self) -> glib::types::Type {
unsafe {
let templ = &*(self.as_ptr() as *const ffi::GstPadTemplate);
from_glib(templ.ABI.abi.gtype)
}
}
#[doc(alias = "name-template")]
pub fn name_template(&self) -> &str {
unsafe {
let templ = &*(self.as_ptr() as *const ffi::GstPadTemplate);
CStr::from_ptr(templ.name_template).to_str().unwrap()
}
}
pub fn presence(&self) -> PadPresence {
unsafe {
let templ = &*(self.as_ptr() as *const ffi::GstPadTemplate);
from_glib(templ.presence)
}
}
}