ensonic gst-plugins-bad: gst-plugins-bad/ gst-plugins-bad/ext/celt/ gst-plugins-bad/ext/metadata/ gst-plugins-bad/gst/qtmux/

[email protected] Tue, 16 Dec 2008 08:27:07 -0800 (PST)
Newsgroups gmane.comp.video.gstreamer.cvs
Message-ID <[email protected]>
CVS Root:       /cvs/gstreamer
Module:         gst-plugins-bad
Changes by:     ensonic
Date:           Tue Dec 16 2008  16:27:07 UTC

Log message:
	* ext/celt/gstceltenc.c:
	* ext/celt/gstceltenc.h:
	* ext/metadata/gstmetadatamux.c:
	* gst/qtmux/gstqtmux.c:
	* gst/qtmux/gstqtmux.h:
	  Totally remove the internal taglists and fully use tagsetter. Fixes
	  various tag muxing issues.

Modified files:
    .               : ChangeLog
    ext/celt        : gstceltenc.c gstceltenc.h
    ext/metadata    : gstmetadatamux.c
    gst/qtmux       : gstqtmux.c gstqtmux.h

Links:
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.3819&r2=1.3820
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/celt/gstceltenc.c.diff?r1=1.3&r2=1.4
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/celt/gstceltenc.h.diff?r1=1.3&r2=1.4
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/metadata/gstmetadatamux.c.diff?r1=1.14&r2=1.15
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/qtmux/gstqtmux.c.diff?r1=1.7&r2=1.8
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/qtmux/gstqtmux.h.diff?r1=1.4&r2=1.5

====Begin Diffs====
Index: ChangeLog
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v
retrieving revision 1.3819
retrieving revision 1.3820
diff -u -d -r1.3819 -r1.3820
--- ChangeLog	16 Dec 2008 12:46:36 -0000	1.3819
+++ ChangeLog	16 Dec 2008 16:26:50 -0000	1.3820
@@ -1,3 +1,13 @@
+2008-12-16  Stefan Kost  <[email protected]>
+
+	* ext/celt/gstceltenc.c:
+	* ext/celt/gstceltenc.h:
+	* ext/metadata/gstmetadatamux.c:
+	* gst/qtmux/gstqtmux.c:
+	* gst/qtmux/gstqtmux.h:
+	  Totally remove the internal taglists and fully use tagsetter. Fixes
+	  various tag muxing issues.
 2008-12-16  Sebastian Dröge  <[email protected]>
 
 	* tests/check/elements/mxfdemux.c: (mxfdemux_suite):
Index: gstceltenc.c
RCS file: /cvs/gstreamer/gst-plugins-bad/ext/celt/gstceltenc.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- gstceltenc.c	31 Aug 2008 15:01:32 -0000	1.3
+++ gstceltenc.c	16 Dec 2008 16:26:52 -0000	1.4
@@ -513,30 +513,29 @@
 static GstBuffer *
 gst_celt_enc_create_metadata_buffer (GstCeltEnc * enc)
 {
-  const GstTagList *user_tags;
-  GstTagList *merged_tags;
+  const GstTagList *tags;
+  GstTagList *empty_tags;
   GstBuffer *comments = NULL;
-  user_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (enc));
-
-  GST_DEBUG_OBJECT (enc, "upstream tags = %" GST_PTR_FORMAT, enc->tags);
-  GST_DEBUG_OBJECT (enc, "user-set tags = %" GST_PTR_FORMAT, user_tags);
-  /* gst_tag_list_merge() will handle NULL for either or both lists fine */
-  merged_tags = gst_tag_list_merge (user_tags, enc->tags,
-      gst_tag_setter_get_tag_merge_mode (GST_TAG_SETTER (enc)));
+  tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (enc));
-  if (merged_tags == NULL)
-    merged_tags = gst_tag_list_new ();
+  GST_DEBUG_OBJECT (enc, "tags = %" GST_PTR_FORMAT, tags);
-  GST_DEBUG_OBJECT (enc, "merged   tags = %" GST_PTR_FORMAT, merged_tags);
-  comments = gst_tag_list_to_vorbiscomment_buffer (merged_tags, NULL,
+  if (tags == NULL) {
+    /* FIXME: better fix chain of callers to not write metadata at all,
+     * if there is none */
+    empty_tags = gst_tag_list_new ();
+    tags = empty_tags;
+  }
+  comments = gst_tag_list_to_vorbiscomment_buffer (tags, NULL,
       0, "Encoded with GStreamer Celtenc");
-  gst_tag_list_free (merged_tags);
   GST_BUFFER_OFFSET (comments) = enc->bytes_out;
   GST_BUFFER_OFFSET_END (comments) = 0;
+  if (empty_tags)
+    gst_tag_list_free (empty_tags);
   return comments;
 }
@@ -685,12 +684,11 @@
     case GST_EVENT_TAG:
     {
       GstTagList *list;
+      GstTagSetter *setter = GST_TAG_SETTER (enc);
+      const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
       gst_event_parse_tag (event, &list);
-      if (enc->tags) {
-        gst_tag_list_insert (enc->tags, list,
-            gst_tag_setter_get_tag_merge_mode (GST_TAG_SETTER (enc)));
-      }
+      gst_tag_setter_merge_tags (setter, list, mode);
       res = gst_pad_event_default (pad, event);
       break;
     }
@@ -983,7 +981,6 @@
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
-      enc->tags = gst_tag_list_new ();
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       enc->frameno = 0;
@@ -1020,8 +1017,7 @@
       memset (&enc->header, 0, sizeof (enc->header));
     case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_tag_list_free (enc->tags);
-      enc->tags = NULL;
+      gst_tag_setter_reset_tags (GST_TAG_SETTER (enc));
     default:
   }
Index: gstceltenc.h
RCS file: /cvs/gstreamer/gst-plugins-bad/ext/celt/gstceltenc.h,v
--- gstceltenc.h	15 Sep 2008 09:39:00 -0000	1.3
+++ gstceltenc.h	16 Dec 2008 16:26:52 -0000	1.4
@@ -73,8 +73,6 @@
   guint64               samples_in;
   guint64               bytes_out;
-  GstTagList            *tags;
   guint64               frameno;
   guint64               frameno_out;
Index: gstmetadatamux.c
RCS file: /cvs/gstreamer/gst-plugins-bad/ext/metadata/gstmetadatamux.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- gstmetadatamux.c	2 Feb 2008 20:22:18 -0000	1.14
+++ gstmetadatamux.c	16 Dec 2008 16:26:52 -0000	1.15
@@ -163,6 +163,10 @@
 static void gst_metadata_mux_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
+static GstStateChangeReturn gst_metadata_mux_change_state (GstElement * element,
+    GstStateChange transition);
 /*
  * GstBaseMetadata virtual functions declaration
  */
@@ -274,6 +278,9 @@
   gobject_class->set_property = gst_metadata_mux_set_property;
   gobject_class->get_property = gst_metadata_mux_get_property;
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_metadata_mux_change_state);
   gstbasemetadata_class->processing =
       GST_DEBUG_FUNCPTR (gst_metadata_mux_create_chunks_from_tags);
   gstbasemetadata_class->set_caps =
@@ -317,6 +324,39 @@
+static GstStateChangeReturn
+gst_metadata_mux_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstMetadataMux *filter = GST_METADATA_MUX (element);
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+    default:
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_tag_setter_reset_tags (GST_TAG_SETTER (filter));
+    case GST_STATE_CHANGE_READY_TO_NULL:
+  return ret;
+}
 static void
@@ -351,7 +391,6 @@
 gst_metadata_mux_create_chunks_from_tags (GstBaseMetadata * base)
   GstMetadataMux *filter = GST_METADATA_MUX (base);
   GstTagSetter *setter = GST_TAG_SETTER (filter);
   const GstTagList *taglist = gst_tag_setter_get_tag_list (setter);
@@ -506,16 +545,14 @@
   switch (GST_EVENT_TYPE (event)) {
-      GstTagList *taglist = NULL;
+      GstTagList *taglist;
       GstTagSetter *setter = GST_TAG_SETTER (filter);
       const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
       gst_event_parse_tag (event, &taglist);
       gst_tag_setter_merge_tags (setter, taglist, mode);
-    }
+    }
Index: gstqtmux.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/qtmux/gstqtmux.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- gstqtmux.c	18 Nov 2008 01:09:09 -0000	1.7
+++ gstqtmux.c	16 Dec 2008 16:26:52 -0000	1.8
@@ -239,14 +239,11 @@
     atom_moov_free (qtmux->moov);
     qtmux->moov = NULL;
-  if (qtmux->tags) {
-    gst_tag_list_free (qtmux->tags);
-    qtmux->tags = NULL;
-  }
   if (qtmux->fast_start_file) {
     fclose (qtmux->fast_start_file);
     qtmux->fast_start_file = NULL;
+  gst_tag_setter_reset_tags (GST_TAG_SETTER (qtmux));
   /* reset pad data */
   for (walk = qtmux->collect->data; walk; walk = g_slist_next (walk)) {
@@ -514,32 +511,18 @@
 gst_qt_mux_setup_metadata (GstQTMux * qtmux)
-  GstTagList *mixedtags = NULL;
-  GstTagMergeMode merge_mode;
-  user_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (qtmux));
-  merge_mode = gst_tag_setter_get_tag_merge_mode (GST_TAG_SETTER (qtmux));
-  GST_DEBUG_OBJECT (qtmux, "merging tags, merge mode = %d", merge_mode);
-  GST_LOG_OBJECT (qtmux, "event tags: %" GST_PTR_FORMAT, qtmux->tags);
-  GST_LOG_OBJECT (qtmux, "set   tags: %" GST_PTR_FORMAT, user_tags);
-  mixedtags = gst_tag_list_merge (user_tags, qtmux->tags, merge_mode);
+  tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (qtmux));
-  GST_LOG_OBJECT (qtmux, "final tags: %" GST_PTR_FORMAT, mixedtags);
+  GST_LOG_OBJECT (qtmux, "tags: %" GST_PTR_FORMAT, tags);
-  if (mixedtags && !gst_tag_list_is_empty (mixedtags)) {
-    GST_DEBUG_OBJECT (qtmux, "Parsing tags");
-    gst_qt_mux_add_metadata_tags (qtmux, mixedtags);
+  if (tags && !gst_tag_list_is_empty (tags)) {
+    GST_DEBUG_OBJECT (qtmux, "Formatting tags");
+    gst_qt_mux_add_metadata_tags (qtmux, tags);
   } else {
-    GST_DEBUG_OBJECT (qtmux, "No tags found");
+    GST_DEBUG_OBJECT (qtmux, "No tags received");
-  if (mixedtags)
-    gst_tag_list_free (mixedtags);
-  return;
 static GstFlowReturn
@@ -1585,20 +1568,19 @@
   gboolean ret;
   GstQTMux *qtmux;
-  GstTagList *list;
   qtmux = GST_QT_MUX_CAST (gst_pad_get_parent (pad));
-    case GST_EVENT_TAG:
+    case GST_EVENT_TAG:{
+      GstTagList *list;
+      GstTagSetter *setter = GST_TAG_SETTER (qtmux);
       GST_DEBUG_OBJECT (qtmux, "received tag event");
-      if (qtmux->tags) {
-        gst_tag_list_insert (qtmux->tags, list, GST_TAG_MERGE_PREPEND);
-      } else {
-        qtmux->tags = gst_tag_list_copy (list);
@@ -1774,6 +1756,7 @@
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      /* FIXME: shouldn't the downwards state-change be done below? */
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       gst_collect_pads_stop (qtmux->collect);
Index: gstqtmux.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/qtmux/gstqtmux.h,v
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- gstqtmux.h	15 Nov 2008 02:56:31 -0000	1.4
+++ gstqtmux.h	16 Dec 2008 16:26:52 -0000	1.5
@@ -97,8 +97,6 @@
   /* fast start */
   FILE *fast_start_file;
-  GstTagList *tags;
   /* properties */
   guint32 timescale;
   AtomsTreeFlavor flavor;

------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you.  Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/

_______________________________________________
gstreamer-cvs-verbose mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gstreamer-cvs-verbose