]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/qsvdec.c
aacenc: Enable Intensity Stereo by default
[ffmpeg] / libavcodec / qsvdec.c
index d1261add2ca5e1e58ea0d93a3824cd4126706f5b..1062ef096a5b61d9bbbaf8784b275f67abfad1b5 100644 (file)
@@ -54,6 +54,9 @@ int ff_qsv_decode_init(AVCodecContext *avctx, QSVContext *q, AVPacket *avpkt)
     mfxVideoParam param = { { 0 } };
     mfxBitstream bs   = { { { 0 } } };
     int ret;
+    enum AVPixelFormat pix_fmts[3] = { AV_PIX_FMT_QSV,
+                                       AV_PIX_FMT_NV12,
+                                       AV_PIX_FMT_NONE };
 
     q->iopattern  = MFX_IOPATTERN_OUT_SYSTEM_MEMORY;
     if (!q->session) {
@@ -110,11 +113,21 @@ int ff_qsv_decode_init(AVCodecContext *avctx, QSVContext *q, AVPacket *avpkt)
 
     ret = MFXVideoDECODE_Init(q->session, &param);
     if (ret < 0) {
-        av_log(avctx, AV_LOG_ERROR, "Error initializing the MFX video decoder\n");
+        if (MFX_ERR_INVALID_VIDEO_PARAM==ret) {
+            av_log(avctx, AV_LOG_ERROR,
+                   "Error initializing the MFX video decoder, unsupported video\n");
+        } else {
+            av_log(avctx, AV_LOG_ERROR,
+                   "Error initializing the MFX video decoder %d\n", ret);
+        }
         return ff_qsv_error(ret);
     }
 
-    avctx->pix_fmt      = AV_PIX_FMT_NV12;
+    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;
@@ -316,7 +329,7 @@ int ff_qsv_decode(AVCodecContext *avctx, QSVContext *q,
                                                   insurf, &outsurf, &sync);
             if (ret != MFX_WRN_DEVICE_BUSY)
                 break;
-            av_usleep(1);
+            av_usleep(500);
         } while (1);
 
         if (MFX_WRN_VIDEO_PARAM_CHANGED==ret) {