> On Jul 6, 2023, at 18:23, Timo Rothenpieler <t...@rothenpieler.org> wrote: > > On 06/07/2023 14:00, Zhao Zhili wrote: >> From: Zhao Zhili <zhiliz...@tencent.com> >> Regression since 99dfdb45. intraRefreshPeriod access cc->gopLength, >> which has been overwritten to NVENC_INFINITE_GOPLENGTH before. >> Fixes #10445. >> --- >> libavcodec/nvenc.c | 6 +++--- >> 1 file changed, 3 insertions(+), 3 deletions(-) >> diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c >> index 06579a502b..13fafcd246 100644 >> --- a/libavcodec/nvenc.c >> +++ b/libavcodec/nvenc.c >> @@ -1173,6 +1173,7 @@ static av_cold int >> nvenc_setup_h264_config(AVCodecContext *avctx) >> h264->enableIntraRefresh = 1; >> h264->intraRefreshPeriod = cc->gopLength; >> h264->intraRefreshCnt = cc->gopLength - 1; >> + cc->gopLength = NVENC_INFINITE_GOPLENGTH; >> #ifdef NVENC_HAVE_SINGLE_SLICE_INTRA_REFRESH >> h264->singleSliceIntraRefresh = ctx->single_slice_intra_refresh; >> #endif >> @@ -1297,6 +1298,7 @@ static av_cold int >> nvenc_setup_hevc_config(AVCodecContext *avctx) >> hevc->enableIntraRefresh = 1; >> hevc->intraRefreshPeriod = cc->gopLength; >> hevc->intraRefreshCnt = cc->gopLength - 1; >> + cc->gopLength = NVENC_INFINITE_GOPLENGTH; >> #ifdef NVENC_HAVE_SINGLE_SLICE_INTRA_REFRESH >> hevc->singleSliceIntraRefresh = ctx->single_slice_intra_refresh; >> #endif >> @@ -1415,6 +1417,7 @@ static av_cold int >> nvenc_setup_av1_config(AVCodecContext *avctx) >> av1->enableIntraRefresh = 1; >> av1->intraRefreshPeriod = cc->gopLength; >> av1->intraRefreshCnt = cc->gopLength - 1; >> + cc->gopLength = NVENC_INFINITE_GOPLENGTH; >> av1->idrPeriod = NVENC_INFINITE_GOPLENGTH; >> } else if (cc->gopLength > 0) { >> @@ -1619,9 +1622,6 @@ FF_ENABLE_DEPRECATION_WARNINGS >> if(ctx->single_slice_intra_refresh) >> ctx->intra_refresh = 1; >> - if (ctx->intra_refresh) >> - ctx->encode_config.gopLength = NVENC_INFINITE_GOPLENGTH; >> - >> nvenc_recalc_surfaces(avctx); >> nvenc_setup_rate_control(avctx); > > Shouldn't it be enough to move this block down a bit, below > nvenc_setup_codec_config? > That way the codec specific configs can still access the value, and the logic > of setting it to infinite for intra refresh mode doesn't have to be > duplicated everywhere.
Then people lost the context and hard to get why it should be put after nvenc_setup_codec_config(), and might move it before by accident. Another benefit to set cc->gopLength at here is idrPeriod can be set to gopLength unconditionally: http://ffmpeg.org/pipermail/ffmpeg-devel/2023-July/311694.html To reduce code duplication, the codec specific intra_refresh configure can be replaced by a macro, but it doesn’t looks good IMO. > > Though I'm not sure which way I prefer. Having it in the intra_refresh > specific block in each codec definitely also has its advantage of keeping > that logic in one place. > _______________________________________________ > 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". _______________________________________________ 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".