[FFmpeg-devel] [PATCH] nvenc set slice number to 1 to improve encoding quality and clamp initial qp value to [1, 51]
Agatha Hu
ahu at nvidia.com
Fri Dec 11 04:19:11 CET 2015
On 2015/12/11 11:10, Agatha Hu wrote:
>
> ---
> libavcodec/nvenc.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
> index 43b8e78..6365434 100644
> --- a/libavcodec/nvenc.c
> +++ b/libavcodec/nvenc.c
> @@ -762,6 +762,17 @@ static av_cold int nvenc_encode_init(AVCodecContext
> *avctx)
> }
> }
>
> + switch (avctx->codec->id) {
> + case AV_CODEC_ID_H264:
> + ctx->encode_config.encodeCodecConfig.h264Config.sliceMode = 3;
> + ctx->encode_config.encodeCodecConfig.h264Config.sliceModeData = 1;
> + break;
> + case AV_CODEC_ID_H265:
> + ctx->encode_config.encodeCodecConfig.hevcConfig.sliceMode = 3;
> + ctx->encode_config.encodeCodecConfig.hevcConfig.sliceModeData = 1;
> + break;
> + }
> +
> /* when there're b frames, set dts offset */
> if (ctx->encode_config.frameIntervalP >= 2)
> ctx->last_dts = -2;
> @@ -843,10 +854,10 @@ static av_cold int
> nvenc_encode_init(AVCodecContext *avctx)
> ctx->encode_config.rcParams.initialRCQP.qpInterP = qp_inter_p;
>
> if(avctx->i_quant_factor != 0.0 && avctx->b_quant_factor !=
> 0.0) {
> - ctx->encode_config.rcParams.initialRCQP.qpIntra =
> qp_inter_p * fabs(avctx->i_quant_factor);
> - ctx->encode_config.rcParams.initialRCQP.qpIntra +=
> avctx->i_quant_offset;
> - ctx->encode_config.rcParams.initialRCQP.qpInterB =
> qp_inter_p * fabs(avctx->b_quant_factor);
> - ctx->encode_config.rcParams.initialRCQP.qpInterB +=
> avctx->b_quant_offset;
> + ctx->encode_config.rcParams.initialRCQP.qpIntra = av_clip(
> + qp_inter_p * fabs(avctx->i_quant_factor) +
> avctx->i_quant_offset, 0, 51);
> + ctx->encode_config.rcParams.initialRCQP.qpInterB = av_clip(
> + qp_inter_p * fabs(avctx->b_quant_factor) +
> avctx->b_quant_offset, 0, 51);
> } else {
> ctx->encode_config.rcParams.initialRCQP.qpIntra = qp_inter_p;
> ctx->encode_config.rcParams.initialRCQP.qpInterB =
> qp_inter_p;
Hi all, before switching to the new released nvenc6.0 header, can you
take a look at this fix?
Agatha Hu
More information about the ffmpeg-devel
mailing list