From b247305bfd133e74466733d0777a472c23c4aad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 5 May 2022 20:39:52 +0300 Subject: [PATCH] aggregator: Don't send multiple caps events with the same caps Every time aggregator is reconfiguring it will try to negotiate new caps. If these resulting caps are the same as the previously negotiated caps then don't send a new caps event with the same caps again. Part-of: --- .../gstreamer/libs/gst/base/gstaggregator.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/subprojects/gstreamer/libs/gst/base/gstaggregator.c b/subprojects/gstreamer/libs/gst/base/gstaggregator.c index a0fbfb3702..a970c51357 100644 --- a/subprojects/gstreamer/libs/gst/base/gstaggregator.c +++ b/subprojects/gstreamer/libs/gst/base/gstaggregator.c @@ -671,7 +671,22 @@ gst_aggregator_push_mandatory_events (GstAggregator * self, gboolean up_to_caps) void gst_aggregator_set_src_caps (GstAggregator * self, GstCaps * caps) { + GstCaps *old_caps; + GST_PAD_STREAM_LOCK (self->srcpad); + + if (caps && (old_caps = gst_pad_get_current_caps (self->srcpad))) { + if (gst_caps_is_equal (caps, old_caps)) { + GST_DEBUG_OBJECT (self, + "New caps are the same as the previously set caps %" GST_PTR_FORMAT, + old_caps); + gst_caps_unref (old_caps); + GST_PAD_STREAM_UNLOCK (self->srcpad); + return; + } + gst_caps_unref (old_caps); + } + gst_caps_replace (&self->priv->srccaps, caps); gst_aggregator_push_mandatory_events (self, TRUE); GST_PAD_STREAM_UNLOCK (self->srcpad);