]> git.sesse.net Git - ffmpeg/commitdiff
qsvdec: move reading the user-provided session to qsv_decode_init()
authorAnton Khirnov <anton@khirnov.net>
Sat, 21 May 2016 16:26:40 +0000 (18:26 +0200)
committerAnton Khirnov <anton@khirnov.net>
Tue, 21 Jun 2016 17:52:19 +0000 (19:52 +0200)
This is a more appropriate place for it.

libavcodec/qsvdec.c

index 1d59e729d3e68bdda336cf8f8bc765432fffb060..e3e5bba508f177b702cd0949dee7bb05dd544524 100644 (file)
@@ -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;
     }