Skip to content

Commit b223186

Browse files
committed
lavc NVENC: use param lavc-rc-buffer-size-factor if set
+ hint
1 parent 19aaeeb commit b223186

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/video_compress/libavcodec.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ static constexpr const int DEFAULT_GOP_SIZE = 20;
106106
static constexpr int DEFAULT_SLICE_COUNT = 32;
107107
static constexpr string_view DONT_SET_PRESET = "dont_set_preset";
108108

109-
#define DEFAULT_RC_BUF_SIZE_FACTOR 2.5
109+
#define DEFAULT_X26X_RC_BUF_SIZE_FACTOR 2.5
110110

111111
namespace {
112112

@@ -1761,7 +1761,7 @@ static void configure_amf([[maybe_unused]] AVCodecContext *codec_ctx, [[maybe_un
17611761
ADD_TO_PARAM("lavc-h264-interlaced-dct", "* lavc-h264-interlaced-dct\n"
17621762
" Use interlaced DCT for H.264\n");
17631763
ADD_TO_PARAM("lavc-rc-buffer-size-factor", "* lavc-rc-buffer-size-factor=<val>\n"
1764-
" Multiplier how much can individual frame overshot average size (default: " TOSTRING(DEFAULT_RC_BUF_SIZE_FACTOR) ").\n");
1764+
" Multiplier how much can individual frame overshot average size (default x264/5: " TOSTRING(DEFAULT_X26X_RC_BUF_SIZE_FACTOR) ", nvenc: 1).\n");
17651765
static void configure_x264_x265(AVCodecContext *codec_ctx, struct setparam_param *param)
17661766
{
17671767
const char *tune = codec_ctx->codec->id == AV_CODEC_ID_H264 ? "zerolatency,fastdecode" : "zerolatency"; // x265 supports only single tune parameter
@@ -1771,7 +1771,7 @@ static void configure_x264_x265(AVCodecContext *codec_ctx, struct setparam_param
17711771
codec_ctx->rc_max_rate = codec_ctx->bit_rate;
17721772
//codec_ctx->rc_min_rate = s->codec_ctx->bit_rate / 4 * 3;
17731773
//codec_ctx->rc_buffer_aggressivity = 1.0;
1774-
double lavc_rc_buffer_size_factor = DEFAULT_RC_BUF_SIZE_FACTOR;
1774+
double lavc_rc_buffer_size_factor = DEFAULT_X26X_RC_BUF_SIZE_FACTOR;
17751775
if (const char *val = get_commandline_param("lavc-rc-buffer-size-factor")) {
17761776
lavc_rc_buffer_size_factor = stof(val);
17771777
}
@@ -1890,6 +1890,12 @@ static void configure_nvenc(AVCodecContext *codec_ctx, struct setparam_param *pa
18901890
check_av_opt_set<const char *>(codec_ctx->priv_data, "b_ref_mode", "disabled", 0);
18911891
codec_ctx->rc_max_rate = codec_ctx->bit_rate;
18921892
codec_ctx->rc_buffer_size = codec_ctx->rc_max_rate / param->desc.fps;
1893+
if (const char *val = get_commandline_param("lavc-rc-buffer-size-factor")) {
1894+
codec_ctx->rc_buffer_size *= stof(val);
1895+
} else {
1896+
log_msg(LOG_LEVEL_WARNING, MOD_NAME "To reduce NVENC pulsation, you can try \"--param lavc-rc-buffer-size-factor=0\""
1897+
" or a small number. 0 or higher value (than default 1) may cause frame drops on receiver.\n");
1898+
}
18931899
}
18941900

18951901
static void configure_svt(AVCodecContext *codec_ctx, struct setparam_param *param)

0 commit comments

Comments
 (0)