From 3f3ff4fd92be3db1a678df428ab5decac51ea339 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 12 May 2023 18:16:27 +0200 Subject: [PATCH] UI: Disallow exiting settings with no track in advanced mode (cherry picked from commit 4b376929394044c5eb665484001c3d1d6c18c502) --- UI/window-basic-main-outputs.cpp | 4 ++++ UI/window-basic-settings.cpp | 25 +++++++++++++++++-------- UI/window-basic-settings.hpp | 1 + 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 5f88ea3a4..877c559f9 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1792,6 +1792,10 @@ inline void AdvancedOutput::SetupRecording() unsigned int cy = 0; int idx = 0; + /* Hack to allow recordings without any audio tracks selected. It is no + * longer possible to select such a configuration in settings, but legacy + * configurations might still have this configured and we don't want to + * just break them. */ if (tracks == 0) tracks = config_get_int(main->Config(), "AdvOut", "TrackIndex"); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 840813889..6676a36c0 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -3886,14 +3886,8 @@ void OBSBasicSettings::SaveOutputSettings() SaveSpinBox(ui->advOutSplitFileTime, "AdvOut", "RecSplitFileTime"); SaveSpinBox(ui->advOutSplitFileSize, "AdvOut", "RecSplitFileSize"); - config_set_int( - main->Config(), "AdvOut", "RecTracks", - (ui->advOutRecTrack1->isChecked() ? (1 << 0) : 0) | - (ui->advOutRecTrack2->isChecked() ? (1 << 1) : 0) | - (ui->advOutRecTrack3->isChecked() ? (1 << 2) : 0) | - (ui->advOutRecTrack4->isChecked() ? (1 << 3) : 0) | - (ui->advOutRecTrack5->isChecked() ? (1 << 4) : 0) | - (ui->advOutRecTrack6->isChecked() ? (1 << 5) : 0)); + config_set_int(main->Config(), "AdvOut", "RecTracks", + AdvOutGetSelectedAudioTracks()); config_set_int(main->Config(), "AdvOut", "FLVTrack", CurrentFLVTrack()); @@ -4237,6 +4231,10 @@ bool OBSBasicSettings::QueryAllowedToClose() ui->advOutRecAEncoder->currentIndex() == -1 || ui->advOutAEncoder->currentIndex() == -1) invalidEncoder = true; + + QString format = ui->advOutRecFormat->currentData().toString(); + if (AdvOutGetSelectedAudioTracks() == 0 && format != "flv") + invalidTracks = true; } if (invalidEncoder) { @@ -6179,6 +6177,17 @@ int OBSBasicSettings::SimpleOutGetSelectedAudioTracks() return tracks; } +int OBSBasicSettings::AdvOutGetSelectedAudioTracks() +{ + int tracks = (ui->advOutRecTrack1->isChecked() ? (1 << 0) : 0) | + (ui->advOutRecTrack2->isChecked() ? (1 << 1) : 0) | + (ui->advOutRecTrack3->isChecked() ? (1 << 2) : 0) | + (ui->advOutRecTrack4->isChecked() ? (1 << 3) : 0) | + (ui->advOutRecTrack5->isChecked() ? (1 << 4) : 0) | + (ui->advOutRecTrack6->isChecked() ? (1 << 5) : 0); + return tracks; +} + /* Using setEditable(true) on a QComboBox when there's a custom style in use * does not work properly, so instead completely recreate the widget, which * seems to work fine. */ diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 03c399830..dd466f373 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -376,6 +376,7 @@ private: int CurrentFLVTrack(); int SimpleOutGetSelectedAudioTracks(); + int AdvOutGetSelectedAudioTracks(); OBSService GetStream1Service();