It is helpful to know why some clips decoding failed. Ticket#7330 is a good example, with this patch it is easily to know bitstream codec level is out of support range.
Signed-off-by: Zhong Li <zhong...@intel.com> --- libavcodec/qsvdec.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 4a0be811fb..2a8a032111 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -120,6 +120,33 @@ static inline unsigned int qsv_fifo_size(const AVFifoBuffer* fifo) return av_fifo_size(fifo) / qsv_fifo_item_size(); } +static int check_dec_param(AVCodecContext *avctx, QSVContext *q, mfxVideoParam *param_in) +{ + mfxVideoParam param_out = { .mfx.CodecId = param_in->mfx.CodecId }; + mfxStatus ret; + +#define CHECK_MATCH(x) \ + do { \ + if (param_out.mfx.x != param_in->mfx.x) { \ + av_log(avctx, AV_LOG_WARNING, "Required "#x" %d is unsupported\n", \ + param_in->mfx.x); \ + } \ + } while (0) + + ret = MFXVideoDECODE_Query(q->session, param_in, ¶m_out); + + if (ret < 0) { + CHECK_MATCH(CodecId); + CHECK_MATCH(CodecProfile); + CHECK_MATCH(CodecLevel); + CHECK_MATCH(FrameInfo.Width); + CHECK_MATCH(FrameInfo.Height); +#undef CHECK_MATCH + return 0; + } + return 1; +} + static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q) { const AVPixFmtDescriptor *desc; @@ -206,6 +233,12 @@ static int qsv_decode_init(AVCodecContext *avctx, QSVContext *q) param.ExtParam = q->ext_buffers; param.NumExtParam = q->nb_ext_buffers; + if (!check_dec_param(avctx, q, ¶m)) { + //Just give a warning instead of an error since it is still decodable possibly. + av_log(avctx, AV_LOG_WARNING, + "Current input bitstream is not supported by QSV decoder.\n"); + } + ret = MFXVideoDECODE_Init(q->session, ¶m); if (ret < 0) return ff_qsv_print_error(avctx, ret, -- 2.17.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".