diff options
author | Ivan Uskov <ivan.uskov@nablet.com> | 2015-07-14 07:07:04 -0400 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2015-07-16 21:30:45 +0200 |
commit | 6e127990fa9ea9776a74041080ff2a9ce8a39767 (patch) | |
tree | 5c15137f4d8c4a6d1250ae7449a04bc7b75d1c54 /libavcodec/qsvdec.c | |
parent | 17ee24af7e5f7112fe25c734236d521f9e35d80d (diff) |
Refactoring to move common QSV-related code part into libavcodec/qsvdec.c
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/qsvdec.c')
-rw-r--r-- | libavcodec/qsvdec.c | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 52df028ce3..996d8e8fef 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -34,6 +34,7 @@ #include "avcodec.h" #include "internal.h" +#include "qsv.h" #include "qsv_internal.h" #include "qsvdec.h" @@ -48,37 +49,28 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format) } } -static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession session) -{ - if (!session) { - if (!q->internal_qs.session) { - int ret = ff_qsv_init_internal_session(avctx, &q->internal_qs, NULL); - if (ret < 0) - return ret; - } - - q->session = q->internal_qs.session; - } else { - q->session = session; - } - - /* make sure the decoder is uninitialized */ - MFXVideoDECODE_Close(q->session); - - return 0; -} - -int ff_qsv_decode_init(AVCodecContext *avctx, QSVContext *q, mfxSession session) +int ff_qsv_decode_init(AVCodecContext *avctx, QSVContext *q) { mfxVideoParam param = { { 0 } }; int ret; - ret = qsv_init_session(avctx, q, session); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Error initializing an MFX session\n"); - return ret; + q->iopattern = MFX_IOPATTERN_OUT_SYSTEM_MEMORY; + + 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) { + ret = ff_qsv_init_internal_session(avctx, &q->internal_qs, NULL); + if (ret < 0) + return ret; + q->session = q->internal_qs.session; + } ret = ff_qsv_codec_id_to_mfx(avctx->codec_id); if (ret < 0) |