obs-nvenc: Only update Target Quality in CQVBR mode

Previously it was setting the `averageBitRate` value to what is being set in Variable Bitrate rate control mode. However, CQVBR is initialized with a value of `0` and instead Target Quality is being used. This adds a check for the CQVBR mode and if it's set will update the `targetQuality` value, otherwise it will update `averageBitRate`.

Additionally reset `averageBitRate` to 0 if CQVBR is active, and reset `targetQuality` to 0 if it's not in any VBR mode
This commit is contained in:
Lordmau5
2026-03-18 15:08:41 +01:00
committed by Ryan Foster
parent 74c106512d
commit 2b88e617a2
+10 -1
View File
@@ -98,8 +98,17 @@ static bool nvenc_update(void *data, obs_data_t *settings)
enc->props.bitrate = obs_data_get_int(settings, "bitrate");
enc->props.max_bitrate = obs_data_get_int(settings, "max_bitrate");
bool cqvbr = astrcmpi(enc->props.rate_control, "CQVBR") == 0;
bool vbr = (enc->config.rcParams.rateControlMode == NV_ENC_PARAMS_RC_VBR);
enc->config.rcParams.averageBitRate = (uint32_t)enc->props.bitrate * 1000;
if (cqvbr) {
enc->config.rcParams.targetQuality = (uint8_t)obs_data_get_int(settings, "target_quality");
enc->config.rcParams.averageBitRate = 0;
} else {
enc->config.rcParams.targetQuality = 0;
enc->config.rcParams.averageBitRate = (uint32_t)enc->props.bitrate * 1000;
}
enc->config.rcParams.maxBitRate = vbr ? (uint32_t)enc->props.max_bitrate * 1000
: (uint32_t)enc->props.bitrate * 1000;