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
use glib;
use glib::translate::*;
use glib::GString;
use gst_sys;
use std;
use std::ptr;
use Object;
use PluginDependencyFlags;
glib_wrapper! {
pub struct Plugin(Object<gst_sys::GstPlugin, gst_sys::GstPluginClass, PluginClass>) @extends Object;
match fn {
get_type => || gst_sys::gst_plugin_get_type(),
}
}
impl Plugin {
pub fn add_dependency(
&self,
env_vars: &[&str],
paths: &[&str],
names: &[&str],
flags: PluginDependencyFlags,
) {
unsafe {
gst_sys::gst_plugin_add_dependency(
self.to_glib_none().0,
env_vars.to_glib_none().0,
paths.to_glib_none().0,
names.to_glib_none().0,
flags.to_glib(),
);
}
}
pub fn add_dependency_simple(
&self,
env_vars: Option<&str>,
paths: Option<&str>,
names: Option<&str>,
flags: PluginDependencyFlags,
) {
unsafe {
gst_sys::gst_plugin_add_dependency_simple(
self.to_glib_none().0,
env_vars.to_glib_none().0,
paths.to_glib_none().0,
names.to_glib_none().0,
flags.to_glib(),
);
}
}
pub fn get_description(&self) -> GString {
unsafe { from_glib_none(gst_sys::gst_plugin_get_description(self.to_glib_none().0)) }
}
pub fn get_filename(&self) -> Option<std::path::PathBuf> {
unsafe { from_glib_none(gst_sys::gst_plugin_get_filename(self.to_glib_none().0)) }
}
pub fn get_license(&self) -> GString {
unsafe { from_glib_none(gst_sys::gst_plugin_get_license(self.to_glib_none().0)) }
}
pub fn get_origin(&self) -> GString {
unsafe { from_glib_none(gst_sys::gst_plugin_get_origin(self.to_glib_none().0)) }
}
pub fn get_package(&self) -> GString {
unsafe { from_glib_none(gst_sys::gst_plugin_get_package(self.to_glib_none().0)) }
}
pub fn get_release_date_string(&self) -> Option<GString> {
unsafe {
from_glib_none(gst_sys::gst_plugin_get_release_date_string(
self.to_glib_none().0,
))
}
}
pub fn get_source(&self) -> GString {
unsafe { from_glib_none(gst_sys::gst_plugin_get_source(self.to_glib_none().0)) }
}
pub fn get_version(&self) -> GString {
unsafe { from_glib_none(gst_sys::gst_plugin_get_version(self.to_glib_none().0)) }
}
pub fn is_loaded(&self) -> bool {
unsafe { from_glib(gst_sys::gst_plugin_is_loaded(self.to_glib_none().0)) }
}
pub fn load(&self) -> Result<Plugin, glib::BoolError> {
unsafe {
Option::<_>::from_glib_full(gst_sys::gst_plugin_load(self.to_glib_none().0))
.ok_or_else(|| glib_bool_error!("Failed to load plugin"))
}
}
pub fn load_by_name(name: &str) -> Result<Plugin, glib::BoolError> {
assert_initialized_main_thread!();
unsafe {
Option::<_>::from_glib_full(gst_sys::gst_plugin_load_by_name(name.to_glib_none().0))
.ok_or_else(|| glib_bool_error!("Failed to load plugin"))
}
}
pub fn load_file<P: AsRef<std::path::Path>>(filename: P) -> Result<Plugin, glib::Error> {
assert_initialized_main_thread!();
unsafe {
let mut error = ptr::null_mut();
let ret = gst_sys::gst_plugin_load_file(filename.as_ref().to_glib_none().0, &mut error);
if error.is_null() {
Ok(from_glib_full(ret))
} else {
Err(from_glib_full(error))
}
}
}
}
unsafe impl Send for Plugin {}
unsafe impl Sync for Plugin {}