summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-05-21 18:26:40 +0200
committerAnton Khirnov <anton@khirnov.net>2016-05-26 16:34:11 +0200
commit1e0e16c1d323a85790d136d3491232777108fd16 (patch)
treee4bc84d6b7bb2217f5b11e2eca0e9b6a96cc9bd1
parent126819a8fbfd5c60a2ae67ab5bfd639c8b1bc408 (diff)
qsvdec: move reading the user-provided session to qsv_decode_init()
This is a more appropriate place for it.
-rw-r--r--libavcodec/qsvdec.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 1d59e729d3..e3e5bba508 100644
--- a/libavcodec/qsvdec.c
+++ b/libavcodec/qsvdec.c
@@ -70,8 +70,9 @@ static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession ses
return 0;
}
-static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q, mfxSession session)
+static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q)
{
+ mfxSession session = NULL;
mfxVideoParam param = { { 0 } };
int ret;
@@ -82,13 +83,20 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q, mfxSession sess
return AVERROR(ENOMEM);
}
+ if (avctx->hwaccel_context) {
+ AVQSVContext *user_ctx = avctx->hwaccel_context;
+ session = user_ctx->session;
+ q->iopattern = user_ctx->iopattern;
+ q->ext_buffers = user_ctx->ext_buffers;
+ q->nb_ext_buffers = user_ctx->nb_ext_buffers;
+ }
+
ret = qsv_init_session(avctx, q, session);
if (ret < 0) {
av_log(avctx, AV_LOG_ERROR, "Error initializing an MFX session\n");
return ret;
}
-
ret = ff_qsv_codec_id_to_mfx(avctx->codec_id);
if (ret < 0)
return ret;
@@ -399,8 +407,6 @@ int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q,
if (q->parser->format != q->orig_pix_fmt ||
q->parser->coded_width != avctx->coded_width ||
q->parser->coded_height != avctx->coded_height) {
- mfxSession session = NULL;
-
enum AVPixelFormat pix_fmts[3] = { AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE,
AV_PIX_FMT_NONE };
@@ -429,15 +435,7 @@ int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q,
avctx->pix_fmt = ret;
- if (avctx->hwaccel_context) {
- AVQSVContext *user_ctx = avctx->hwaccel_context;
- session = user_ctx->session;
- q->iopattern = user_ctx->iopattern;
- q->ext_buffers = user_ctx->ext_buffers;
- q->nb_ext_buffers = user_ctx->nb_ext_buffers;
- }
-
- ret = qsv_decode_init(avctx, q, session);
+ ret = qsv_decode_init(avctx, q);
if (ret < 0)
goto reinit_fail;
}