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) {
ret = MFXVideoDECODE_Init(q->session, ¶m);
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;
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) {