summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-07-05 20:15:28 +0300
committerSebastian Dröge <sebastian@centricular.com>2016-07-25 13:16:19 +0300
commitcae04c59b04278397aaaf08f5c4917853a8fc858 (patch)
treecb3693d2aa0abce58c3d5da1b627d5df201cc80b
parentee3c7784c235d03c34ae0ef4ad3cdb37edb559dc (diff)
downloadgst-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.c40
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);