From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id A48274335B for ; Sat, 2 Jul 2022 09:39:18 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5316368B889; Sat, 2 Jul 2022 12:39:16 +0300 (EEST) Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8EF5D68B722 for ; Sat, 2 Jul 2022 12:39:10 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 122F7240179 for ; Sat, 2 Jul 2022 11:39:10 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 4bR_lmChIAFb for ; Sat, 2 Jul 2022 11:39:09 +0200 (CEST) Received: from lain.khirnov.net (lain.khirnov.net [IPv6:2001:67c:1138:4306::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "lain.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 777FB2400F5 for ; Sat, 2 Jul 2022 11:39:09 +0200 (CEST) Received: by lain.khirnov.net (Postfix, from userid 1000) id 99EA51601B2; Sat, 2 Jul 2022 11:39:09 +0200 (CEST) From: Anton Khirnov To: FFmpeg development discussions and patches In-Reply-To: <20220623053242.360909-1-wenbin.chen@intel.com> References: <20220623053242.360909-1-wenbin.chen@intel.com> Mail-Followup-To: FFmpeg development discussions and patches Date: Sat, 02 Jul 2022 11:39:09 +0200 Message-ID: <165675474959.31466.10582792568629584963@lain.khirnov.net> User-Agent: alot/0.8.1 MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH v3] libavcodec/qsvenc: Enable fixed QP configure in qsv CQP runtime X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Quoting Wenbin Chen (2022-06-23 07:32:42) > From: Yue Heng > > 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 > Signed-off-by: Wenbin Chen > --- > 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-request@ffmpeg.org with subject "unsubscribe".