[FFmpeg-devel] [PATCH v3] libavcodec/qsvenc: Enable fixed QP configure in qsv CQP runtime
Paul B Mahol
onemda at gmail.com
Sat Jul 2 17:21:08 EEST 2022
On Sat, Jul 2, 2022 at 11:39 AM Anton Khirnov <anton at khirnov.net> wrote:
> Quoting Wenbin Chen (2022-06-23 07:32:42)
> > From: Yue Heng <yue.heng at 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.heng at intel.com>
> > Signed-off-by: Wenbin Chen <wenbin.chen at 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
> >
> > + at subsection Runtime Options
> > +Following options can be used durning qsv encoding.
> > +
> > + at table @option
> > + at 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.
> > + at 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.
>
Disagreed. Stop sharing your agenda.
>
> --
> Anton Khirnov
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
More information about the ffmpeg-devel
mailing list