gstreamer-rs/gstreamer/src/allocator.rs

51 lines
1.3 KiB
Rust
Raw Normal View History

2019-05-12 13:38:40 +00:00
// Copyright (C) 2019 Vivia Nikolaidou <vivia@ahiru.eu>
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use std::ptr;
use gst_sys;
use glib::translate::from_glib_full;
2019-05-12 13:38:40 +00:00
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>;
2019-05-12 13:38:40 +00:00
}
impl<O: IsA<Allocator>> AllocatorExtManual for O {
fn alloc(
&self,
size: usize,
params: Option<&AllocationParams>,
) -> Result<Memory, glib::BoolError> {
2019-05-12 13:38:40 +00:00
unsafe {
let ret = gst_sys::gst_allocator_alloc(
self.as_ptr() as *mut _,
size,
match params {
Some(val) => val.as_ptr() as *mut _,
2019-05-12 13:38:40 +00:00
None => ptr::null_mut(),
},
);
if ret.is_null() {
Err(glib_bool_error!("Failed to allocate memory"))
2019-05-12 13:38:40 +00:00
} else {
Ok(from_glib_full(ret))
2019-05-12 13:38:40 +00:00
}
}
}
}