1use crate::{ffi, Object, PluginDependencyFlags, Structure};
7use glib::translate::*;
8
9glib::wrapper! {
10 #[doc(alias = "GstPlugin")]
11 pub struct Plugin(Object<ffi::GstPlugin, ffi::GstPluginClass>) @extends Object;
12
13 match fn {
14 type_ => || ffi::gst_plugin_get_type(),
15 }
16}
17
18impl Plugin {
19 #[doc(alias = "gst_plugin_add_dependency")]
20 pub fn add_dependency(
21 &self,
22 env_vars: &[&str],
23 paths: &[&str],
24 names: &[&str],
25 flags: PluginDependencyFlags,
26 ) {
27 unsafe {
28 ffi::gst_plugin_add_dependency(
29 self.to_glib_none().0,
30 env_vars.to_glib_none().0,
31 paths.to_glib_none().0,
32 names.to_glib_none().0,
33 flags.into_glib(),
34 );
35 }
36 }
37
38 #[doc(alias = "gst_plugin_add_dependency_simple")]
39 pub fn add_dependency_simple(
40 &self,
41 env_vars: Option<&str>,
42 paths: Option<&str>,
43 names: Option<&str>,
44 flags: PluginDependencyFlags,
45 ) {
46 unsafe {
47 ffi::gst_plugin_add_dependency_simple(
48 self.to_glib_none().0,
49 env_vars.to_glib_none().0,
50 paths.to_glib_none().0,
51 names.to_glib_none().0,
52 flags.into_glib(),
53 );
54 }
55 }
56
57 #[cfg(feature = "v1_24")]
58 #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
59 #[doc(alias = "gst_plugin_add_status_error")]
60 pub fn add_status_error(&self, message: &str) {
61 unsafe {
62 ffi::gst_plugin_add_status_error(self.to_glib_none().0, message.to_glib_none().0);
63 }
64 }
65
66 #[cfg(feature = "v1_24")]
67 #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
68 #[doc(alias = "gst_plugin_add_status_info")]
69 pub fn add_status_info(&self, message: &str) {
70 unsafe {
71 ffi::gst_plugin_add_status_info(self.to_glib_none().0, message.to_glib_none().0);
72 }
73 }
74
75 #[cfg(feature = "v1_24")]
76 #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
77 #[doc(alias = "gst_plugin_add_status_warning")]
78 pub fn add_status_warning(&self, message: &str) {
79 unsafe {
80 ffi::gst_plugin_add_status_warning(self.to_glib_none().0, message.to_glib_none().0);
81 }
82 }
83
84 #[doc(alias = "gst_plugin_get_description")]
85 #[doc(alias = "get_description")]
86 pub fn description(&self) -> glib::GString {
87 unsafe { from_glib_none(ffi::gst_plugin_get_description(self.to_glib_none().0)) }
88 }
89
90 #[doc(alias = "gst_plugin_get_filename")]
91 #[doc(alias = "get_filename")]
92 pub fn filename(&self) -> Option<std::path::PathBuf> {
93 unsafe { from_glib_none(ffi::gst_plugin_get_filename(self.to_glib_none().0)) }
94 }
95
96 #[doc(alias = "gst_plugin_get_license")]
97 #[doc(alias = "get_license")]
98 pub fn license(&self) -> glib::GString {
99 unsafe { from_glib_none(ffi::gst_plugin_get_license(self.to_glib_none().0)) }
100 }
101
102 #[doc(alias = "gst_plugin_get_name")]
103 #[doc(alias = "get_name")]
104 pub fn plugin_name(&self) -> glib::GString {
105 unsafe { from_glib_none(ffi::gst_plugin_get_name(self.to_glib_none().0)) }
106 }
107
108 #[doc(alias = "gst_plugin_get_origin")]
109 #[doc(alias = "get_origin")]
110 pub fn origin(&self) -> glib::GString {
111 unsafe { from_glib_none(ffi::gst_plugin_get_origin(self.to_glib_none().0)) }
112 }
113
114 #[doc(alias = "gst_plugin_get_package")]
115 #[doc(alias = "get_package")]
116 pub fn package(&self) -> glib::GString {
117 unsafe { from_glib_none(ffi::gst_plugin_get_package(self.to_glib_none().0)) }
118 }
119
120 #[doc(alias = "gst_plugin_get_release_date_string")]
121 #[doc(alias = "get_release_date_string")]
122 pub fn release_date_string(&self) -> Option<glib::GString> {
123 unsafe {
124 from_glib_none(ffi::gst_plugin_get_release_date_string(
125 self.to_glib_none().0,
126 ))
127 }
128 }
129
130 #[doc(alias = "gst_plugin_get_source")]
131 #[doc(alias = "get_source")]
132 pub fn source(&self) -> glib::GString {
133 unsafe { from_glib_none(ffi::gst_plugin_get_source(self.to_glib_none().0)) }
134 }
135
136 #[cfg(feature = "v1_24")]
137 #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
138 #[doc(alias = "gst_plugin_get_status_errors")]
139 #[doc(alias = "get_status_errors")]
140 pub fn status_errors(&self) -> Vec<glib::GString> {
141 unsafe {
142 FromGlibPtrContainer::from_glib_full(ffi::gst_plugin_get_status_errors(
143 self.to_glib_none().0,
144 ))
145 }
146 }
147
148 #[cfg(feature = "v1_24")]
149 #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
150 #[doc(alias = "gst_plugin_get_status_infos")]
151 #[doc(alias = "get_status_infos")]
152 pub fn status_infos(&self) -> Vec<glib::GString> {
153 unsafe {
154 FromGlibPtrContainer::from_glib_full(ffi::gst_plugin_get_status_infos(
155 self.to_glib_none().0,
156 ))
157 }
158 }
159
160 #[cfg(feature = "v1_24")]
161 #[cfg_attr(docsrs, doc(cfg(feature = "v1_24")))]
162 #[doc(alias = "gst_plugin_get_status_warnings")]
163 #[doc(alias = "get_status_warnings")]
164 pub fn status_warnings(&self) -> Vec<glib::GString> {
165 unsafe {
166 FromGlibPtrContainer::from_glib_full(ffi::gst_plugin_get_status_warnings(
167 self.to_glib_none().0,
168 ))
169 }
170 }
171
172 #[doc(alias = "gst_plugin_get_version")]
173 #[doc(alias = "get_version")]
174 pub fn version(&self) -> glib::GString {
175 unsafe { from_glib_none(ffi::gst_plugin_get_version(self.to_glib_none().0)) }
176 }
177
178 #[doc(alias = "gst_plugin_is_loaded")]
179 pub fn is_loaded(&self) -> bool {
180 unsafe { from_glib(ffi::gst_plugin_is_loaded(self.to_glib_none().0)) }
181 }
182
183 #[doc(alias = "gst_plugin_load")]
184 pub fn load(&self) -> Result<Plugin, glib::BoolError> {
185 unsafe {
186 Option::<_>::from_glib_full(ffi::gst_plugin_load(self.to_glib_none().0))
187 .ok_or_else(|| glib::bool_error!("Failed to load plugin"))
188 }
189 }
190
191 #[doc(alias = "gst_plugin_set_cache_data")]
192 pub fn set_cache_data(&self, cache_data: Structure) {
193 unsafe {
194 ffi::gst_plugin_set_cache_data(self.to_glib_none().0, cache_data.into_glib_ptr());
195 }
196 }
197
198 #[doc(alias = "gst_plugin_load_by_name")]
199 pub fn load_by_name(name: &str) -> Result<Plugin, glib::BoolError> {
200 assert_initialized_main_thread!();
201 unsafe {
202 Option::<_>::from_glib_full(ffi::gst_plugin_load_by_name(name.to_glib_none().0))
203 .ok_or_else(|| glib::bool_error!("Failed to load plugin"))
204 }
205 }
206
207 #[doc(alias = "gst_plugin_load_file")]
208 pub fn load_file(filename: impl AsRef<std::path::Path>) -> Result<Plugin, glib::Error> {
209 assert_initialized_main_thread!();
210 unsafe {
211 let mut error = std::ptr::null_mut();
212 let ret = ffi::gst_plugin_load_file(filename.as_ref().to_glib_none().0, &mut error);
213 if error.is_null() {
214 Ok(from_glib_full(ret))
215 } else {
216 Err(from_glib_full(error))
217 }
218 }
219 }
220}
221
222impl std::fmt::Display for Plugin {
223 #[inline]
224 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
225 f.write_str(&self.plugin_name())
226 }
227}
228
229unsafe impl Send for Plugin {}
230unsafe impl Sync for Plugin {}