[FFmpeg-cvslog] qsvdec: Relax the surface vs coded dimension check
Zhong Li
git at videolan.org
Mon Feb 12 03:46:18 EET 2018
ffmpeg | branch: master | Zhong Li <zhong.li at intel.com> | Thu Jan 25 18:19:12 2018 +0800| [6829a079444e10818a847e153121fb458cc5c0a8] | committer: Luca Barbato
qsvdec: Relax the surface vs coded dimension check
Fix a common vp8 decoding failure.
Many vp8 clips cannot decode if hw_frames_ctx is enabled, reporting
"Error during QSV decoding.: incompatible video parameters (-14)".
It is due to mfx.FrameInfo.Width/Height not matching coded_w/coded_h.
See: avconv -hwaccel qsv -init_hw_device qsv -c:v vp8_qsv -i vp8-test-vectors-r1/vp80-00-comprehensive-001.ivf
-vf "hwdownload,format=nv12" -pix_fmt yuv420p -f md5 -
Signed-off-by: Zhong Li <zhong.li at intel.com>
Signed-off-by: Luca Barbato <lu_zero at gentoo.org>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6829a079444e10818a847e153121fb458cc5c0a8
---
libavcodec/qsv.c | 2 +-
libavcodec/qsvdec.c | 3 ---
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
index 96dca14e9a..e78633d62a 100644
--- a/libavcodec/qsv.c
+++ b/libavcodec/qsv.c
@@ -389,7 +389,7 @@ static mfxStatus qsv_frame_alloc(mfxHDL pthis, mfxFrameAllocRequest *req,
mfxFrameInfo *i = &req->Info;
mfxFrameInfo *i1 = &frames_hwctx->surfaces[0].Info;
- if (i->Width != i1->Width || i->Height != i1->Height ||
+ if (i->Width > i1->Width || i->Height > i1->Height ||
i->FourCC != i1->FourCC || i->ChromaFormat != i1->ChromaFormat) {
av_log(ctx->logctx, AV_LOG_ERROR, "Mismatching surface properties in an "
"allocation request: %dx%d %d %d vs %dx%d %d %d\n",
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 9741f33109..f31172de29 100644
--- a/libavcodec/qsvdec.c
+++ b/libavcodec/qsvdec.c
@@ -149,9 +149,6 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q)
else if (frames_hwctx->frame_type & MFX_MEMTYPE_VIDEO_MEMORY_DECODER_TARGET)
iopattern = MFX_IOPATTERN_OUT_VIDEO_MEMORY;
}
-
- frame_width = frames_hwctx->surfaces[0].Info.Width;
- frame_height = frames_hwctx->surfaces[0].Info.Height;
}
if (!iopattern)
More information about the ffmpeg-cvslog
mailing list