diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2014-07-11 21:51:05 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2014-07-11 21:51:05 +0200 |
commit | 1b631078b1c249f9aea12e0be0d9b61b01b17cb0 (patch) | |
tree | 2176fec8dabcc522c736c963780f3833b32103d3 | |
parent | eddde1eec4e9038438532eb3a3f9bd0d3c1041c0 (diff) |
videodecoder: Handle CAPS events immediately instead of delaying themdecodebin-setcaps
-rw-r--r-- | gst-libs/gst/video/gstvideodecoder.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index 95577d1e2..dfff17ba9 100644 --- a/gst-libs/gst/video/gstvideodecoder.c +++ b/gst-libs/gst/video/gstvideodecoder.c @@ -337,7 +337,6 @@ struct _GstVideoDecoderPrivate gboolean had_input_data; gboolean needs_format; - gboolean do_caps; /* ... being tracked here; * only available during parsing */ @@ -1053,8 +1052,10 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder, } case GST_EVENT_CAPS: { - ret = TRUE; - decoder->priv->do_caps = TRUE; + GstCaps *caps; + + gst_event_parse_caps (event, &caps); + ret = gst_video_decoder_setcaps (decoder, caps); gst_event_unref (event); event = NULL; break; @@ -2126,18 +2127,6 @@ gst_video_decoder_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) decoder = GST_VIDEO_DECODER (parent); - if (G_UNLIKELY (decoder->priv->do_caps)) { - GstCaps *caps = gst_pad_get_current_caps (decoder->sinkpad); - if (caps) { - if (!gst_video_decoder_setcaps (decoder, caps)) { - gst_caps_unref (caps); - goto not_negotiated; - } - gst_caps_unref (caps); - } - decoder->priv->do_caps = FALSE; - } - if (G_UNLIKELY (!decoder->priv->input_state && decoder->priv->needs_format)) goto not_negotiated; |