diff --git a/gstreamer-base/src/subclass/base_transform.rs b/gstreamer-base/src/subclass/base_transform.rs index e77a6e767..d772a61c8 100644 --- a/gstreamer-base/src/subclass/base_transform.rs +++ b/gstreamer-base/src/subclass/base_transform.rs @@ -574,6 +574,13 @@ impl BaseTransformImplExt for T { PrepareOutputBufferSuccess::Buffer(from_glib_full(outbuf)) } }) + .map_err(|err| { + if outbuf != buf as *mut _ { + drop(Option::::from_glib_full(outbuf)); + } + + err + }) }) .unwrap_or(Err(gst::FlowError::NotSupported)) } @@ -1144,6 +1151,8 @@ unsafe extern "C" fn base_transform_prepare_output_buffer( true => InputBuffer::Writable(gst::BufferRef::from_mut_ptr(inbuf)), }; + *outbuf = ptr::null_mut(); + gst::panic_to_error!(imp, gst::FlowReturn::Error, { match imp.prepare_output_buffer(buffer) { Ok(PrepareOutputBufferSuccess::InputBuffer) => {