mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-24 23:31:36 +08:00
UI: Add 'Advanced' settings section
Currently, this allows the setting of values such as: - Audio buffering time - Color format (still somewhat unsupported) - YUV color space (if a YUV format) = YUV color range (if a YUV format) More color formats will be added in the future, such as RGB and YUV 4:2:2 formats.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user