mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-27 17:55:42 -04:00
Merge pull request #7978 from jpark37/dxgi-display-sdr-on-hdr
libobs-d3d11,win-capture: Add Force SDR for DXGI duplicator
This commit is contained in:
@@ -265,10 +265,11 @@ static void log_settings(struct duplicator_capture *capture,
|
||||
"\tmethod: %s\n"
|
||||
"\tid: %s\n"
|
||||
"\talt_id: %s\n"
|
||||
"\tsetting_id: %s",
|
||||
"\tsetting_id: %s\n"
|
||||
"\tforce SDR: %s",
|
||||
monitor, width, height, capture->capture_cursor ? "true" : "false",
|
||||
get_method_name(capture->method), capture->id, capture->alt_id,
|
||||
capture->monitor_id);
|
||||
capture->monitor_id, capture->force_sdr ? "true" : "false");
|
||||
}
|
||||
|
||||
static enum display_capture_method
|
||||
@@ -734,18 +735,32 @@ static void duplicator_capture_render(void *data, gs_effect_t *unused)
|
||||
const char *tech_name = "Draw";
|
||||
float multiplier = 1.f;
|
||||
const enum gs_color_space current_space = gs_get_color_space();
|
||||
if (gs_texture_get_color_format(texture) == GS_RGBA16F) {
|
||||
switch (current_space) {
|
||||
case GS_CS_SRGB:
|
||||
case GS_CS_SRGB_16F:
|
||||
tech_name = "DrawMultiplyTonemap";
|
||||
multiplier =
|
||||
80.f / obs_get_video_sdr_white_level();
|
||||
break;
|
||||
case GS_CS_709_EXTENDED:
|
||||
if (gs_duplicator_get_color_space(capture->duplicator) ==
|
||||
GS_CS_709_SCRGB) {
|
||||
if (capture->force_sdr) {
|
||||
tech_name = "DrawMultiply";
|
||||
multiplier =
|
||||
80.f / obs_get_video_sdr_white_level();
|
||||
const float target_nits =
|
||||
(current_space == GS_CS_709_SCRGB)
|
||||
? obs_get_video_sdr_white_level()
|
||||
: 80.f;
|
||||
multiplier = target_nits /
|
||||
gs_duplicator_get_sdr_white_level(
|
||||
capture->duplicator);
|
||||
} else {
|
||||
switch (current_space) {
|
||||
case GS_CS_SRGB:
|
||||
case GS_CS_SRGB_16F:
|
||||
tech_name = "DrawMultiplyTonemap";
|
||||
multiplier =
|
||||
80.f /
|
||||
obs_get_video_sdr_white_level();
|
||||
break;
|
||||
case GS_CS_709_EXTENDED:
|
||||
tech_name = "DrawMultiply";
|
||||
multiplier =
|
||||
80.f /
|
||||
obs_get_video_sdr_white_level();
|
||||
}
|
||||
}
|
||||
} else if (current_space == GS_CS_709_SCRGB) {
|
||||
tech_name = "DrawMultiply";
|
||||
@@ -844,9 +859,6 @@ static void update_settings_visibility(obs_properties_t *props,
|
||||
obs_property_t *p = obs_properties_get(props, "cursor");
|
||||
obs_property_set_visible(p, dxgi_options || wgc_cursor_toggle);
|
||||
|
||||
p = obs_properties_get(props, "force_sdr");
|
||||
obs_property_set_visible(p, wgc_options);
|
||||
|
||||
pthread_mutex_unlock(&capture->update_mutex);
|
||||
}
|
||||
|
||||
@@ -909,17 +921,9 @@ duplicator_capture_get_color_space(void *data, size_t count,
|
||||
capture->exports.winrt_capture_get_color_space(
|
||||
capture->capture_winrt);
|
||||
}
|
||||
} else {
|
||||
if (capture->duplicator) {
|
||||
gs_texture_t *const texture =
|
||||
gs_duplicator_get_texture(capture->duplicator);
|
||||
if (texture) {
|
||||
capture_space = (gs_texture_get_color_format(
|
||||
texture) == GS_RGBA16F)
|
||||
? GS_CS_709_EXTENDED
|
||||
: GS_CS_SRGB;
|
||||
}
|
||||
}
|
||||
} else if (capture->duplicator && !capture->force_sdr) {
|
||||
capture_space =
|
||||
gs_duplicator_get_color_space(capture->duplicator);
|
||||
}
|
||||
|
||||
enum gs_color_space space = capture_space;
|
||||
|
||||
@@ -181,9 +181,12 @@ static void log_settings(struct window_capture *wc, obs_data_t *s)
|
||||
"[window-capture: '%s'] update settings:\n"
|
||||
"\texecutable: %s\n"
|
||||
"\tmethod selected: %s\n"
|
||||
"\tmethod chosen: %s\n",
|
||||
"\tmethod chosen: %s\n"
|
||||
"\tforce SDR: %s",
|
||||
obs_source_get_name(wc->source), wc->executable,
|
||||
get_method_name(method), get_method_name(wc->method));
|
||||
get_method_name(method), get_method_name(wc->method),
|
||||
(wc->force_sdr && (wc->method == METHOD_WGC)) ? "true"
|
||||
: "false");
|
||||
blog(LOG_DEBUG, "\tclass: %s", wc->class);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user