diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2015-10-22 17:00:49 +0200 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2015-10-22 17:01:13 +0200 |
commit | b54d645116074ba66781d922ee6905b4eea8fa57 (patch) | |
tree | 8f2b8195bf4f9f6f4505c7d342c9f0b045746bbd | |
parent | dd8a4b0f8c39803b6a33f4b4bc836cfc66222370 (diff) | |
download | ffmpeg-b54d645116074ba66781d922ee6905b4eea8fa57.tar.gz |
qsvdec: fix get_format and hwaccel_context handling
This enables the qsv transcoder to actually get activated
-rw-r--r-- | libavcodec/qsvdec.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 9fefc41020..c451fb9614 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -58,24 +58,30 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q, AVPacket *avpkt AV_PIX_FMT_NV12, AV_PIX_FMT_NONE }; + ret = ff_get_format(avctx, pix_fmts); + if (ret < 0) + return ret; + + avctx->pix_fmt = ret; + q->iopattern = MFX_IOPATTERN_OUT_SYSTEM_MEMORY; - if (!q->session) { - if (avctx->hwaccel_context) { - AVQSVContext *qsv = avctx->hwaccel_context; + if (avctx->hwaccel_context) { + AVQSVContext *qsv = avctx->hwaccel_context; - q->session = qsv->session; - q->iopattern = qsv->iopattern; - q->ext_buffers = qsv->ext_buffers; - q->nb_ext_buffers = qsv->nb_ext_buffers; - } - if (!q->session) { + q->session = qsv->session; + q->iopattern = qsv->iopattern; + q->ext_buffers = qsv->ext_buffers; + q->nb_ext_buffers = qsv->nb_ext_buffers; + } + if (!q->session) { + if (!q->internal_qs.session) { ret = ff_qsv_init_internal_session(avctx, &q->internal_qs, q->load_plugins); if (ret < 0) return ret; - - q->session = q->internal_qs.session; } + + q->session = q->internal_qs.session; } if (avpkt->size) { @@ -123,11 +129,6 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q, AVPacket *avpkt return ff_qsv_error(ret); } - ret = ff_get_format(avctx, pix_fmts); - if (ret < 0) - return ret; - - avctx->pix_fmt = ret; avctx->profile = param.mfx.CodecProfile; avctx->level = param.mfx.CodecLevel; avctx->coded_width = param.mfx.FrameInfo.Width; |