1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
// DO NOT EDIT
use crate::{ffi, Object, PluginFeature, URIType};
use glib::translate::*;
glib::wrapper! {
/// [`ElementFactory`][crate::ElementFactory] is used to create instances of elements. A
/// GstElementFactory can be added to a [`Plugin`][crate::Plugin] as it is also a
/// [`PluginFeature`][crate::PluginFeature].
///
/// Use the [`find()`][Self::find()] and [`create_with_name()`][Self::create_with_name()]
/// functions to create element instances or use [`make_with_name()`][Self::make_with_name()] as a
/// convenient shortcut.
///
/// The following code example shows you how to create a GstFileSrc element.
///
/// ## Using an element factory
///
///
/// **⚠️ The following code is in C ⚠️**
///
/// ```C
/// #include <gst/gst.h>
///
/// GstElement *src;
/// GstElementFactory *srcfactory;
///
/// gst_init (&argc, &argv);
///
/// srcfactory = gst_element_factory_find ("filesrc");
/// g_return_if_fail (srcfactory != NULL);
/// src = gst_element_factory_create (srcfactory, "src");
/// g_return_if_fail (src != NULL);
/// ...
/// ```
///
/// # Implements
///
/// [`PluginFeatureExt`][trait@crate::prelude::PluginFeatureExt], [`GstObjectExt`][trait@crate::prelude::GstObjectExt], [`trait@glib::ObjectExt`], [`PluginFeatureExtManual`][trait@crate::prelude::PluginFeatureExtManual]
#[doc(alias = "GstElementFactory")]
pub struct ElementFactory(Object<ffi::GstElementFactory, ffi::GstElementFactoryClass>) @extends PluginFeature, Object;
match fn {
type_ => || ffi::gst_element_factory_get_type(),
}
}
impl ElementFactory {
/// Get the `GType` for elements managed by this factory. The type can
/// only be retrieved if the element factory is loaded, which can be
/// assured with [`PluginFeatureExtManual::load()`][crate::prelude::PluginFeatureExtManual::load()].
///
/// # Returns
///
/// the `GType` for elements managed by this factory or 0 if
/// the factory is not loaded.
#[doc(alias = "gst_element_factory_get_element_type")]
#[doc(alias = "get_element_type")]
pub fn element_type(&self) -> glib::types::Type {
unsafe {
from_glib(ffi::gst_element_factory_get_element_type(
self.to_glib_none().0,
))
}
}
/// Get the available keys for the metadata on `self`.
///
/// # Returns
///
///
/// a [`None`]-terminated array of key strings, or [`None`] when there is no
/// metadata. Free with `g_strfreev()` when no longer needed.
#[doc(alias = "gst_element_factory_get_metadata_keys")]
#[doc(alias = "get_metadata_keys")]
pub fn metadata_keys(&self) -> Vec<glib::GString> {
unsafe {
FromGlibPtrContainer::from_glib_full(ffi::gst_element_factory_get_metadata_keys(
self.to_glib_none().0,
))
}
}
/// Gets the number of pad_templates in this factory.
///
/// # Returns
///
/// the number of pad_templates
#[doc(alias = "gst_element_factory_get_num_pad_templates")]
#[doc(alias = "get_num_pad_templates")]
pub fn num_pad_templates(&self) -> u32 {
unsafe { ffi::gst_element_factory_get_num_pad_templates(self.to_glib_none().0) }
}
/// Queries whether registered element managed by `self` needs to
/// be excluded from documentation system or not.
///
/// # Returns
///
/// [`true`] if documentation should be skipped
#[cfg(feature = "v1_20")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_20")))]
#[doc(alias = "gst_element_factory_get_skip_documentation")]
#[doc(alias = "get_skip_documentation")]
pub fn skips_documentation(&self) -> bool {
unsafe {
from_glib(ffi::gst_element_factory_get_skip_documentation(
self.to_glib_none().0,
))
}
}
/// Gets a [`None`]-terminated array of protocols this element supports or [`None`] if
/// no protocols are supported. You may not change the contents of the returned
/// array, as it is still owned by the element factory. Use `g_strdupv()` to
/// make a copy of the protocol string array if you need to.
///
/// # Returns
///
/// the supported protocols
/// or [`None`]
#[doc(alias = "gst_element_factory_get_uri_protocols")]
#[doc(alias = "get_uri_protocols")]
pub fn uri_protocols(&self) -> Vec<glib::GString> {
unsafe {
FromGlibPtrContainer::from_glib_none(ffi::gst_element_factory_get_uri_protocols(
self.to_glib_none().0,
))
}
}
/// Gets the type of URIs the element supports or [`URIType::Unknown`][crate::URIType::Unknown] if none.
///
/// # Returns
///
/// type of URIs this element supports
#[doc(alias = "gst_element_factory_get_uri_type")]
#[doc(alias = "get_uri_type")]
pub fn uri_type(&self) -> URIType {
unsafe { from_glib(ffi::gst_element_factory_get_uri_type(self.to_glib_none().0)) }
}
/// Check if `self` implements the interface with name `interfacename`.
/// ## `interfacename`
/// an interface name
///
/// # Returns
///
/// [`true`] when `self` implement the interface.
#[doc(alias = "gst_element_factory_has_interface")]
pub fn has_interface(&self, interfacename: &str) -> bool {
unsafe {
from_glib(ffi::gst_element_factory_has_interface(
self.to_glib_none().0,
interfacename.to_glib_none().0,
))
}
}
/// Search for an element factory of the given name. Refs the returned
/// element factory; caller is responsible for unreffing.
/// ## `name`
/// name of factory to find
///
/// # Returns
///
/// [`ElementFactory`][crate::ElementFactory] if found,
/// [`None`] otherwise
#[doc(alias = "gst_element_factory_find")]
pub fn find(name: &str) -> Option<ElementFactory> {
assert_initialized_main_thread!();
unsafe { from_glib_full(ffi::gst_element_factory_find(name.to_glib_none().0)) }
}
}
unsafe impl Send for ElementFactory {}
unsafe impl Sync for ElementFactory {}