Browse Source

UI: Determine rate control after creating encoders

If the user hasn't specifically set a rate control and left OBS at the
default of CBR, the settings loaded by GetDataFromJsonFile will not have
a rate_control parameter present. This causes the replay buffer to think
the user is in VBR mode and use the wrong settings for determining
maximum buffer size. Fixes #2516.
Richard Stanway 5 years ago
parent
commit
a53c59e8c7
1 changed files with 9 additions and 9 deletions
  1. 9 9
      UI/window-basic-main-outputs.cpp

+ 9 - 9
UI/window-basic-main-outputs.cpp

@@ -1202,15 +1202,6 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_)
 	OBSData streamEncSettings = GetDataFromJsonFile("streamEncoder.json");
 	OBSData recordEncSettings = GetDataFromJsonFile("recordEncoder.json");
 
-	const char *rate_control = obs_data_get_string(
-		useStreamEncoder ? streamEncSettings : recordEncSettings,
-		"rate_control");
-	if (!rate_control)
-		rate_control = "";
-	usesBitrate = astrcmpi(rate_control, "CBR") == 0 ||
-		      astrcmpi(rate_control, "VBR") == 0 ||
-		      astrcmpi(rate_control, "ABR") == 0;
-
 	if (ffmpegOutput) {
 		fileOutput = obs_output_create(
 			"ffmpeg_output", "adv_ffmpeg_output", nullptr, nullptr);
@@ -1274,6 +1265,15 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_)
 		      "(advanced output)";
 	obs_encoder_release(h264Streaming);
 
+	const char *rate_control = obs_data_get_string(
+		useStreamEncoder ? streamEncSettings : recordEncSettings,
+		"rate_control");
+	if (!rate_control)
+		rate_control = "";
+	usesBitrate = astrcmpi(rate_control, "CBR") == 0 ||
+		      astrcmpi(rate_control, "VBR") == 0 ||
+		      astrcmpi(rate_control, "ABR") == 0;
+
 	for (int i = 0; i < MAX_AUDIO_MIXES; i++) {
 		char name[9];
 		sprintf(name, "adv_aac%d", i);