Quoting Wenbin Chen (2022-06-23 07:32:42) > From: Yue Heng <yue.h...@intel.com> > > Enable dynamic QP configuration in runtime on qsv encoder. Through > AVFrame->metadata, we can set key "qsv_config_qp" to change QP > configuration when we encode video in CQP mode. > > Signed-off-by: Yue Heng <yue.h...@intel.com> > Signed-off-by: Wenbin Chen <wenbin.c...@intel.com> > --- > doc/encoders.texi | 10 +++++ > libavcodec/qsvenc.c | 89 +++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 99 insertions(+) > > diff --git a/doc/encoders.texi b/doc/encoders.texi > index 1850c99fe9..02a91ffe96 100644 > --- a/doc/encoders.texi > +++ b/doc/encoders.texi > @@ -3333,6 +3333,16 @@ Forcing I frames as IDR frames. > For encoders set this flag to ON to reduce power consumption and GPU usage. > @end table > > +@subsection Runtime Options > +Following options can be used durning qsv encoding. > + > +@table @option > +@item @var{qsv_config_qp} > +Supported in h264_qsv and hevc_qsv. > +This option can be set in per-frame metadata. QP parameter can be dynamically > +changed when encoding in CQP mode. > +@end table > + > @subsection H264 options > These options are used by h264_qsv > > diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c > index 902bada55b..2382c2f5f7 100644 > --- a/libavcodec/qsvenc.c > +++ b/libavcodec/qsvenc.c > @@ -146,6 +146,14 @@ static const struct { > { MFX_RATECONTROL_QVBR, "QVBR" }, > }; > > +#define UPDATE_PARAM(a, b) \ > +do { \ > + if ((a) != (b)) { \ > + a = b; \ > + updated = 1; \ > + } \ > +} while (0) \ > + > static const char *print_ratecontrol(mfxU16 rc_mode) > { > int i; > @@ -1613,6 +1621,83 @@ static int set_roi_encode_ctrl(AVCodecContext *avctx, > const AVFrame *frame, > return 0; > } > > +static int update_qp(AVCodecContext *avctx, QSVEncContext *q, > + const AVFrame *frame) > +{ > + int updated = 0, qp = 0, new_qp; > + char *tail; > + AVDictionaryEntry *entry = NULL; > + > + if (avctx->codec_id != AV_CODEC_ID_H264 && avctx->codec_id != > AV_CODEC_ID_HEVC) > + return 0; > + > + entry = av_dict_get(frame->metadata, "qsv_config_qp", NULL, 0);
Why is this using frame metadata rather than the AVVideoEncParams side data? Frame metadata should not be used in encoders at all. Longer term it should not be used at all by anything. -- Anton Khirnov _______________________________________________ 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".