diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-07-05 20:15:28 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-07-25 13:16:19 +0300 |
commit | cae04c59b04278397aaaf08f5c4917853a8fc858 (patch) | |
tree | cb3693d2aa0abce58c3d5da1b627d5df201cc80b | |
parent | ee3c7784c235d03c34ae0ef4ad3cdb37edb559dc (diff) | |
download | gst-libav-cae04c59b04278397aaaf08f5c4917853a8fc858.tar.gz |
avvidenc: Create caps from the codec context after it is opened
We won't get codec_data and various other information otherwise.
-rw-r--r-- | ext/libav/gstavvidenc.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/ext/libav/gstavvidenc.c b/ext/libav/gstavvidenc.c index 264ea36..2d8391b 100644 --- a/ext/libav/gstavvidenc.c +++ b/ext/libav/gstavvidenc.c @@ -430,6 +430,29 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder, gst_ffmpeg_caps_with_codecid (oclass->in_plugin->id, oclass->in_plugin->type, allowed_caps, ffmpegenc->context); + /* open codec */ + if (gst_ffmpeg_avcodec_open (ffmpegenc->context, oclass->in_plugin) < 0) { + gst_caps_unref (allowed_caps); + goto open_codec_fail; + } + + /* is the colourspace correct? */ + if (pix_fmt != ffmpegenc->context->pix_fmt) { + gst_caps_unref (allowed_caps); + goto pix_fmt_err; + } + + /* we may have failed mapping caps to a pixfmt, + * and quite some codecs do not make up their own mind about that + * in any case, _NONE can never work out later on */ + if (pix_fmt == AV_PIX_FMT_NONE) { + gst_caps_unref (allowed_caps); + goto bad_input_fmt; + } + + /* second pass stats buffer no longer needed */ + g_free (ffmpegenc->context->stats_in); + /* try to set this caps on the other side */ other_caps = gst_ffmpeg_codecid_to_caps (oclass->in_plugin->id, ffmpegenc->context, TRUE); @@ -450,23 +473,6 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder, GST_DEBUG_OBJECT (ffmpegenc, "codec flags 0x%08x", ffmpegenc->context->flags); - /* open codec */ - if (gst_ffmpeg_avcodec_open (ffmpegenc->context, oclass->in_plugin) < 0) - goto open_codec_fail; - - /* is the colourspace correct? */ - if (pix_fmt != ffmpegenc->context->pix_fmt) - goto pix_fmt_err; - - /* we may have failed mapping caps to a pixfmt, - * and quite some codecs do not make up their own mind about that - * in any case, _NONE can never work out later on */ - if (pix_fmt == AV_PIX_FMT_NONE) - goto bad_input_fmt; - - /* second pass stats buffer no longer needed */ - g_free (ffmpegenc->context->stats_in); - /* Store input state and set output state */ if (ffmpegenc->input_state) gst_video_codec_state_unref (ffmpegenc->input_state); |