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