playbin: check for tags on the right combiner instance
authorArnaud Vrac <avrac@freebox.fr>
Fri, 2 Aug 2013 18:08:29 +0000 (20:08 +0200)
committerTim-Philipp Müller <tim@centricular.net>
Sat, 3 Aug 2013 16:17:10 +0000 (17:17 +0100)
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

index 0ab31253e7bccde85dc6b466eaeba15e31d67138..b9feb998dc88ddef52b056f13db000e0438a2e88 100644 (file)
@@ -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;