Why is the reference count of sink element 0 when it is disconnected from a pipeline

Nicolas Dufresne nicolas at ndufresne.ca
Fri Oct 6 10:39:58 UTC 2023


Hi,

Be aware that we now have a forum at discourse.gstreamer.org which is
getting more activity.


Le jeu. 5 oct. 2023, 20 h 15, cfd new via gstreamer-devel <
gstreamer-devel at lists.freedesktop.org> a écrit :

> I have a audio pipeline with a sink. When I switch audio devices, I want
> to replace the sink only. What I did in the code are,
> 1. set pipeline state to NULL
> 1. disconnect sink element from the pipeline
> 2. unref it <===problem here: reference count is 0 and can not unref it.
> Why?
> 3. create a new sink element and link it to pipeline
> 4. set pipeline state to PLAYING
>
>    the pipeline works fine with the new sink. But why can not the old sink
> be deleted?
>

When you create an element from factory, it's created with a floating ref.
As a side effect, when the element get added to the pipeline, the pipeline
will get the floating ref, effectively passing ownership. In your case, you
have dropped the last reference when you removed the element from the
bin/pipeline. Use ref_sink if you want to prevent that.

Nicolas


>    thanks for your help,
>
>    Joe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20231006/2c66edc3/attachment.htm>


More information about the gstreamer-devel mailing list