qtdemux: Push caps only when it was updated
authorSeungha Yang <sh.yang@lge.com>
Fri, 1 Jul 2016 08:28:17 +0000 (17:28 +0900)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 1 Jul 2016 09:37:20 +0000 (11:37 +0200)
Commit 7873bede3134b15e5066e8d14e54d1f5054d2063 caused new caps
event per moof without consideration of duplication.

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

gst/isomp4/qtdemux.c

index bd294a5..fb2cf31 100644 (file)
@@ -7469,6 +7469,8 @@ gst_qtdemux_configure_stream (GstQTDemux * qtdemux, QtDemuxStream * stream)
   }
 
   if (stream->pad) {
+    GstCaps *prev_caps = NULL;
+
     GST_PAD_ELEMENT_PRIVATE (stream->pad) = stream;
     gst_pad_set_event_function (stream->pad, gst_qtdemux_handle_src_event);
     gst_pad_set_query_function (stream->pad, gst_qtdemux_handle_src_query);
@@ -7484,7 +7486,6 @@ gst_qtdemux_configure_stream (GstQTDemux * qtdemux, QtDemuxStream * stream)
       }
     }
 
-    GST_DEBUG_OBJECT (qtdemux, "setting caps %" GST_PTR_FORMAT, stream->caps);
     if (stream->new_stream) {
       gchar *stream_id;
       GstEvent *event;
@@ -7520,7 +7521,18 @@ gst_qtdemux_configure_stream (GstQTDemux * qtdemux, QtDemuxStream * stream)
       gst_pad_push_event (stream->pad, event);
       g_free (stream_id);
     }
-    gst_pad_set_caps (stream->pad, stream->caps);
+
+    prev_caps = gst_pad_get_current_caps (stream->pad);
+
+    if (!prev_caps || !gst_caps_is_equal_fixed (prev_caps, stream->caps)) {
+      GST_DEBUG_OBJECT (qtdemux, "setting caps %" GST_PTR_FORMAT, stream->caps);
+      gst_pad_set_caps (stream->pad, stream->caps);
+    } else {
+      GST_DEBUG_OBJECT (qtdemux, "ignore duplicated caps");
+    }
+
+    if (prev_caps)
+      gst_caps_unref (prev_caps);
     stream->new_caps = FALSE;
   }
   return TRUE;