From ed43de5c75dfffb078469fc15db7f5cb00f6e2ce Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 15 Aug 2019 08:36:23 -0700 Subject: [PATCH] obs-ffmpeg: Allow FFmpeg NVENC to be reconfigured Adds the ability to reconfigure FFmpeg's NVENC implementation on the fly. --- plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c b/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c index 7dc1836e4..b00672f44 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c @@ -228,6 +228,23 @@ static bool nvenc_update(void *data, obs_data_t *settings) return nvenc_init_codec(enc); } +static bool nvenc_reconfigure(void *data, obs_data_t *settings) +{ +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(58, 19, 101) + struct nvenc_encoder *enc = data; + + int bitrate = (int)obs_data_get_int(settings, "bitrate"); + const char *rc = obs_data_get_string(settings, "rate_control"); + bool cbr = astrcmpi(rc, "CBR") == 0; + bool vbr = astrcmpi(rc, "VBR") == 0; + if (cbr || vbr) { + enc->context->bit_rate = bitrate * 1000; + enc->context->rc_max_rate = bitrate * 1000; + } +#endif + return true; +} + static void nvenc_destroy(void *data) { struct nvenc_encoder *enc = data; @@ -547,6 +564,7 @@ struct obs_encoder_info nvenc_encoder_info = { .create = nvenc_create, .destroy = nvenc_destroy, .encode = nvenc_encode, + .update = nvenc_reconfigure, .get_defaults = nvenc_defaults, .get_properties = nvenc_properties_ffmpeg, .get_extra_data = nvenc_extra_data,