|
@@ -442,8 +442,8 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
|
|
HookWidget(ui->simpleRBMegsMax, SCROLL_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutEncoder, COMBO_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutAEncoder, COMBO_CHANGED, OUTPUTS_CHANGED);
|
|
|
- HookWidget(ui->advOutUseRescale, CHECK_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutRescale, CBEDIT_CHANGED, OUTPUTS_CHANGED);
|
|
|
+ HookWidget(ui->advOutRescaleFilter, COMBO_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutTrack1, CHECK_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutTrack2, CHECK_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutTrack3, CHECK_CHANGED, OUTPUTS_CHANGED);
|
|
@@ -462,8 +462,8 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
|
|
HookWidget(ui->advOutRecFormat, COMBO_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutRecEncoder, COMBO_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutRecAEncoder, COMBO_CHANGED, OUTPUTS_CHANGED);
|
|
|
- HookWidget(ui->advOutRecUseRescale, CHECK_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutRecRescale, CBEDIT_CHANGED, OUTPUTS_CHANGED);
|
|
|
+ HookWidget(ui->advOutRecRescaleFilter, COMBO_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutMuxCustom, EDIT_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutSplitFile, CHECK_CHANGED, OUTPUTS_CHANGED);
|
|
|
HookWidget(ui->advOutSplitFileType, COMBO_CHANGED, OUTPUTS_CHANGED);
|
|
@@ -825,6 +825,35 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
|
|
connect(ui->advRBSecMax, &QSpinBox::valueChanged, this,
|
|
|
&OBSBasicSettings::AdvReplayBufferChanged);
|
|
|
|
|
|
+ // GPU scaling filters
|
|
|
+ auto addScaleFilter = [&](const char *string, int value) -> void {
|
|
|
+ ui->advOutRescaleFilter->addItem(QTStr(string), value);
|
|
|
+ ui->advOutRecRescaleFilter->addItem(QTStr(string), value);
|
|
|
+ };
|
|
|
+
|
|
|
+ addScaleFilter("Basic.Settings.Output.Adv.Rescale.Disabled",
|
|
|
+ OBS_SCALE_DISABLE);
|
|
|
+ addScaleFilter("Basic.Settings.Video.DownscaleFilter.Bilinear",
|
|
|
+ OBS_SCALE_BILINEAR);
|
|
|
+ addScaleFilter("Basic.Settings.Video.DownscaleFilter.Area",
|
|
|
+ OBS_SCALE_AREA);
|
|
|
+ addScaleFilter("Basic.Settings.Video.DownscaleFilter.Bicubic",
|
|
|
+ OBS_SCALE_BICUBIC);
|
|
|
+ addScaleFilter("Basic.Settings.Video.DownscaleFilter.Lanczos",
|
|
|
+ OBS_SCALE_LANCZOS);
|
|
|
+
|
|
|
+ auto connectScaleFilter = [&](QComboBox *filter,
|
|
|
+ QComboBox *res) -> void {
|
|
|
+ connect(filter, &QComboBox::currentIndexChanged, this,
|
|
|
+ [this, res, filter](int) {
|
|
|
+ res->setEnabled(filter->currentData() !=
|
|
|
+ OBS_SCALE_DISABLE);
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ connectScaleFilter(ui->advOutRescaleFilter, ui->advOutRescale);
|
|
|
+ connectScaleFilter(ui->advOutRecRescaleFilter, ui->advOutRecRescale);
|
|
|
+
|
|
|
// Get Bind to IP Addresses
|
|
|
obs_properties_t *ppts = obs_get_output_properties("rtmp_output");
|
|
|
obs_property_t *p = obs_properties_get(ppts, "bind_ip");
|
|
@@ -2040,16 +2069,20 @@ inline bool allowsMultiTrack(const char *protocol)
|
|
|
|
|
|
void OBSBasicSettings::LoadAdvOutputStreamingSettings()
|
|
|
{
|
|
|
- bool rescale = config_get_bool(main->Config(), "AdvOut", "Rescale");
|
|
|
const char *rescaleRes =
|
|
|
config_get_string(main->Config(), "AdvOut", "RescaleRes");
|
|
|
+ int rescaleFilter =
|
|
|
+ config_get_int(main->Config(), "AdvOut", "RescaleFilter");
|
|
|
int trackIndex = config_get_int(main->Config(), "AdvOut", "TrackIndex");
|
|
|
int audioMixes = config_get_int(main->Config(), "AdvOut",
|
|
|
"StreamMultiTrackAudioMixes");
|
|
|
- ui->advOutUseRescale->setChecked(rescale);
|
|
|
- ui->advOutRescale->setEnabled(rescale);
|
|
|
+ ui->advOutRescale->setEnabled(rescaleFilter != OBS_SCALE_DISABLE);
|
|
|
ui->advOutRescale->setCurrentText(rescaleRes);
|
|
|
|
|
|
+ int idx = ui->advOutRescaleFilter->findData(rescaleFilter);
|
|
|
+ if (idx != -1)
|
|
|
+ ui->advOutRescaleFilter->setCurrentIndex(idx);
|
|
|
+
|
|
|
QStringList specList = QTStr("FilenameFormatting.completer")
|
|
|
.split(QRegularExpression("\n"));
|
|
|
QCompleter *specCompleter = new QCompleter(specList);
|
|
@@ -2176,9 +2209,10 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings()
|
|
|
config_get_string(main->Config(), "AdvOut", "RecFilePath");
|
|
|
bool noSpace = config_get_bool(main->Config(), "AdvOut",
|
|
|
"RecFileNameWithoutSpace");
|
|
|
- bool rescale = config_get_bool(main->Config(), "AdvOut", "RecRescale");
|
|
|
const char *rescaleRes =
|
|
|
config_get_string(main->Config(), "AdvOut", "RecRescaleRes");
|
|
|
+ int rescaleFilter =
|
|
|
+ config_get_int(main->Config(), "AdvOut", "RecRescaleFilter");
|
|
|
const char *muxCustom =
|
|
|
config_get_string(main->Config(), "AdvOut", "RecMuxerCustom");
|
|
|
int tracks = config_get_int(main->Config(), "AdvOut", "RecTracks");
|
|
@@ -2196,11 +2230,13 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings()
|
|
|
ui->advOutRecType->setCurrentIndex(typeIndex);
|
|
|
ui->advOutRecPath->setText(path);
|
|
|
ui->advOutNoSpace->setChecked(noSpace);
|
|
|
- ui->advOutRecUseRescale->setChecked(rescale);
|
|
|
ui->advOutRecRescale->setCurrentText(rescaleRes);
|
|
|
+ int idx = ui->advOutRecRescaleFilter->findData(rescaleFilter);
|
|
|
+ if (idx != -1)
|
|
|
+ ui->advOutRecRescaleFilter->setCurrentIndex(idx);
|
|
|
ui->advOutMuxCustom->setText(muxCustom);
|
|
|
|
|
|
- int idx = ui->advOutRecFormat->findData(format);
|
|
|
+ idx = ui->advOutRecFormat->findData(format);
|
|
|
ui->advOutRecFormat->setCurrentIndex(idx);
|
|
|
|
|
|
ui->advOutRecTrack1->setChecked(tracks & (1 << 0));
|
|
@@ -3855,8 +3891,8 @@ void OBSBasicSettings::SaveOutputSettings()
|
|
|
|
|
|
SaveComboData(ui->advOutEncoder, "AdvOut", "Encoder");
|
|
|
SaveComboData(ui->advOutAEncoder, "AdvOut", "AudioEncoder");
|
|
|
- SaveCheckBox(ui->advOutUseRescale, "AdvOut", "Rescale");
|
|
|
SaveCombo(ui->advOutRescale, "AdvOut", "RescaleRes");
|
|
|
+ SaveComboData(ui->advOutRescaleFilter, "AdvOut", "RescaleFilter");
|
|
|
SaveTrackIndex(main->Config(), "AdvOut", "TrackIndex", ui->advOutTrack1,
|
|
|
ui->advOutTrack2, ui->advOutTrack3, ui->advOutTrack4,
|
|
|
ui->advOutTrack5, ui->advOutTrack6);
|
|
@@ -3872,8 +3908,8 @@ void OBSBasicSettings::SaveOutputSettings()
|
|
|
SaveComboData(ui->advOutRecFormat, "AdvOut", "RecFormat2");
|
|
|
SaveComboData(ui->advOutRecEncoder, "AdvOut", "RecEncoder");
|
|
|
SaveComboData(ui->advOutRecAEncoder, "AdvOut", "RecAudioEncoder");
|
|
|
- SaveCheckBox(ui->advOutRecUseRescale, "AdvOut", "RecRescale");
|
|
|
SaveCombo(ui->advOutRecRescale, "AdvOut", "RecRescaleRes");
|
|
|
+ SaveComboData(ui->advOutRecRescaleFilter, "AdvOut", "RecRescaleFilter");
|
|
|
SaveEdit(ui->advOutMuxCustom, "AdvOut", "RecMuxerCustom");
|
|
|
SaveCheckBox(ui->advOutSplitFile, "AdvOut", "RecSplitFile");
|
|
|
config_set_string(
|
|
@@ -4406,7 +4442,6 @@ void OBSBasicSettings::on_advOutRecEncoder_currentIndexChanged(int idx)
|
|
|
}
|
|
|
|
|
|
if (idx <= 0) {
|
|
|
- ui->advOutRecUseRescale->setChecked(false);
|
|
|
ui->advOutRecUseRescale->setVisible(false);
|
|
|
ui->advOutRecRescaleContainer->setVisible(false);
|
|
|
ui->advOutRecEncoderProps->setVisible(false);
|