mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
playbin: Emit {audio,text,video}-changed signals when pads are removed
https://bugzilla.gnome.org/show_bug.cgi?id=702195
This commit is contained in:
parent
eb09e561c4
commit
b5f7a621bb
1 changed files with 23 additions and 4 deletions
|
@ -3182,6 +3182,7 @@ pad_removed_cb (GstElement * decodebin, GstPad * pad, GstSourceGroup * group)
|
||||||
GstPad *peer;
|
GstPad *peer;
|
||||||
GstElement *combiner;
|
GstElement *combiner;
|
||||||
GstSourceCombine *combine;
|
GstSourceCombine *combine;
|
||||||
|
int signal = -1;
|
||||||
|
|
||||||
playbin = group->playbin;
|
playbin = group->playbin;
|
||||||
|
|
||||||
|
@ -3218,6 +3219,23 @@ pad_removed_cb (GstElement * decodebin, GstPad * pad, GstSourceGroup * group)
|
||||||
g_ptr_array_remove (combine->channels, peer);
|
g_ptr_array_remove (combine->channels, peer);
|
||||||
GST_DEBUG_OBJECT (playbin, "pad %p removed from array", peer);
|
GST_DEBUG_OBJECT (playbin, "pad %p removed from array", peer);
|
||||||
|
|
||||||
|
/* get the correct type-changed signal */
|
||||||
|
switch (combine->type) {
|
||||||
|
case GST_PLAY_SINK_TYPE_VIDEO:
|
||||||
|
case GST_PLAY_SINK_TYPE_VIDEO_RAW:
|
||||||
|
signal = SIGNAL_VIDEO_CHANGED;
|
||||||
|
break;
|
||||||
|
case GST_PLAY_SINK_TYPE_AUDIO:
|
||||||
|
case GST_PLAY_SINK_TYPE_AUDIO_RAW:
|
||||||
|
signal = SIGNAL_AUDIO_CHANGED;
|
||||||
|
break;
|
||||||
|
case GST_PLAY_SINK_TYPE_TEXT:
|
||||||
|
signal = SIGNAL_TEXT_CHANGED;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
signal = -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (!combine->channels->len && combine->combiner) {
|
if (!combine->channels->len && combine->combiner) {
|
||||||
GST_DEBUG_OBJECT (playbin, "all combiner sinkpads removed");
|
GST_DEBUG_OBJECT (playbin, "all combiner sinkpads removed");
|
||||||
GST_DEBUG_OBJECT (playbin, "removing combiner %p", combine->combiner);
|
GST_DEBUG_OBJECT (playbin, "removing combiner %p", combine->combiner);
|
||||||
|
@ -3249,20 +3267,21 @@ pad_removed_cb (GstElement * decodebin, GstPad * pad, GstSourceGroup * group)
|
||||||
exit:
|
exit:
|
||||||
GST_SOURCE_GROUP_UNLOCK (group);
|
GST_SOURCE_GROUP_UNLOCK (group);
|
||||||
|
|
||||||
|
if (signal >= 0)
|
||||||
|
g_signal_emit (G_OBJECT (playbin), gst_play_bin_signals[signal], 0, NULL);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
not_linked:
|
not_linked:
|
||||||
{
|
{
|
||||||
GST_DEBUG_OBJECT (playbin, "pad not linked");
|
GST_DEBUG_OBJECT (playbin, "pad not linked");
|
||||||
GST_SOURCE_GROUP_UNLOCK (group);
|
goto exit;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
no_combiner:
|
no_combiner:
|
||||||
{
|
{
|
||||||
GST_DEBUG_OBJECT (playbin, "combiner not found");
|
GST_DEBUG_OBJECT (playbin, "combiner not found");
|
||||||
GST_SOURCE_GROUP_UNLOCK (group);
|
goto exit;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue