libgstapp ownership
Chris Tapp
opensource at keylevel.com
Mon Oct 20 13:51:32 PDT 2014
On 20 Oct 2014, at 21:04, Chris Tapp <opensource at keylevel.com> wrote:
> Hi Tim,
>
> On 20 Oct 2014, at 20:52, Tim Müller <tim at centricular.com> wrote:
>
>> On Mon, 2014-10-20 at 20:19 +0100, Chris Tapp wrote:
>>
>> Hi Chris,
>>
>>> The documentation for gst_app_src_push_buffer() says "This function
>>> takes ownership of the buffer" does that mean it adds a ref count to
>>> the buffer, or does it just mean that a ref-counted object passed in
>>> does not have to be unref'ed?
>>
>> It means when you pass in a ref-counted or allocated object, you must
>> not use it afterwards and do not need to unref/free it. You can always
>> add another ref of course if you want to hang on to it and then unref
>> that again later.
>
> That makes sense. Thanks for the clarification.
>
>> For example, is the following valid:
>>>
>>> GstBuffer * buffer = gst_sample_get_buffer( aSample ); // Buffer is valid as long as aSample is valid - take a reference if needed longer
>>>
>>> gst_app_src_push_buffer( myAppSrc, buffer ); // Does push_buffer take a reference?
>>
>> This is not valid, because gst_sample_get_buffer() does not give you a
>> reference to the buffer, but push_buffer() gives away a reference, so
>> now you basically gave away the sample's reference, and things will go
>> downhill quickly from here.
>>
>>> or should it be:
>>>
>>> gst_app_src_push_buffer( myAppSrc, gst_sample_ref( buffer ) ); // Take a reference before passing in.
I meant gst_buffer_ref() here.
>> This is correct in this particular context.
Except this is causing a memory leak where as the above doesn't. Does it make a difference that the samples are taken using "last-sample" from one pipeline and the appsrc is in another?
--
Chris Tapp
opensource at keylevel.com
www.keylevel.com
----
You can tell you're getting older when your car insurance gets real cheap!
More information about the gstreamer-devel
mailing list