gstreamer/
registry.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use glib::translate::*;
4
5use crate::{ffi, Plugin, PluginFeature, Registry};
6
7impl Registry {
8    #[doc(alias = "gst_registry_update")]
9    pub fn update() -> Result<(), glib::BoolError> {
10        crate::auto::functions::update_registry()
11    }
12
13    #[doc(alias = "gst_registry_feature_filter")]
14    pub fn features_filtered<P: FnMut(&PluginFeature) -> bool>(
15        &self,
16        filter: P,
17        first: bool,
18    ) -> glib::List<PluginFeature> {
19        let mut filter_data: P = filter;
20        unsafe extern "C" fn filter_func<P: FnMut(&PluginFeature) -> bool>(
21            feature: *mut ffi::GstPluginFeature,
22            user_data: glib::ffi::gpointer,
23        ) -> glib::ffi::gboolean {
24            let feature = from_glib_borrow(feature);
25            let callback = user_data as *mut P;
26            let res = (*callback)(&feature);
27            res.into_glib()
28        }
29        let filter = Some(filter_func::<P> as _);
30        let super_callback0: &mut P = &mut filter_data;
31        unsafe {
32            FromGlibPtrContainer::from_glib_full(ffi::gst_registry_feature_filter(
33                self.to_glib_none().0,
34                filter,
35                first.into_glib(),
36                super_callback0 as *mut _ as *mut _,
37            ))
38        }
39    }
40
41    #[doc(alias = "gst_registry_get_feature_list")]
42    #[doc(alias = "get_feature_list")]
43    pub fn features(&self, type_: glib::types::Type) -> glib::List<PluginFeature> {
44        unsafe {
45            FromGlibPtrContainer::from_glib_full(ffi::gst_registry_get_feature_list(
46                self.to_glib_none().0,
47                type_.into_glib(),
48            ))
49        }
50    }
51
52    #[doc(alias = "gst_registry_get_feature_list_by_plugin")]
53    #[doc(alias = "get_feature_list_by_plugin")]
54    pub fn features_by_plugin(&self, name: &str) -> glib::List<PluginFeature> {
55        unsafe {
56            FromGlibPtrContainer::from_glib_full(ffi::gst_registry_get_feature_list_by_plugin(
57                self.to_glib_none().0,
58                name.to_glib_none().0,
59            ))
60        }
61    }
62
63    #[doc(alias = "gst_registry_get_plugin_list")]
64    #[doc(alias = "get_plugin_list")]
65    pub fn plugins(&self) -> glib::List<Plugin> {
66        unsafe {
67            FromGlibPtrContainer::from_glib_full(ffi::gst_registry_get_plugin_list(
68                self.to_glib_none().0,
69            ))
70        }
71    }
72
73    #[doc(alias = "gst_registry_plugin_filter")]
74    pub fn plugins_filtered<P: FnMut(&Plugin) -> bool>(
75        &self,
76        filter: P,
77        first: bool,
78    ) -> glib::List<Plugin> {
79        let mut filter_data: P = filter;
80        unsafe extern "C" fn filter_func<P: FnMut(&Plugin) -> bool>(
81            plugin: *mut ffi::GstPlugin,
82            user_data: glib::ffi::gpointer,
83        ) -> glib::ffi::gboolean {
84            let plugin = from_glib_borrow(plugin);
85            let callback = user_data as *mut P;
86            let res = (*callback)(&plugin);
87            res.into_glib()
88        }
89        let filter = Some(filter_func::<P> as _);
90        let super_callback0: &mut P = &mut filter_data;
91        unsafe {
92            FromGlibPtrContainer::from_glib_full(ffi::gst_registry_plugin_filter(
93                self.to_glib_none().0,
94                filter,
95                first.into_glib(),
96                super_callback0 as *mut _ as *mut _,
97            ))
98        }
99    }
100}