> -----Original Message----- > From: Xiang, Haihao <haihao.xi...@intel.com> > Sent: Tuesday, March 23, 2021 11:49 AM > To: ffmpeg-devel@ffmpeg.org > Cc: Chen, Wenbin <wenbin.c...@intel.com> > Subject: Re: [FFmpeg-devel] [PATCH] libavcodec/qsvdec: reinit decoder > according to decode() return value > > On Mon, 2021-03-22 at 14:27 +0800, wenbin.c...@intel.com wrote: > > From: "Chen,Wenbin" <wenbin.c...@intel.com> > > > > FFmpeg-qsv decoder reinit codec when width and height change, but there > > are not only resolution change need to reinit codec. I change it to use > > return value from DecodeFrameAsync() to decide whether decoder need to > > be reinitialized. > > > > Signed-off-by Wenbin Chen <wenbin.c...@intel.com> > > --- > > libavcodec/qsvdec.c | 10 ++++++++-- > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > > diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c > > index bca6e217fa..124f3e0a7a 100644 > > --- a/libavcodec/qsvdec.c > > +++ b/libavcodec/qsvdec.c > > @@ -438,6 +438,12 @@ static int qsv_decode(AVCodecContext *avctx, > QSVContext > > *q, > > > > } while (ret == MFX_WRN_DEVICE_BUSY || ret == > MFX_ERR_MORE_SURFACE); > > > > + if (ret == MFX_ERR_INCOMPATIBLE_VIDEO_PARAM) { > > + q->reinit_flag = 1; > > + av_log(avctx, AV_LOG_VERBOSE, "Video parameter change\n"); > > How about using AV_LOG_DEBUG instead? I think it is useful only for > developers. > In addition, sync should be freed before returning 0. >
Ok, I will submit another version. Thanks for your advice. > > > + return 0; > > + } > > + > > if (ret != MFX_ERR_NONE && > > ret != MFX_ERR_MORE_DATA && > > ret != MFX_WRN_VIDEO_PARAM_CHANGED && > > @@ -591,9 +597,9 @@ int ff_qsv_process_data(AVCodecContext *avctx, > QSVContext > > *q, > > > > ret = qsv_decode_header(avctx, q, pkt, pix_fmt, ¶m); > > > > - if (ret >= 0 && (q->orig_pix_fmt != > > ff_qsv_map_fourcc(param.mfx.FrameInfo.FourCC) || > > + if (q->reinit_flag || (ret >= 0 && (q->orig_pix_fmt != > > ff_qsv_map_fourcc(param.mfx.FrameInfo.FourCC) || > > avctx->coded_width != param.mfx.FrameInfo.Width || > > - avctx->coded_height != param.mfx.FrameInfo.Height)) { > > + avctx->coded_height != param.mfx.FrameInfo.Height))) { > > AVPacket zero_pkt = {0}; > > > > if (q->buffered_count) { _______________________________________________ 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".