UI: Add multi-track FFmpeg output support

This commit is contained in:
pkviet 2018-10-04 20:06:54 -07:00 committed by jp9000
parent 340fb9d669
commit 047e586eaf
4 changed files with 46 additions and 26 deletions

View File

@ -2247,7 +2247,7 @@
<number>0</number>
</property>
<item>
<widget class="QRadioButton" name="advOutFFTrack1">
<widget class="QCheckBox" name="advOutFFTrack1">
<property name="text">
<string notr="true">1</string>
</property>
@ -2257,35 +2257,35 @@
</widget>
</item>
<item>
<widget class="QRadioButton" name="advOutFFTrack2">
<widget class="QCheckBox" name="advOutFFTrack2">
<property name="text">
<string notr="true">2</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="advOutFFTrack3">
<widget class="QCheckBox" name="advOutFFTrack3">
<property name="text">
<string notr="true">3</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="advOutFFTrack4">
<widget class="QCheckBox" name="advOutFFTrack4">
<property name="text">
<string notr="true">4</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="advOutFFTrack5">
<widget class="QCheckBox" name="advOutFFTrack5">
<property name="text">
<string notr="true">5</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="advOutFFTrack6">
<widget class="QCheckBox" name="advOutFFTrack6">
<property name="text">
<string notr="true">6</string>
</property>

View File

@ -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);

View File

@ -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);

View File

@ -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");