From 231018bcfe4712c79478d050ab7506d670186751 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Fri, 1 Jul 2016 17:28:17 +0900 Subject: [PATCH] qtdemux: Push caps only when it was updated 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 | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index bd294a5222..fb2cf31d8c 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -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;