From fa22227fcab77624fd60db19aaa742ca04255083 Mon Sep 17 00:00:00 2001 From: Lukas Senionis Date: Tue, 18 Feb 2025 16:32:21 +0200 Subject: [PATCH] feat(display): expose HDR toggle workaround delay to user (#3579) --- docs/configuration.md | 11 ++++++----- src/config.cpp | 6 +++++- src/config.h | 2 +- src/display_device.cpp | 2 +- src_assets/common/assets/web/config.html | 2 +- .../tabs/audiovideo/DisplayDeviceOptions.vue | 18 ++++++++++++------ .../assets/web/public/assets/locale/en.json | 6 ++++-- 7 files changed, 30 insertions(+), 17 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 1f31d74c..315ea7e2 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1156,14 +1156,15 @@ editing the `conf` file in a text editor. Use the examples as reference. -### dd_wa_hdr_toggle +### dd_wa_hdr_toggle_delay @@ -1171,13 +1172,13 @@ editing the `conf` file in a text editor. Use the examples as reference.
Description - When using virtual display device as for streaming, it might display incorrect (high-contrast) color. - With this option enabled, Sunshine will try to mitigate this issue. + When using virtual display device (VDD) for streaming, it might incorrectly display HDR color. Sunshine can try to mitigate this issue, by turning HDR off and then on again.
+ If the value is set to 0, the workaround is disabled (default). If the value is between 0 and 3000 milliseconds, Sunshine will turn off HDR, wait for the specified amount of time and then turn HDR on again. The recommended delay time is around 500 milliseconds in most cases.
+ DO NOT use this workaround unless you actually have issues with HDR as it directly impacts stream start time! @note{This option works independently of [dd_hdr_option](#dd_hdr_option)} @note{Applies to Windows only.}
Default @code{} - disabled + 0 @endcode
Example @code{} - dd_wa_hdr_toggle = enabled + dd_wa_hdr_toggle_delay = 500 @endcode
diff --git a/src/config.cpp b/src/config.cpp index e97de9f5..54eb5236 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -1136,7 +1136,11 @@ namespace config { } bool_f(vars, "dd_config_revert_on_disconnect", video.dd.config_revert_on_disconnect); generic_f(vars, "dd_mode_remapping", video.dd.mode_remapping, dd::mode_remapping_from_view); - bool_f(vars, "dd_wa_hdr_toggle", video.dd.wa.hdr_toggle); + { + int value = 0; + int_between_f(vars, "dd_wa_hdr_toggle_delay", value, {0, 3000}); + video.dd.wa.hdr_toggle_delay = std::chrono::milliseconds {value}; + } int_between_f(vars, "min_fps_factor", video.min_fps_factor, {1, 3}); int_f(vars, "max_bitrate", video.max_bitrate); diff --git a/src/config.h b/src/config.h index fe6629da..05cec9e8 100644 --- a/src/config.h +++ b/src/config.h @@ -84,7 +84,7 @@ namespace config { struct dd_t { struct workarounds_t { - bool hdr_toggle; ///< Specify whether to apply HDR high-contrast color workaround. + std::chrono::milliseconds hdr_toggle_delay; ///< Specify whether to apply HDR high-contrast color workaround and what delay to use. }; enum class config_option_e { diff --git a/src/display_device.cpp b/src/display_device.cpp index cd593ebe..7988cba5 100644 --- a/src/display_device.cpp +++ b/src/display_device.cpp @@ -621,7 +621,7 @@ namespace display_device { std::make_shared(persistence_filepath) ), WinWorkarounds { - .m_hdr_blank_delay = video_config.dd.wa.hdr_toggle ? std::make_optional(500ms) : std::nullopt + .m_hdr_blank_delay = video_config.dd.wa.hdr_toggle_delay != std::chrono::milliseconds::zero() ? std::make_optional(video_config.dd.wa.hdr_toggle_delay) : std::nullopt } ); #else diff --git a/src_assets/common/assets/web/config.html b/src_assets/common/assets/web/config.html index 8fd43c41..528631bb 100644 --- a/src_assets/common/assets/web/config.html +++ b/src_assets/common/assets/web/config.html @@ -177,7 +177,7 @@ "dd_config_revert_delay": 3000, "dd_config_revert_on_disconnect": "disabled", "dd_mode_remapping": {"mixed": [], "resolution_only": [], "refresh_rate_only": []}, - "dd_wa_hdr_toggle": "disabled", + "dd_wa_hdr_toggle_delay": 0, "min_fps_factor": 1, "max_bitrate": 0, }, diff --git a/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayDeviceOptions.vue b/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayDeviceOptions.vue index 864abc3d..e3345c66 100644 --- a/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayDeviceOptions.vue +++ b/src_assets/common/assets/web/configs/tabs/audiovideo/DisplayDeviceOptions.vue @@ -1,7 +1,6 @@