aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2025-02-09 06:51:22 +0100
committerdec05eba <dec05eba@protonmail.com>2025-02-09 06:51:22 +0100
commita3b9b89a7fd6dbde224d158d38a63b7210092e72 (patch)
treebc758432dc83cb7f27287ead6bc55a35124c8aaa /src/main.cpp
parent86df5a580e83c5731c78b5d4f1ce5ce0077835d1 (diff)
Attempt to fix incorrect hdr colors on kde plasma 6.2
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 97b8742..6a8d0c4 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -3006,6 +3006,33 @@ static AudioDeviceData create_application_audio_audio_input(const MergedAudioInp
}
#endif
+static bool is_kde_plasma_version_greater_than_6_1_90() {
+ FILE *f = popen("plasmashell -v 2> /dev/null", "r");
+ if(!f)
+ return false;
+
+ char output[512];
+ const ssize_t bytes_read = fread(output, 1, sizeof(output) - 1, f);
+ if(bytes_read < 0 || ferror(f)) {
+ pclose(f);
+ return false;
+ }
+ output[bytes_read] = '\0';
+
+ bool is_above = false;
+ const char *version_start = strstr(output, "plasmashell ");
+ if(version_start) {
+ version_start += 12;
+ int major = 0;
+ int minor = 0;
+ int patch = 0;
+ is_above = sscanf(version_start, "%d.%d.%d", &major, &minor, &patch) == 3 && version_greater_than(major, minor, patch, 6, 1, 90);
+ }
+
+ pclose(f);
+ return is_above;
+}
+
static bool arg_get_boolean_value(std::map<std::string, Arg> &args, const char *arg_name, bool default_value) {
auto it = args.find(arg_name);
if(it == args.end() || !it->second.value()) {
@@ -3734,6 +3761,7 @@ int main(int argc, char **argv) {
color_conversion_params.color_range = color_range;
color_conversion_params.egl = &egl;
color_conversion_params.load_external_image_shader = gsr_capture_uses_external_image(capture);
+ color_conversion_params.kde_gamma_correction = hdr && is_monitor_capture && window->is_compositor_kwin && window->is_compositor_kwin(window) && is_kde_plasma_version_greater_than_6_1_90();
gsr_video_encoder_get_textures(video_encoder, color_conversion_params.destination_textures, &color_conversion_params.num_destination_textures, &color_conversion_params.destination_color);
gsr_color_conversion color_conversion;