mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 09:10:36 +00:00
playbin: make sure elements are in null before disposing
If a pipeline fails to preroll, it might happen that the sinks are put into READY state from playbin's sink activation, but they are never set to playsink, so they aren't being managed by a GstBin and will keep their READY state until they are unreffed, leading to a warning. Prevent this by always forcing them to NULL when deactivating a group https://bugzilla.gnome.org/show_bug.cgi?id=708789
This commit is contained in:
parent
019ef0747d
commit
f8d8a56d7b
1 changed files with 20 additions and 4 deletions
|
@ -5226,15 +5226,31 @@ deactivate_group (GstPlayBin * playbin, GstSourceGroup * group)
|
||||||
combine->combiner = NULL;
|
combine->combiner = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* delete any custom sinks we might have */
|
/* delete any custom sinks we might have.
|
||||||
if (group->audio_sink)
|
* conditionally set them to null if they aren't inside playsink yet */
|
||||||
|
if (group->audio_sink) {
|
||||||
|
if (!gst_object_has_ancestor (GST_OBJECT_CAST (group->audio_sink),
|
||||||
|
GST_OBJECT_CAST (playbin->playsink))) {
|
||||||
|
gst_element_set_state (group->audio_sink, GST_STATE_NULL);
|
||||||
|
}
|
||||||
gst_object_unref (group->audio_sink);
|
gst_object_unref (group->audio_sink);
|
||||||
|
}
|
||||||
group->audio_sink = NULL;
|
group->audio_sink = NULL;
|
||||||
if (group->video_sink)
|
if (group->video_sink) {
|
||||||
|
if (!gst_object_has_ancestor (GST_OBJECT_CAST (group->video_sink),
|
||||||
|
GST_OBJECT_CAST (playbin->playsink))) {
|
||||||
|
gst_element_set_state (group->video_sink, GST_STATE_NULL);
|
||||||
|
}
|
||||||
gst_object_unref (group->video_sink);
|
gst_object_unref (group->video_sink);
|
||||||
|
}
|
||||||
group->video_sink = NULL;
|
group->video_sink = NULL;
|
||||||
if (group->text_sink)
|
if (group->text_sink) {
|
||||||
|
if (!gst_object_has_ancestor (GST_OBJECT_CAST (group->text_sink),
|
||||||
|
GST_OBJECT_CAST (playbin->playsink))) {
|
||||||
|
gst_element_set_state (group->text_sink, GST_STATE_NULL);
|
||||||
|
}
|
||||||
gst_object_unref (group->text_sink);
|
gst_object_unref (group->text_sink);
|
||||||
|
}
|
||||||
group->text_sink = NULL;
|
group->text_sink = NULL;
|
||||||
|
|
||||||
if (group->uridecodebin) {
|
if (group->uridecodebin) {
|
||||||
|
|
Loading…
Reference in a new issue