obs-filters: Fix HDR tonemap filter for scRGB

JXR images work now.
master
jpark37 2022-08-25 20:46:38 -07:00 committed by Jim
parent a9c68c4623
commit e5a1ef91e3
1 changed files with 19 additions and 10 deletions

View File

@ -151,8 +151,12 @@ static void hdr_tonemap_filter_render(void *data, gs_effect_t *effect)
enum gs_color_space source_space = obs_source_get_color_space(
obs_filter_get_target(filter->context),
OBS_COUNTOF(preferred_spaces), preferred_spaces);
if (source_space == GS_CS_709_EXTENDED) {
float multiplier = obs_get_video_sdr_white_level();
switch (source_space) {
case GS_CS_709_EXTENDED:
case GS_CS_709_SCRGB: {
float multiplier = (source_space == GS_CS_709_EXTENDED)
? obs_get_video_sdr_white_level()
: 80.f;
multiplier *= (filter->transform == TRANSFORM_SDR_REINHARD)
? filter->sdr_white_level_nits_i
: 0.0001f;
@ -184,7 +188,9 @@ static void hdr_tonemap_filter_render(void *data, gs_effect_t *effect)
gs_blend_state_pop();
}
} else {
break;
}
default:
obs_source_skip_video_filter(filter->context);
}
}
@ -205,13 +211,16 @@ hdr_tonemap_filter_get_color_space(void *data, size_t count,
OBS_COUNTOF(potential_spaces), potential_spaces);
enum gs_color_space space = source_space;
if ((source_space == GS_CS_709_EXTENDED) &&
(filter->transform == TRANSFORM_SDR_REINHARD)) {
space = GS_CS_SRGB;
for (size_t i = 0; i < count; ++i) {
if (preferred_spaces[i] != GS_CS_SRGB) {
space = GS_CS_SRGB_16F;
break;
switch (source_space) {
case GS_CS_709_EXTENDED:
case GS_CS_709_SCRGB:
if (filter->transform == TRANSFORM_SDR_REINHARD) {
space = GS_CS_SRGB;
for (size_t i = 0; i < count; ++i) {
if (preferred_spaces[i] != GS_CS_SRGB) {
space = GS_CS_SRGB_16F;
break;
}
}
}
}