From a8df760c960bf22d997d0b13f93f15da99d9ce90 Mon Sep 17 00:00:00 2001 From: Arnaud Vrac Date: Fri, 2 Aug 2013 20:08:29 +0200 Subject: [PATCH] playbin: check for tags on the right combiner instance The get-tags actions are not working in all cases, because the track number is used to resolve the stream combiner instead of the stream type. https://bugzilla.gnome.org/show_bug.cgi?id=705369 --- gst/playback/gstplaybin2.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c index 0ab31253e7..b9feb998dc 100644 --- a/gst/playback/gstplaybin2.c +++ b/gst/playback/gstplaybin2.c @@ -1701,13 +1701,28 @@ gst_play_bin_get_text_pad (GstPlayBin * playbin, gint stream) static GstTagList * -get_tags (GstPlayBin * playbin, GstSourceGroup * group, GPtrArray * channels, - gint stream) +get_tags (GstPlayBin * playbin, GstSourceGroup * group, gint type, gint stream) { GstTagList *result; + GPtrArray *channels; GstPad *sinkpad; - if (!channels || stream >= channels->len || !group->combiner[stream].has_tags) + switch (type) { + case PLAYBIN_STREAM_AUDIO: + channels = group->audio_channels; + break; + case PLAYBIN_STREAM_VIDEO: + channels = group->video_channels; + break; + case PLAYBIN_STREAM_TEXT: + channels = group->text_channels; + break; + default: + channels = NULL; + break; + } + + if (!channels || stream >= channels->len || !group->combiner[type].has_tags) return NULL; sinkpad = g_ptr_array_index (channels, stream); @@ -1724,7 +1739,7 @@ gst_play_bin_get_video_tags (GstPlayBin * playbin, gint stream) GST_PLAY_BIN_LOCK (playbin); group = get_group (playbin); - result = get_tags (playbin, group, group->video_channels, stream); + result = get_tags (playbin, group, PLAYBIN_STREAM_VIDEO, stream); GST_PLAY_BIN_UNLOCK (playbin); return result; @@ -1738,7 +1753,7 @@ gst_play_bin_get_audio_tags (GstPlayBin * playbin, gint stream) GST_PLAY_BIN_LOCK (playbin); group = get_group (playbin); - result = get_tags (playbin, group, group->audio_channels, stream); + result = get_tags (playbin, group, PLAYBIN_STREAM_AUDIO, stream); GST_PLAY_BIN_UNLOCK (playbin); return result; @@ -1752,7 +1767,7 @@ gst_play_bin_get_text_tags (GstPlayBin * playbin, gint stream) GST_PLAY_BIN_LOCK (playbin); group = get_group (playbin); - result = get_tags (playbin, group, group->text_channels, stream); + result = get_tags (playbin, group, PLAYBIN_STREAM_TEXT, stream); GST_PLAY_BIN_UNLOCK (playbin); return result;