Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-09-12 18:30:51 +0300
committerSebastian Dröge <sebastian@centricular.com>2016-09-12 20:18:36 +0300
commit1ef938b6ec1e729d6e83b23c025d2142ba154089 (patch)
treeaa59619ab42ef1d0f4f8815e14784353d9621c21
parent61b54201023f4d0d91cd2a7b5cb3ae4ebb6968ef (diff)
Make ScopedBuffer a bit safer and explicit
-rw-r--r--src/buffer.rs11
-rw-r--r--src/rssink.rs4
-rw-r--r--src/rssource.rs4
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,