[FFmpeg-cvslog] qsvdec: fix get_format and hwaccel_context handling

Hendrik Leppkes git at videolan.org
Thu Oct 22 17:02:57 CEST 2015


ffmpeg | branch: master | Hendrik Leppkes <h.leppkes at gmail.com> | Thu Oct 22 17:00:49 2015 +0200| [b54d645116074ba66781d922ee6905b4eea8fa57] | committer: Hendrik Leppkes

qsvdec: fix get_format and hwaccel_context handling

This enables the qsv transcoder to actually get activated

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b54d645116074ba66781d922ee6905b4eea8fa57
---

 libavcodec/qsvdec.c |   33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 9fefc41..c451fb9 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;



More information about the ffmpeg-cvslog mailing list