From 047e586eafa43b139a4a605985592be75570fd61 Mon Sep 17 00:00:00 2001 From: pkviet Date: Thu, 4 Oct 2018 20:06:54 -0700 Subject: [PATCH] UI: Add multi-track FFmpeg output support --- UI/forms/OBSBasicSettings.ui | 12 ++++++------ UI/window-basic-main-outputs.cpp | 6 +++--- UI/window-basic-main.cpp | 24 ++++++++++++++++++++++-- UI/window-basic-settings.cpp | 30 +++++++++++++++--------------- 4 files changed, 46 insertions(+), 26 deletions(-) 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");