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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2381>
This commit is contained in:
Sebastian Dröge 2022-05-05 20:39:52 +03:00 committed by Tim-Philipp Müller
parent 61330b65b4
commit de3f6d4ce3

View file

@ -669,7 +669,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);