x264enc: make tag event writable before modifying tag list in place
authorMiguel Angel Cabrera Moya <madmac2501@gmail.com>
Sat, 22 Jan 2011 16:31:40 +0000 (17:31 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Mon, 24 Jan 2011 13:07:08 +0000 (13:07 +0000)
To modify an event tag is necessary to be sure that x264enc
has its own copy.

Also fix indentation.

https://bugzilla.gnome.org/show_bug.cgi?id=640272

ext/x264/gstx264enc.c

index 1d94e8e..b1fbb5f 100644 (file)
@@ -1496,19 +1496,22 @@ gst_x264_enc_sink_event (GstPad * pad, GstEvent * event)
       gst_x264_enc_flush_frames (encoder, TRUE);
       break;
     case GST_EVENT_TAG:{
-        GstTagList *tags = NULL;
-
-        gst_event_parse_tag (event, &tags);
-        /* drop codec/video-codec and replace encoder/encoder-version */
-        gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC);
-        gst_tag_list_remove_tag (tags, GST_TAG_CODEC);
-        gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, "x264",
-            GST_TAG_ENCODER_VERSION, X264_BUILD, NULL);
-        /* push is done below */
-      }
+      GstTagList *tags = NULL;
+
+      event =
+          GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event)));
+
+      gst_event_parse_tag (event, &tags);
+      /* drop codec/video-codec and replace encoder/encoder-version */
+      gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC);
+      gst_tag_list_remove_tag (tags, GST_TAG_CODEC);
+      gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, "x264",
+          GST_TAG_ENCODER_VERSION, X264_BUILD, NULL);
+      /* push is done below */
       break;
       /* no flushing if flush received,
        * buffers in encoder are considered (in the) past */
+    }
     case GST_EVENT_CUSTOM_DOWNSTREAM:{
       const GstStructure *s;
       s = gst_event_get_structure (event);