From 0b83d13231ed25d624d75a2f4df6d43f0f64de7c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 15 Apr 2013 09:42:22 +0200 Subject: [PATCH] videoencoder: Ignore caps events if the caps did not change --- gst-libs/gst/video/gstvideoencoder.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index 3ce85bf..1cfb391 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -575,12 +575,20 @@ gst_video_encoder_setcaps (GstVideoEncoder * encoder, GstCaps * caps) GST_DEBUG_OBJECT (encoder, "setcaps %" GST_PTR_FORMAT, caps); + GST_VIDEO_ENCODER_STREAM_LOCK (encoder); + + if (encoder->priv->input_state) { + GST_DEBUG_OBJECT (encoder, + "Checking if caps changed old %" GST_PTR_FORMAT " new %" GST_PTR_FORMAT, + encoder->priv->input_state->caps, caps); + if (gst_caps_is_equal (encoder->priv->input_state->caps, caps)) + goto caps_not_changed; + } + state = _new_input_state (caps); if (G_UNLIKELY (!state)) goto parse_fail; - GST_VIDEO_ENCODER_STREAM_LOCK (encoder); - if (encoder->priv->input_state) samecaps = gst_video_info_is_equal (&state->info, @@ -613,9 +621,18 @@ gst_video_encoder_setcaps (GstVideoEncoder * encoder, GstCaps * caps) return ret; +caps_not_changed: + { + GST_DEBUG_OBJECT (encoder, "Caps did not change - ignore"); + GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); + return TRUE; + } + + /* ERRORS */ parse_fail: { GST_WARNING_OBJECT (encoder, "Failed to parse caps"); + GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); return FALSE; } } -- 2.7.4