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
use std::ptr;
use gst_sys;
use glib::translate::from_glib_full;
use glib::IsA;
use AllocationParams;
use Allocator;
use Memory;
pub trait AllocatorExtManual: 'static {
fn alloc(
&self,
size: usize,
params: Option<&AllocationParams>,
) -> Result<Memory, glib::BoolError>;
}
impl<O: IsA<Allocator>> AllocatorExtManual for O {
fn alloc(
&self,
size: usize,
params: Option<&AllocationParams>,
) -> Result<Memory, glib::BoolError> {
unsafe {
let ret = gst_sys::gst_allocator_alloc(
self.as_ptr() as *mut _,
size,
match params {
Some(val) => val.as_ptr() as *mut _,
None => ptr::null_mut(),
},
);
if ret.is_null() {
Err(glib_bool_error!("Failed to allocate memory"))
} else {
Ok(from_glib_full(ret))
}
}
}
}