Display (Linux): support HDR detection for KDE; fix build

This commit is contained in:
Carter Li
2024-07-18 18:33:46 +08:00
parent c3de293450
commit 96ec2b662c
4 changed files with 16 additions and 7 deletions
@@ -105,7 +105,7 @@ static void waylandKdeGeometryListener(void *data,
display->transform = (enum wl_output_transform) transform;
}
void waylandOutputNameListener(void* data, FF_MAYBE_UNUSED struct kde_output_device_v2* output, const char *name)
static void waylandKdeNameListener(void* data, FF_MAYBE_UNUSED struct kde_output_device_v2* kde_output_device_v2, const char *name)
{
WaylandDisplay* display = data;
display->type = ffdsGetDisplayType(name);
@@ -113,6 +113,12 @@ void waylandOutputNameListener(void* data, FF_MAYBE_UNUSED struct kde_output_dev
ffStrbufAppendS(&display->name, name);
}
static void waylandKdeHdrListener(void *data, FF_MAYBE_UNUSED struct kde_output_device_v2 *kde_output_device_v2, uint32_t hdr_enabled)
{
WaylandDisplay* display = data;
display->hdrEnabled = !!hdr_enabled;
}
static struct kde_output_device_v2_listener outputListener = {
.geometry = waylandKdeGeometryListener,
.current_mode = waylandKdeCurrentModeListener,
@@ -128,8 +134,8 @@ static struct kde_output_device_v2_listener outputListener = {
.overscan = (void*) stubListener,
.vrr_policy = (void*) stubListener,
.rgb_range = (void*) stubListener,
.name = waylandOutputNameListener,
.high_dynamic_range = (void*) stubListener,
.name = waylandKdeNameListener,
.high_dynamic_range = waylandKdeHdrListener,
.sdr_brightness = (void*) stubListener,
.wide_color_gamut = (void*) stubListener,
.auto_rotate_policy = (void*) stubListener,
@@ -171,7 +177,7 @@ void ffWaylandHandleKdeOutput(WaylandData* wldata, struct wl_registry* registry,
uint32_t rotation = ffWaylandHandleRotation(&display);
ffdsAppendDisplay(wldata->result,
FFDisplayResult* item = ffdsAppendDisplay(wldata->result,
(uint32_t) display.width,
(uint32_t) display.height,
display.refreshRate / 1000.0,
@@ -187,6 +193,8 @@ void ffWaylandHandleKdeOutput(WaylandData* wldata, struct wl_registry* registry,
(uint32_t) display.physicalWidth,
(uint32_t) display.physicalHeight
);
if (item)
item->hdrEnabled = display.hdrEnabled;
ffStrbufDestroy(&display.description);
ffStrbufDestroy(&display.name);
@@ -46,6 +46,7 @@ typedef struct WaylandDisplay
FFstrbuf description;
FFstrbuf edidName;
uint64_t id;
bool hdrEnabled;
void* internal;
} WaylandDisplay;
+2 -2
View File
@@ -241,7 +241,7 @@ static bool xcbRandrHandleCrtc(XcbRandrData* data, xcb_randr_crtc_t crtc, FFstrb
break;
}
bool res = xcbRandrHandleMode(data, crtcInfoReply->mode, name, rotation, primary, output, displayType);
res = res ? true : ffdsAppendDisplay(
res = res ? true : !!ffdsAppendDisplay(
data->result,
(uint32_t) crtcInfoReply->width,
(uint32_t) crtcInfoReply->height,
@@ -317,7 +317,7 @@ static bool xcbRandrHandleMonitor(XcbRandrData* data, xcb_randr_monitor_info_t*
data->ffxcb_randr_output_next(&outputIterator);
};
return foundOutput ? true : ffdsAppendDisplay(
return foundOutput ? true : !!ffdsAppendDisplay(
data->result,
(uint32_t) monitor->width,
(uint32_t) monitor->height,
+1 -1
View File
@@ -242,7 +242,7 @@ static bool xrandrHandleMonitor(XrandrData* data, XRRMonitorInfo* monitorInfo)
foundOutput = true;
}
return foundOutput ? true : ffdsAppendDisplay(
return foundOutput ? true : !!ffdsAppendDisplay(
data->result,
(uint32_t) monitorInfo->width,
(uint32_t) monitorInfo->height,