libobs,UI: Support HLG nominal peak level

HLG output uses MovieLabs-recommended procedure.

- If peak luminance is greater than 1000, use maxRGB EETF to 1000.
- Otherwise, don't tonemap.
- Then use normal HLG conversion procedure with gamma 1.2 (1000 nits).
This commit is contained in:
jpark37
2022-04-10 12:31:08 -07:00
committed by Jim
parent 93fe82d1ce
commit 338608bd67
12 changed files with 148 additions and 32 deletions

View File

@@ -537,6 +537,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->colorSpace, COMBO_CHANGED, ADV_CHANGED);
HookWidget(ui->colorRange, COMBO_CHANGED, ADV_CHANGED);
HookWidget(ui->sdrWhiteLevel, SCROLL_CHANGED, ADV_CHANGED);
HookWidget(ui->hdrNominalPeakLevel, SCROLL_CHANGED, ADV_CHANGED);
HookWidget(ui->disableOSXVSync, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->resetOSXVSync, CHECK_CHANGED, ADV_CHANGED);
if (obs_audio_monitoring_available())
@@ -2596,6 +2597,8 @@ void OBSBasicSettings::LoadAdvancedSettings()
config_get_string(main->Config(), "Video", "ColorRange");
uint32_t sdrWhiteLevel = (uint32_t)config_get_uint(
main->Config(), "Video", "SdrWhiteLevel");
uint32_t hdrNominalPeakLevel = (uint32_t)config_get_uint(
main->Config(), "Video", "HdrNominalPeakLevel");
QString monDevName;
QString monDevId;
@@ -2670,6 +2673,7 @@ void OBSBasicSettings::LoadAdvancedSettings()
SetComboByValue(ui->colorSpace, videoColorSpace);
SetComboByValue(ui->colorRange, videoColorRange);
ui->sdrWhiteLevel->setValue(sdrWhiteLevel);
ui->hdrNominalPeakLevel->setValue(hdrNominalPeakLevel);
if (!SetComboByValue(ui->bindToIP, bindIP))
SetInvalidValue(ui->bindToIP, bindIP, bindIP);
@@ -3376,6 +3380,7 @@ void OBSBasicSettings::SaveAdvancedSettings()
SaveComboData(ui->colorSpace, "Video", "ColorSpace");
SaveComboData(ui->colorRange, "Video", "ColorRange");
SaveSpinBox(ui->sdrWhiteLevel, "Video", "SdrWhiteLevel");
SaveSpinBox(ui->hdrNominalPeakLevel, "Video", "HdrNominalPeakLevel");
if (obs_audio_monitoring_available()) {
SaveCombo(ui->monitoringDevice, "Audio",
"MonitoringDeviceName");