diff --git a/gstreamer-base/src/subclass/base_transform.rs b/gstreamer-base/src/subclass/base_transform.rs index 3131fa748..c59d51d65 100644 --- a/gstreamer-base/src/subclass/base_transform.rs +++ b/gstreamer-base/src/subclass/base_transform.rs @@ -570,6 +570,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)) } @@ -1140,6 +1147,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) => {