Fix tag merging. Use tagsetter and not internal copies. Depend on
authorStefan Kost <ensonic@users.sourceforge.net>
Tue, 16 Dec 2008 14:24:05 +0000 (14:24 +0000)
committerStefan Kost <ensonic@users.sourceforge.net>
Tue, 16 Dec 2008 14:24:05 +0000 (14:24 +0000)
Original commit message from CVS:
* configure.ac:
* ext/ffmpeg/gstffmpegmux.c:
Fix tag merging. Use tagsetter and not internal copies. Depend on
CVS core and use new API to flush.

ChangeLog
common
configure.ac
ext/ffmpeg/gstffmpegmux.c

index 0bc2dcf..a16ce9d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-12-16  Stefan Kost  <ensonic@users.sf.net>
+
+       * configure.ac:
+       * ext/ffmpeg/gstffmpegmux.c:
+         Fix tag merging. Use tagsetter and not internal copies. Depend on
+         CVS core and use new API to flush.
+
 2008-12-13  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
 
        * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ff_channel_layout_to_gst):
diff --git a/common b/common
index 1c24dce..2c4d28a 160000 (submodule)
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 1c24dce4e32f0a725ebd1b8ba2cd48d373818f75
+Subproject commit 2c4d28a75c26e572b94a967901254caff83d85c4
index e1cbc39..b7dc9b1 100644 (file)
@@ -40,7 +40,7 @@ AC_LIBTOOL_WIN32_DLL
 AM_PROG_LIBTOOL
 
 dnl *** required versions of GStreamer stuff ***
-GST_REQ=0.10.13
+GST_REQ=0.10.21
 LIBOIL_MAJORMINOR=0.3
 LIBOIL_REQ=0.3.6
 
index dc6e716..cc0a968 100644 (file)
@@ -55,8 +55,6 @@ struct _GstFFMpegMux
   AVFormatContext *context;
   gboolean opened;
 
-  GstTagList *tags;
-
   gint videopads, audiopads;
 
   /*< private > */
@@ -213,8 +211,6 @@ gst_ffmpegmux_init (GstFFMpegMux * ffmpegmux, GstFFMpegMuxClass * g_class)
 
   ffmpegmux->videopads = 0;
   ffmpegmux->audiopads = 0;
-
-  ffmpegmux->tags = NULL;
 }
 
 static void
@@ -343,12 +339,12 @@ gst_ffmpegmux_sink_event (GstPad * pad, GstEvent * event)
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_TAG:{
-      GstTagList *taglist = NULL;
+      GstTagList *taglist;
+      GstTagSetter *setter = GST_TAG_SETTER (ffmpegmux);
+      const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
 
       gst_event_parse_tag (event, &taglist);
-      ffmpegmux->tags = gst_tag_list_merge (ffmpegmux->tags, taglist,
-          GST_TAG_MERGE_PREPEND);
-
+      gst_tag_setter_merge_tags (setter, taglist, mode);
       break;
     }
     default:
@@ -369,7 +365,7 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
   GSList *collected;
   GstFFMpegMuxPad *best_pad;
   GstClockTime best_time;
-  const GstTagList *iface_tags;
+  const GstTagList *tags;
 
   /* open "file" (gstreamer protocol to next element) */
   if (!ffmpegmux->opened) {
@@ -421,15 +417,11 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
     }
 
     /* tags */
-    iface_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (ffmpegmux));
-    if (ffmpegmux->tags || iface_tags) {
-      GstTagList *tags;
+    tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (ffmpegmux));
+    if (tags) {
       gint i;
       gchar *s;
 
-      tags = gst_tag_list_merge (iface_tags, ffmpegmux->tags,
-          GST_TAG_MERGE_APPEND);
-
       /* get the interesting ones */
       if (gst_tag_list_get_string (tags, GST_TAG_TITLE, &s)) {
         strncpy (ffmpegmux->context->title, s,
@@ -458,7 +450,6 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
       if (gst_tag_list_get_int (tags, GST_TAG_TRACK_NUMBER, &i)) {
         ffmpegmux->context->track = i;
       }
-      gst_tag_list_free (tags);
     }
 
     /* set the streamheader flag for gstffmpegprotocol if codec supports it */
@@ -626,10 +617,7 @@ gst_ffmpegmux_change_state (GstElement * element, GstStateChange transition)
     case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
-      if (ffmpegmux->tags) {
-        gst_tag_list_free (ffmpegmux->tags);
-        ffmpegmux->tags = NULL;
-      }
+      gst_tag_setter_flush (GST_TAG_SETTER (ffmpegmux));
       if (ffmpegmux->opened) {
         ffmpegmux->opened = FALSE;
         url_fclose (ffmpegmux->context->pb);