[FFmpeg-devel] [PATCH 1/3] lavc/qsvdec: add query function and provide error message

Li, Zhong zhong.li at intel.com
Sun May 5 15:15:20 EEST 2019


> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces at ffmpeg.org] On Behalf
> Of Zhong Li
> Sent: Tuesday, April 30, 2019 5:04 PM
> To: ffmpeg-devel at ffmpeg.org
> Cc: Li, Zhong <zhong.li at intel.com>
> Subject: [FFmpeg-devel] [PATCH 1/3] lavc/qsvdec: add query function and
> provide error message
> 
> 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.li at 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, &param_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, &param)) {
> +        //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, &param);
>      if (ret < 0)
>          return ff_qsv_print_error(avctx, ret,
> --
> 2.17.1

Ping for comment of this patch set.  
Thanks


More information about the ffmpeg-devel mailing list