diff --git a/obs/data/locale/en-US.ini b/obs/data/locale/en-US.ini
index 19a0c9eb2..778a0cbf0 100644
--- a/obs/data/locale/en-US.ini
+++ b/obs/data/locale/en-US.ini
@@ -298,6 +298,15 @@ Basic.Settings.Audio.AuxDevice="Mic/Auxiliary Audio Device"
Basic.Settings.Audio.AuxDevice2="Mic/Auxiliary Audio Device 2"
Basic.Settings.Audio.AuxDevice3="Mic/Auxiliary Audio Device 3"
+# basic mode 'advanced' settings
+Basic.Settings.Advanced="Advanced"
+Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffering Time"
+Basic.Settings.Advanced.Video.ColorFormat="Color Format"
+Basic.Settings.Advanced.Video.ColorSpace="YUV Color Space"
+Basic.Settings.Advanced.Video.ColorRange="YUV Color Range"
+Basic.Settings.Advanced.Video.ColorRange.Partial="Partial"
+Basic.Settings.Advanced.Video.ColorRange.Full="Full"
+
# advanced audio properties
Basic.AdvAudio="Advanced Audio Properties"
Basic.AdvAudio.Name="Name"
diff --git a/obs/forms/OBSBasicSettings.ui b/obs/forms/OBSBasicSettings.ui
index 96593bae9..1b5982ece 100644
--- a/obs/forms/OBSBasicSettings.ui
+++ b/obs/forms/OBSBasicSettings.ui
@@ -87,6 +87,15 @@
:/settings/images/settings/video-display-3.png:/settings/images/settings/video-display-3.png
+ -
+
+ Basic.Settings.Advanced
+
+
+
+ :/settings/images/settings/advanced.png:/settings/images/settings/advanced.png
+
+
-
@@ -2287,6 +2296,206 @@
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Plain
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 609
+ 553
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 9
+
+
-
+
+
+
-
+
+
+ Basic.Settings.Audio
+
+
+
+ QFormLayout::AllNonFixedFieldsGrow
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
-
+
+
+
+ 170
+ 0
+
+
+
+ Basic.Settings.Advanced.Audio.BufferingTime
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ 100
+
+
+ 10000
+
+
+ 1000
+
+
+
+
+
+
+ -
+
+
+ Basic.Settings.Video
+
+
+
+ QFormLayout::AllNonFixedFieldsGrow
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
-
+
+
+ false
+
+
+
+ 170
+ 0
+
+
+
+ Basic.Settings.Advanced.Video.ColorFormat
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ false
+
+
-
+
+ NV12
+
+
+ -
+
+ I420
+
+
+ -
+
+ RGB
+
+
+
+
+ -
+
+
+ Basic.Settings.Advanced.Video.ColorRange
+
+
+
+ -
+
+
+ -
+
+
+ Basic.Settings.Advanced.Video.ColorSpace
+
+
+
+ -
+
+
-
+
+ 709
+
+
+ -
+
+ 601
+
+
+
+
+
+
+
+ -
+
+
+ color: rgb(255, 0, 4);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/obs/forms/images/settings/advanced.png b/obs/forms/images/settings/advanced.png
new file mode 100644
index 000000000..e28303ccf
Binary files /dev/null and b/obs/forms/images/settings/advanced.png differ
diff --git a/obs/forms/obs.qrc b/obs/forms/obs.qrc
index 0dfe70e1e..c50846d0b 100644
--- a/obs/forms/obs.qrc
+++ b/obs/forms/obs.qrc
@@ -11,6 +11,7 @@
images/obs.png
+ images/settings/advanced.png
images/settings/network.png
images/settings/video-display-3.png
images/settings/decibel_audio_player.png
diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp
index 4b1b9c421..2205b05d4 100644
--- a/obs/window-basic-settings.cpp
+++ b/obs/window-basic-settings.cpp
@@ -121,6 +121,8 @@ void OBSBasicSettings::HookWidget(QWidget *widget, const char *signal,
#define VIDEO_RESTART SLOT(VideoChangedRestart())
#define VIDEO_RES SLOT(VideoChangedResolution())
#define VIDEO_CHANGED SLOT(VideoChanged())
+#define ADV_CHANGED SLOT(AdvancedChanged())
+#define ADV_RESTART SLOT(AdvancedChangedRestart())
OBSBasicSettings::OBSBasicSettings(QWidget *parent)
: QDialog (parent),
@@ -206,12 +208,17 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->fpsInteger, SCROLL_CHANGED, VIDEO_CHANGED);
HookWidget(ui->fpsNumerator, SCROLL_CHANGED, VIDEO_CHANGED);
HookWidget(ui->fpsDenominator, SCROLL_CHANGED, VIDEO_CHANGED);
+ HookWidget(ui->audioBufferingTime, SCROLL_CHANGED, ADV_RESTART);
+ HookWidget(ui->colorFormat, COMBO_CHANGED, ADV_CHANGED);
+ HookWidget(ui->colorSpace, COMBO_CHANGED, ADV_CHANGED);
+ HookWidget(ui->colorRange, COMBO_CHANGED, ADV_CHANGED);
//Apply button disabled until change.
EnableApplyButton(false);
LoadServiceTypes();
LoadEncoderTypes();
+ LoadColorRanges();
LoadSettings(false);
}
@@ -301,6 +308,15 @@ void OBSBasicSettings::LoadEncoderTypes()
}
}
+#define CS_PARTIAL_STR QTStr("Basic.Settings.Advanced.Video.ColorRange.Partial")
+#define CS_FULL_STR QTStr("Basic.Settings.Advanced.Video.ColorRange.Full")
+
+void OBSBasicSettings::LoadColorRanges()
+{
+ ui->colorRange->addItem(CS_PARTIAL_STR, "Partial");
+ ui->colorRange->addItem(CS_FULL_STR, "Full");
+}
+
void OBSBasicSettings::LoadLanguageList()
{
const char *currentLang = App()->GetLocale();
@@ -917,6 +933,31 @@ void OBSBasicSettings::LoadAudioSettings()
loading = false;
}
+void OBSBasicSettings::LoadAdvancedSettings()
+{
+ uint32_t audioBufferingTime = config_get_uint(main->Config(),
+ "Audio", "BufferingTime");
+ const char *videoColorFormat = config_get_string(main->Config(),
+ "Video", "ColorFormat");
+ const char *videoColorSpace = config_get_string(main->Config(),
+ "Video", "ColorSpace");
+ const char *videoColorRange = config_get_string(main->Config(),
+ "Video", "ColorRange");
+
+ loading = true;
+
+ ui->audioBufferingTime->setValue(audioBufferingTime);
+ SetComboByName(ui->colorFormat, videoColorFormat);
+ SetComboByName(ui->colorSpace, videoColorSpace);
+ SetComboByValue(ui->colorRange, videoColorRange);
+
+ if (video_output_active(obs_get_video())) {
+ ui->advancedVideoContainer->setEnabled(false);
+ }
+
+ loading = false;
+}
+
void OBSBasicSettings::LoadSettings(bool changedOnly)
{
if (!changedOnly || generalChanged)
@@ -929,6 +970,8 @@ void OBSBasicSettings::LoadSettings(bool changedOnly)
LoadAudioSettings();
if (!changedOnly || videoChanged)
LoadVideoSettings();
+ if (!changedOnly || advancedChanged)
+ LoadAdvancedSettings();
}
void OBSBasicSettings::SaveGeneralSettings()
@@ -988,8 +1031,14 @@ void OBSBasicSettings::SaveVideoSettings()
SaveSpinBox(ui->fpsNumerator, "Video", "FPSNum");
SaveSpinBox(ui->fpsDenominator, "Video", "FPSDen");
SaveComboData(ui->downscaleFilter, "Video", "ScaleType");
+}
- main->ResetVideo();
+void OBSBasicSettings::SaveAdvancedSettings()
+{
+ SaveSpinBox(ui->audioBufferingTime, "Audio", "BufferingTime");
+ SaveCombo(ui->colorFormat, "Video", "ColorFormat");
+ SaveCombo(ui->colorSpace, "Video", "ColorSpace");
+ SaveComboData(ui->colorRange, "Video", "ColorRange");
}
static inline const char *OutputModeFromIdx(int idx)
@@ -1154,6 +1203,11 @@ void OBSBasicSettings::SaveSettings()
SaveAudioSettings();
if (videoChanged)
SaveVideoSettings();
+ if (advancedChanged)
+ SaveAdvancedSettings();
+
+ if (videoChanged || advancedChanged)
+ main->ResetVideo();
config_save(main->Config());
config_save(GetGlobalConfig());
@@ -1413,6 +1467,17 @@ void OBSBasicSettings::VideoChangedRestart()
}
}
+void OBSBasicSettings::AdvancedChangedRestart()
+{
+ if (!loading) {
+ advancedChanged = true;
+ ui->advancedMsg->setText(
+ QTStr("Basic.Settings.ProgramRestart"));
+ sender()->setProperty("changed", QVariant(true));
+ EnableApplyButton(true);
+ }
+}
+
void OBSBasicSettings::VideoChangedResolution()
{
if (!loading && ValidResolutions(ui.get())) {
@@ -1430,3 +1495,12 @@ void OBSBasicSettings::VideoChanged()
EnableApplyButton(true);
}
}
+
+void OBSBasicSettings::AdvancedChanged()
+{
+ if (!loading) {
+ advancedChanged = true;
+ sender()->setProperty("changed", QVariant(true));
+ EnableApplyButton(true);
+ }
+}
diff --git a/obs/window-basic-settings.hpp b/obs/window-basic-settings.hpp
index 4180dbd59..f0fe34016 100644
--- a/obs/window-basic-settings.hpp
+++ b/obs/window-basic-settings.hpp
@@ -42,6 +42,7 @@ private:
bool outputsChanged = false;
bool audioChanged = false;
bool videoChanged = false;
+ bool advancedChanged = false;
int pageIndex = 0;
bool loading = true;
@@ -63,7 +64,7 @@ private:
inline bool Changed() const
{
return generalChanged || outputsChanged || stream1Changed ||
- audioChanged || videoChanged;
+ audioChanged || videoChanged || advancedChanged;
}
inline void EnableApplyButton(bool en)
@@ -78,6 +79,7 @@ private:
outputsChanged = false;
audioChanged = false;
videoChanged = false;
+ advancedChanged= false;
EnableApplyButton(false);
}
@@ -87,12 +89,14 @@ private:
void LoadServiceTypes();
void LoadEncoderTypes();
+ void LoadColorRanges();
void LoadGeneralSettings();
void LoadStream1Settings();
void LoadOutputSettings();
void LoadAudioSettings();
void LoadVideoSettings();
+ void LoadAdvancedSettings();
void LoadSettings(bool changedOnly);
OBSPropertiesView *CreateEncoderPropertyView(const char *encoder,
@@ -128,6 +132,7 @@ private:
void SaveOutputSettings();
void SaveAudioSettings();
void SaveVideoSettings();
+ void SaveAdvancedSettings();
void SaveSettings();
private slots:
@@ -154,6 +159,8 @@ private slots:
void VideoChanged();
void VideoChangedResolution();
void VideoChangedRestart();
+ void AdvancedChanged();
+ void AdvancedChangedRestart();
protected:
virtual void closeEvent(QCloseEvent *event);