basesink: Don't bother the subclass with setting the same caps multiple times

This commit is contained in:
Sebastian Dröge 2014-11-09 10:32:18 +01:00
parent 674b555bec
commit acc295c93b

View file

@ -3069,19 +3069,28 @@ gst_base_sink_default_event (GstBaseSink * basesink, GstEvent * event)
} }
case GST_EVENT_CAPS: case GST_EVENT_CAPS:
{ {
GstCaps *caps; GstCaps *caps, *current_caps;
GST_DEBUG_OBJECT (basesink, "caps %p", event); GST_DEBUG_OBJECT (basesink, "caps %p", event);
gst_event_parse_caps (event, &caps); gst_event_parse_caps (event, &caps);
if (bclass->set_caps) current_caps = gst_pad_get_current_caps (GST_BASE_SINK_PAD (basesink));
result = bclass->set_caps (basesink, caps);
if (result) { if (current_caps && gst_caps_is_equal (current_caps, caps)) {
GST_OBJECT_LOCK (basesink); GST_DEBUG_OBJECT (basesink,
gst_caps_replace (&basesink->priv->caps, caps); "New caps equal to old ones: %" GST_PTR_FORMAT, caps);
GST_OBJECT_UNLOCK (basesink); } else {
if (bclass->set_caps)
result = bclass->set_caps (basesink, caps);
if (result) {
GST_OBJECT_LOCK (basesink);
gst_caps_replace (&basesink->priv->caps, caps);
GST_OBJECT_UNLOCK (basesink);
}
} }
if (current_caps)
gst_caps_unref (current_caps);
break; break;
} }
case GST_EVENT_SEGMENT: case GST_EVENT_SEGMENT: