mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 15:38:53 +00:00
pad: only update caps when changed
Only call the event function with the caps event when the caps changed.
This commit is contained in:
parent
6b0a490740
commit
cea4b4c7d5
1 changed files with 17 additions and 9 deletions
26
gst/gstpad.c
26
gst/gstpad.c
|
@ -2697,8 +2697,8 @@ static gboolean
|
||||||
do_event_function (GstPad * pad, GstEvent * event,
|
do_event_function (GstPad * pad, GstEvent * event,
|
||||||
GstPadEventFunction eventfunc, gboolean * caps_notify)
|
GstPadEventFunction eventfunc, gboolean * caps_notify)
|
||||||
{
|
{
|
||||||
gboolean result = TRUE;
|
gboolean result = TRUE, call_event = TRUE;
|
||||||
GstCaps *caps, *templ;
|
GstCaps *caps, *templ, *old;
|
||||||
|
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
case GST_EVENT_CAPS:
|
case GST_EVENT_CAPS:
|
||||||
|
@ -2711,7 +2711,13 @@ do_event_function (GstPad * pad, GstEvent * event,
|
||||||
if (!gst_caps_can_intersect (caps, templ))
|
if (!gst_caps_can_intersect (caps, templ))
|
||||||
goto not_accepted;
|
goto not_accepted;
|
||||||
|
|
||||||
*caps_notify = TRUE;
|
/* check if it changed */
|
||||||
|
if ((old = gst_pad_get_current_caps (pad))) {
|
||||||
|
call_event = !gst_caps_is_equal (caps, old);
|
||||||
|
gst_caps_unref (old);
|
||||||
|
}
|
||||||
|
if (call_event)
|
||||||
|
*caps_notify = TRUE;
|
||||||
|
|
||||||
gst_caps_unref (templ);
|
gst_caps_unref (templ);
|
||||||
break;
|
break;
|
||||||
|
@ -2720,9 +2726,12 @@ do_event_function (GstPad * pad, GstEvent * event,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (pad, "calling event function with event %p", event);
|
if (call_event) {
|
||||||
result = eventfunc (pad, event);
|
GST_DEBUG_OBJECT (pad, "calling event function with event %p", event);
|
||||||
|
result = eventfunc (pad, event);
|
||||||
|
} else {
|
||||||
|
gst_event_unref (event);
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
|
@ -4505,10 +4514,9 @@ gst_pad_send_event (GstPad * pad, GstEvent * event)
|
||||||
idx = GST_EVENT_STICKY_IDX (event);
|
idx = GST_EVENT_STICKY_IDX (event);
|
||||||
ev = &pad->priv->events[idx];
|
ev = &pad->priv->events[idx];
|
||||||
|
|
||||||
GST_LOG_OBJECT (pad, "storing sticky event %s at index %u",
|
|
||||||
GST_EVENT_TYPE_NAME (event), idx);
|
|
||||||
|
|
||||||
if (ev->event != event) {
|
if (ev->event != event) {
|
||||||
|
GST_LOG_OBJECT (pad, "storing sticky event %s at index %u",
|
||||||
|
GST_EVENT_TYPE_NAME (event), idx);
|
||||||
gst_event_replace (&ev->pending, event);
|
gst_event_replace (&ev->pending, event);
|
||||||
/* set the flag so that we update the events next time. We would
|
/* set the flag so that we update the events next time. We would
|
||||||
* usually update below but we might be flushing too. */
|
* usually update below but we might be flushing too. */
|
||||||
|
|
Loading…
Reference in a new issue