[gst-devel] Problem using GstAdapter in GstBaseTransform-based element

Jan Schmidt thaytan at noraisin.net
Tue Feb 21 09:26:09 CET 2006


On Tue, 2006-02-21 at 17:33 +0100, Dominique Würtz wrote:
> Hi,
> 
> I'm creating an GstElement derived from GstBaseTransform. For this I 
> need to use a GstAdapter. Unfortunately, it seems that adapters don't 
> work with transform elements. A (test) implementation of the 
> _transform() vfunc as listed below results in a segfault. It seems that 
> somewhere outside _transform() the inbuf is destroyed though this has 
> already been done by gst_adapter_flush(). Any ideas what I'm doing wrong?
> 
> static GstFlowReturn
> my_element_transform (GstBaseTransform *trans, GstBuffer *inbuf,
>                       GstBuffer *outbuf)
> {
>     MyElement *filter;
> 
>     filter = MY_ELEMENT (trans);
>     gst_adapter_push (filter->adapter, inbuf);
> 
>     while (gst_adapter_available (filter->adapter) >= 512) {
>         gst_adapter_peek (filter->adapter, 512);
>         gst_adapter_flush (filter->adapter, 512);
>     }
> 
>     return GST_FLOW_OK;

If you want to keep a reference to the buffer, you need to ref it with
gst_buffer_ref. BaseTransform will drop the reference it is providing to
you after it leaves the transform function, but gst_adapter_push expects
that you are transferring a refcount when giving it the buffer.

The transform function above doesn't look like a good fit for the "1
buffer in, 1 buffer out" use cases GstBaseTransform was designed for.

Regards,
Jan

-- 
Jan Schmidt thaytan at noraisin.net

"Don't Panic" -- The Hitchhiker's Guide to the Galaxy






More information about the gstreamer-devel mailing list