UI: Add multi-track FFmpeg output support
This commit is contained in:
parent
340fb9d669
commit
047e586eaf
@ -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>
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user