mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-06-09 01:39:22 +00:00
Make ScopedBuffer a bit safer and explicit
This commit is contained in:
parent
61b5420102
commit
1ef938b6ec
|
@ -440,15 +440,19 @@ impl<'a> Drop for ReadWriteBufferMap<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct ScopedBufferPtr(*mut c_void);
|
||||||
|
|
||||||
pub struct ScopedBuffer<'a> {
|
pub struct ScopedBuffer<'a> {
|
||||||
buffer: Buffer,
|
buffer: Buffer,
|
||||||
phantom: PhantomData<&'a c_void>,
|
#[allow(dead_code)]
|
||||||
|
phantom: PhantomData<&'a ScopedBufferPtr>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> ScopedBuffer<'a> {
|
impl<'a> ScopedBuffer<'a> {
|
||||||
pub unsafe fn new(ptr: *mut c_void) -> ScopedBuffer<'a> {
|
pub unsafe fn new(ptr: &'a ScopedBufferPtr) -> ScopedBuffer<'a> {
|
||||||
ScopedBuffer {
|
ScopedBuffer {
|
||||||
buffer: Buffer::new_from_ptr_scoped(ptr),
|
buffer: Buffer::new_from_ptr_scoped(ptr.0),
|
||||||
phantom: PhantomData,
|
phantom: PhantomData,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -467,4 +471,3 @@ impl<'a> DerefMut for ScopedBuffer<'a> {
|
||||||
&mut self.buffer
|
&mut self.buffer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -205,12 +205,12 @@ pub unsafe extern "C" fn sink_stop(ptr: *const SinkWrapper) -> GBoolean {
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn sink_render(ptr: *const SinkWrapper,
|
pub unsafe extern "C" fn sink_render(ptr: *const SinkWrapper,
|
||||||
buffer: *mut c_void)
|
buffer: ScopedBufferPtr)
|
||||||
-> GstFlowReturn {
|
-> GstFlowReturn {
|
||||||
let wrap: &SinkWrapper = &*ptr;
|
let wrap: &SinkWrapper = &*ptr;
|
||||||
panic_to_error!(wrap, GstFlowReturn::Error, {
|
panic_to_error!(wrap, GstFlowReturn::Error, {
|
||||||
let sink = &mut wrap.sink.lock().unwrap();
|
let sink = &mut wrap.sink.lock().unwrap();
|
||||||
let buffer = ScopedBuffer::new(buffer);
|
let buffer = ScopedBuffer::new(&buffer);
|
||||||
|
|
||||||
match sink.render(&buffer) {
|
match sink.render(&buffer) {
|
||||||
Ok(..) => GstFlowReturn::Ok,
|
Ok(..) => GstFlowReturn::Ok,
|
||||||
|
|
|
@ -235,13 +235,13 @@ pub unsafe extern "C" fn source_stop(ptr: *const SourceWrapper) -> GBoolean {
|
||||||
pub unsafe extern "C" fn source_fill(ptr: *const SourceWrapper,
|
pub unsafe extern "C" fn source_fill(ptr: *const SourceWrapper,
|
||||||
offset: u64,
|
offset: u64,
|
||||||
length: u32,
|
length: u32,
|
||||||
buffer: *mut c_void)
|
buffer: ScopedBufferPtr)
|
||||||
-> GstFlowReturn {
|
-> GstFlowReturn {
|
||||||
let wrap: &SourceWrapper = &*ptr;
|
let wrap: &SourceWrapper = &*ptr;
|
||||||
|
|
||||||
panic_to_error!(wrap, GstFlowReturn::Error, {
|
panic_to_error!(wrap, GstFlowReturn::Error, {
|
||||||
let source = &mut wrap.source.lock().unwrap();
|
let source = &mut wrap.source.lock().unwrap();
|
||||||
let mut buffer = ScopedBuffer::new(buffer);
|
let mut buffer = ScopedBuffer::new(&buffer);
|
||||||
|
|
||||||
match source.fill(offset, length, &mut buffer) {
|
match source.fill(offset, length, &mut buffer) {
|
||||||
Ok(()) => GstFlowReturn::Ok,
|
Ok(()) => GstFlowReturn::Ok,
|
||||||
|
|
Loading…
Reference in a new issue