diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui
index 9aaf6249b..2e18777d2 100644
--- a/UI/forms/OBSBasicSettings.ui
+++ b/UI/forms/OBSBasicSettings.ui
@@ -2247,7 +2247,7 @@
0
-
-
+
1
@@ -2257,35 +2257,35 @@
-
-
+
2
-
-
+
3
-
-
+
4
-
-
+
5
-
-
+
6
diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp
index 2f9bfa834..29f27a39c 100644
--- a/UI/window-basic-main-outputs.cpp
+++ b/UI/window-basic-main-outputs.cpp
@@ -1302,8 +1302,8 @@ inline void AdvancedOutput::SetupFFmpeg()
"FFVCustom");
int aBitrate = config_get_int(main->Config(), "AdvOut",
"FFABitrate");
- int aTrack = config_get_int(main->Config(), "AdvOut",
- "FFAudioTrack");
+ int aMixes = config_get_int(main->Config(), "AdvOut",
+ "FFAudioMixes");
const char *aEncoder = config_get_string(main->Config(), "AdvOut",
"FFAEncoder");
int aEncoderId = config_get_int(main->Config(), "AdvOut",
@@ -1337,7 +1337,7 @@ inline void AdvancedOutput::SetupFFmpeg()
}
}
- obs_output_set_mixer(fileOutput, aTrack - 1);
+ obs_output_set_mixers(fileOutput, aMixes);
obs_output_set_media(fileOutput, obs_get_video(), obs_get_audio());
obs_output_update(fileOutput, settings);
diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp
index ab1520094..2242e9d36 100644
--- a/UI/window-basic-main.cpp
+++ b/UI/window-basic-main.cpp
@@ -1115,6 +1115,21 @@ bool OBSBasic::InitBasicConfigDefaults()
cy = 1080;
}
+ bool changed = false;
+
+ /* ----------------------------------------------------- */
+ /* move over old FFmpeg track settings */
+ if (config_has_user_value(basicConfig, "AdvOut", "FFAudioTrack") &&
+ !config_has_user_value(basicConfig, "AdvOut", "Pre22.1Settings")) {
+
+ int track = (int)config_get_int(basicConfig, "AdvOut",
+ "FFAudioTrack");
+ config_set_int(basicConfig, "AdvOut", "FFAudioMixes",
+ 1LL << (track - 1));
+ config_set_bool(basicConfig, "AdvOut", "Pre22.1Settings", true);
+ changed = true;
+ }
+
/* ----------------------------------------------------- */
/* move over mixer values in advanced if older config */
if (config_has_user_value(basicConfig, "AdvOut", "RecTrackIndex") &&
@@ -1125,11 +1140,16 @@ bool OBSBasic::InitBasicConfigDefaults()
track = 1ULL << (track - 1);
config_set_uint(basicConfig, "AdvOut", "RecTracks", track);
config_remove_value(basicConfig, "AdvOut", "RecTrackIndex");
- config_save_safe(basicConfig, "tmp", nullptr);
+ changed = true;
}
/* ----------------------------------------------------- */
+ if (changed)
+ config_save_safe(basicConfig, "tmp", nullptr);
+
+ /* ----------------------------------------------------- */
+
config_set_default_string(basicConfig, "Output", "Mode", "Simple");
config_set_default_string(basicConfig, "SimpleOutput", "FilePath",
@@ -1186,7 +1206,7 @@ bool OBSBasic::InitBasicConfigDefaults()
config_set_default_bool (basicConfig, "AdvOut", "FFIgnoreCompat",
false);
config_set_default_uint (basicConfig, "AdvOut", "FFABitrate", 160);
- config_set_default_uint (basicConfig, "AdvOut", "FFAudioTrack", 1);
+ config_set_default_uint (basicConfig, "AdvOut", "FFAudioMixes", 1);
config_set_default_uint (basicConfig, "AdvOut", "Track1Bitrate", 160);
config_set_default_uint (basicConfig, "AdvOut", "Track2Bitrate", 160);
diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp
index 8d7441730..6a8a5cbc4 100644
--- a/UI/window-basic-settings.cpp
+++ b/UI/window-basic-settings.cpp
@@ -1774,8 +1774,8 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings()
"FFVCustom");
int audioBitrate = config_get_int(main->Config(), "AdvOut",
"FFABitrate");
- int audioTrack = config_get_int(main->Config(), "AdvOut",
- "FFAudioTrack");
+ int audioMixes = config_get_int(main->Config(), "AdvOut",
+ "FFAudioMixes");
const char *aEncoder = config_get_string(main->Config(), "AdvOut",
"FFAEncoder");
int aEncoderId = config_get_int(main->Config(), "AdvOut",
@@ -1801,14 +1801,12 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings()
SelectEncoder(ui->advOutFFAEncoder, aEncoder, aEncoderId);
ui->advOutFFACfg->setText(aEncCustom);
- switch (audioTrack) {
- case 1: ui->advOutFFTrack1->setChecked(true); break;
- case 2: ui->advOutFFTrack2->setChecked(true); break;
- case 3: ui->advOutFFTrack3->setChecked(true); break;
- case 4: ui->advOutFFTrack4->setChecked(true); break;
- case 5: ui->advOutFFTrack5->setChecked(true); break;
- case 6: ui->advOutFFTrack6->setChecked(true); break;
- }
+ ui->advOutFFTrack1->setChecked(audioMixes & (1 << 0));
+ ui->advOutFFTrack2->setChecked(audioMixes & (1 << 1));
+ ui->advOutFFTrack3->setChecked(audioMixes & (1 << 2));
+ ui->advOutFFTrack4->setChecked(audioMixes & (1 << 3));
+ ui->advOutFFTrack5->setChecked(audioMixes & (1 << 4));
+ ui->advOutFFTrack6->setChecked(audioMixes & (1 << 5));
}
void OBSBasicSettings::LoadAdvOutputAudioSettings()
@@ -3133,11 +3131,13 @@ void OBSBasicSettings::SaveOutputSettings()
SaveSpinBox(ui->advOutFFABitrate, "AdvOut", "FFABitrate");
SaveEncoder(ui->advOutFFAEncoder, "AdvOut", "FFAEncoder");
SaveEdit(ui->advOutFFACfg, "AdvOut", "FFACustom");
- SaveTrackIndex(main->Config(), "AdvOut", "FFAudioTrack",
- ui->advOutFFTrack1, ui->advOutFFTrack2,
- ui->advOutFFTrack3, ui->advOutFFTrack4,
- ui->advOutFFTrack5, ui->advOutFFTrack6);
-
+ config_set_int(main->Config(), "AdvOut", "FFAudioMixes",
+ (ui->advOutFFTrack1->isChecked() ? (1 << 0) : 0) |
+ (ui->advOutFFTrack2->isChecked() ? (1 << 1) : 0) |
+ (ui->advOutFFTrack3->isChecked() ? (1 << 2) : 0) |
+ (ui->advOutFFTrack4->isChecked() ? (1 << 3) : 0) |
+ (ui->advOutFFTrack5->isChecked() ? (1 << 4) : 0) |
+ (ui->advOutFFTrack6->isChecked() ? (1 << 5) : 0));
SaveCombo(ui->advOutTrack1Bitrate, "AdvOut", "Track1Bitrate");
SaveCombo(ui->advOutTrack2Bitrate, "AdvOut", "Track2Bitrate");
SaveCombo(ui->advOutTrack3Bitrate, "AdvOut", "Track3Bitrate");