summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2013-04-15 09:42:22 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2013-04-15 09:44:37 +0200
commit0b83d13231ed25d624d75a2f4df6d43f0f64de7c (patch)
tree6b40b3afb6a0c9e218acbd542406805d23d56813
parent3023521366ca6aa0b9bb9daa3939f344d08cbf37 (diff)
videoencoder: Ignore caps events if the caps did not change
-rw-r--r--gst-libs/gst/video/gstvideoencoder.c21
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;
}
}