diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-04-15 09:42:22 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-04-15 09:44:37 +0200 |
commit | 0b83d13231ed25d624d75a2f4df6d43f0f64de7c (patch) | |
tree | 6b40b3afb6a0c9e218acbd542406805d23d56813 | |
parent | 3023521366ca6aa0b9bb9daa3939f344d08cbf37 (diff) |
videoencoder: Ignore caps events if the caps did not change
-rw-r--r-- | gst-libs/gst/video/gstvideoencoder.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index 3ce85bf36..1cfb3916a 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; } } |