diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-09-12 18:30:51 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-09-12 20:18:36 +0300 |
commit | 1ef938b6ec1e729d6e83b23c025d2142ba154089 (patch) | |
tree | aa59619ab42ef1d0f4f8815e14784353d9621c21 | |
parent | 61b54201023f4d0d91cd2a7b5cb3ae4ebb6968ef (diff) |
Make ScopedBuffer a bit safer and explicit
-rw-r--r-- | src/buffer.rs | 11 | ||||
-rw-r--r-- | src/rssink.rs | 4 | ||||
-rw-r--r-- | src/rssource.rs | 4 |
3 files changed, 11 insertions, 8 deletions
diff --git a/src/buffer.rs b/src/buffer.rs index 6ac413e43..a661203fa 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -440,15 +440,19 @@ impl<'a> Drop for ReadWriteBufferMap<'a> { } } +#[repr(C)] +pub struct ScopedBufferPtr(*mut c_void); + pub struct ScopedBuffer<'a> { buffer: Buffer, - phantom: PhantomData<&'a c_void>, + #[allow(dead_code)] + phantom: PhantomData<&'a ScopedBufferPtr>, } impl<'a> ScopedBuffer<'a> { - pub unsafe fn new(ptr: *mut c_void) -> ScopedBuffer<'a> { + pub unsafe fn new(ptr: &'a ScopedBufferPtr) -> ScopedBuffer<'a> { ScopedBuffer { - buffer: Buffer::new_from_ptr_scoped(ptr), + buffer: Buffer::new_from_ptr_scoped(ptr.0), phantom: PhantomData, } } @@ -467,4 +471,3 @@ impl<'a> DerefMut for ScopedBuffer<'a> { &mut self.buffer } } - diff --git a/src/rssink.rs b/src/rssink.rs index bd4848ed7..a7bb7bce1 100644 --- a/src/rssink.rs +++ b/src/rssink.rs @@ -205,12 +205,12 @@ pub unsafe extern "C" fn sink_stop(ptr: *const SinkWrapper) -> GBoolean { #[no_mangle] pub unsafe extern "C" fn sink_render(ptr: *const SinkWrapper, - buffer: *mut c_void) + buffer: ScopedBufferPtr) -> GstFlowReturn { let wrap: &SinkWrapper = &*ptr; panic_to_error!(wrap, GstFlowReturn::Error, { let sink = &mut wrap.sink.lock().unwrap(); - let buffer = ScopedBuffer::new(buffer); + let buffer = ScopedBuffer::new(&buffer); match sink.render(&buffer) { Ok(..) => GstFlowReturn::Ok, diff --git a/src/rssource.rs b/src/rssource.rs index 8f6b17e4c..506fe898b 100644 --- a/src/rssource.rs +++ b/src/rssource.rs @@ -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, offset: u64, length: u32, - buffer: *mut c_void) + buffer: ScopedBufferPtr) -> GstFlowReturn { let wrap: &SourceWrapper = &*ptr; panic_to_error!(wrap, GstFlowReturn::Error, { 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) { Ok(()) => GstFlowReturn::Ok, |