On Tue, 2021-03-23 at 16:34 +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 | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c > index 5f2e641373..88232f5d8d 100644 > --- a/libavcodec/qsvdec.c > +++ b/libavcodec/qsvdec.c > @@ -481,6 +481,13 @@ 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_DEBUG, "Video parameter change\n"); > + av_freep(&sync); > + return 0; > + } > + > if (ret != MFX_ERR_NONE && > ret != MFX_ERR_MORE_DATA && > ret != MFX_WRN_VIDEO_PARAM_CHANGED && > @@ -632,9 +639,9 @@ static int 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) {
LTGM, thanks! -Haihao _______________________________________________ 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".