|
@@ -387,6 +387,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
|
|
HookWidget(ui->colorRange, COMBO_CHANGED, ADV_CHANGED);
|
|
|
HookWidget(ui->disableOSXVSync, CHECK_CHANGED, ADV_CHANGED);
|
|
|
HookWidget(ui->resetOSXVSync, CHECK_CHANGED, ADV_CHANGED);
|
|
|
+#if defined(_WIN32) || defined(__APPLE__)
|
|
|
+ HookWidget(ui->monitoringDevice, COMBO_CHANGED, ADV_CHANGED);
|
|
|
+#endif
|
|
|
HookWidget(ui->filenameFormatting, EDIT_CHANGED, ADV_CHANGED);
|
|
|
HookWidget(ui->overwriteIfExists, CHECK_CHANGED, ADV_CHANGED);
|
|
|
HookWidget(ui->simpleRBPrefix, EDIT_CHANGED, ADV_CHANGED);
|
|
@@ -400,6 +403,15 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
|
|
HookWidget(ui->processPriority, COMBO_CHANGED, ADV_CHANGED);
|
|
|
HookWidget(ui->bindToIP, COMBO_CHANGED, ADV_CHANGED);
|
|
|
|
|
|
+#if !defined(_WIN32) && !defined(__APPLE__)
|
|
|
+ delete ui->monitoringDevice;
|
|
|
+ delete ui->monitoringDeviceLabel;
|
|
|
+ delete ui->advAudioGroupBox;
|
|
|
+ ui->monitoringDevice = nullptr;
|
|
|
+ ui->monitoringDeviceLabel = nullptr;
|
|
|
+ ui->advAudioGroupBox = nullptr;
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef _WIN32
|
|
|
uint32_t winVer = GetWindowsVersion();
|
|
|
if (winVer > 0 && winVer < 0x602) {
|
|
@@ -531,6 +543,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
|
|
|
|
|
|
FillSimpleRecordingValues();
|
|
|
FillSimpleStreamingValues();
|
|
|
+#if defined(_WIN32) || defined(__APPLE__)
|
|
|
+ FillAudioMonitoringDevices();
|
|
|
+#endif
|
|
|
|
|
|
connect(ui->simpleOutRecQuality, SIGNAL(currentIndexChanged(int)),
|
|
|
this, SLOT(SimpleRecordingQualityChanged()));
|
|
@@ -1918,6 +1933,12 @@ void OBSBasicSettings::LoadAdvancedSettings()
|
|
|
"Video", "ColorSpace");
|
|
|
const char *videoColorRange = config_get_string(main->Config(),
|
|
|
"Video", "ColorRange");
|
|
|
+#if defined(_WIN32) || defined(__APPLE__)
|
|
|
+ const char *monDevName = config_get_string(main->Config(), "Audio",
|
|
|
+ "MonitoringDeviceName");
|
|
|
+ const char *monDevId = config_get_string(main->Config(), "Audio",
|
|
|
+ "MonitoringDeviceId");
|
|
|
+#endif
|
|
|
bool enableDelay = config_get_bool(main->Config(), "Output",
|
|
|
"DelayEnable");
|
|
|
int delaySec = config_get_int(main->Config(), "Output",
|
|
@@ -1940,11 +1961,31 @@ void OBSBasicSettings::LoadAdvancedSettings()
|
|
|
"RecRBPrefix");
|
|
|
const char *rbSuffix = config_get_string(main->Config(), "SimpleOutput",
|
|
|
"RecRBSuffix");
|
|
|
+ int idx;
|
|
|
|
|
|
loading = true;
|
|
|
|
|
|
LoadRendererList();
|
|
|
|
|
|
+#if defined(_WIN32) || defined(__APPLE__)
|
|
|
+ QComboBox *cb = ui->monitoringDevice;
|
|
|
+ idx = cb->findData(monDevId);
|
|
|
+ if (idx == -1) {
|
|
|
+ cb->insertItem(0, monDevName, monDevId);
|
|
|
+
|
|
|
+ QStandardItemModel *model =
|
|
|
+ dynamic_cast<QStandardItemModel*>(cb->model());
|
|
|
+ if (!model)
|
|
|
+ return;
|
|
|
+
|
|
|
+ QStandardItem *item = model->item(0);
|
|
|
+ item->setFlags(Qt::NoItemFlags);
|
|
|
+
|
|
|
+ idx = 0;
|
|
|
+ }
|
|
|
+ cb->setCurrentIndex(idx);
|
|
|
+#endif
|
|
|
+
|
|
|
ui->filenameFormatting->setText(filename);
|
|
|
ui->overwriteIfExists->setChecked(overwriteIfExists);
|
|
|
ui->simpleRBPrefix->setText(rbPrefix);
|
|
@@ -1979,7 +2020,7 @@ void OBSBasicSettings::LoadAdvancedSettings()
|
|
|
#elif _WIN32
|
|
|
const char *processPriority = config_get_string(App()->GlobalConfig(),
|
|
|
"General", "ProcessPriority");
|
|
|
- int idx = ui->processPriority->findData(processPriority);
|
|
|
+ idx = ui->processPriority->findData(processPriority);
|
|
|
if (idx == -1)
|
|
|
idx = ui->processPriority->findData("Normal");
|
|
|
ui->processPriority->setCurrentIndex(idx);
|
|
@@ -2473,6 +2514,10 @@ void OBSBasicSettings::SaveAdvancedSettings()
|
|
|
SaveCombo(ui->colorFormat, "Video", "ColorFormat");
|
|
|
SaveCombo(ui->colorSpace, "Video", "ColorSpace");
|
|
|
SaveComboData(ui->colorRange, "Video", "ColorRange");
|
|
|
+#if defined(_WIN32) || defined(__APPLE__)
|
|
|
+ SaveCombo(ui->monitoringDevice, "Audio", "MonitoringDeviceName");
|
|
|
+ SaveComboData(ui->monitoringDevice, "Audio", "MonitoringDeviceId");
|
|
|
+#endif
|
|
|
SaveEdit(ui->filenameFormatting, "Output", "FilenameFormatting");
|
|
|
SaveEdit(ui->simpleRBPrefix, "SimpleOutput", "RecRBPrefix");
|
|
|
SaveEdit(ui->simpleRBSuffix, "SimpleOutput", "RecRBSuffix");
|
|
@@ -2484,6 +2529,13 @@ void OBSBasicSettings::SaveAdvancedSettings()
|
|
|
SaveSpinBox(ui->reconnectRetryDelay, "Output", "RetryDelay");
|
|
|
SaveSpinBox(ui->reconnectMaxRetries, "Output", "MaxRetries");
|
|
|
SaveComboData(ui->bindToIP, "Output", "BindIP");
|
|
|
+
|
|
|
+#if defined(_WIN32) || defined(__APPLE__)
|
|
|
+ obs_set_audio_monitoring_device(
|
|
|
+ QT_TO_UTF8(ui->monitoringDevice->currentText()),
|
|
|
+ QT_TO_UTF8(ui->monitoringDevice->currentData()
|
|
|
+ .toString()));
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
static inline const char *OutputModeFromIdx(int idx)
|
|
@@ -3429,6 +3481,23 @@ void OBSBasicSettings::FillSimpleStreamingValues()
|
|
|
#undef ENCODER_STR
|
|
|
}
|
|
|
|
|
|
+void OBSBasicSettings::FillAudioMonitoringDevices()
|
|
|
+{
|
|
|
+ QComboBox *cb = ui->monitoringDevice;
|
|
|
+
|
|
|
+ auto enum_devices = [] (void *param, const char *name, const char *id)
|
|
|
+ {
|
|
|
+ QComboBox *cb = (QComboBox*)param;
|
|
|
+ cb->addItem(name, id);
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+
|
|
|
+ cb->addItem(QTStr("Basic.Settings.Advanced.Audio.MonitoringDevice"
|
|
|
+ ".Default"), "default");
|
|
|
+
|
|
|
+ obs_enum_audio_monitoring_devices(enum_devices, cb);
|
|
|
+}
|
|
|
+
|
|
|
void OBSBasicSettings::SimpleRecordingQualityChanged()
|
|
|
{
|
|
|
QString qual = ui->simpleOutRecQuality->currentData().toString();
|