From d5c395fb85991a4180590f3a7a4c111f5f536813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 30 Sep 2024 23:25:08 +0800 Subject: [PATCH] Display (Windows): merge features of `Monitor` module --- .../displayserver/displayserver_windows.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/detection/displayserver/displayserver_windows.c b/src/detection/displayserver/displayserver_windows.c index 3c685e287..11d9a5de7 100644 --- a/src/detection/displayserver/displayserver_windows.c +++ b/src/detection/displayserver/displayserver_windows.c @@ -86,6 +86,9 @@ static void detectDisplays(FFDisplayServerResult* ds) .id = path->targetInfo.id, }, }; + uint8_t edidData[1024]; + DWORD edidLength = 0; + if(DisplayConfigGetDeviceInfo(&targetName.header) == ERROR_SUCCESS) { wchar_t regPath[256] = L"SYSTEM\\CurrentControlSet\\Enum"; @@ -103,8 +106,7 @@ static void detectDisplays(FFDisplayServerResult* ds) } wcscpy(pRegPath, L"Device Parameters"); - uint8_t edidData[1024]; - DWORD edidLength = sizeof(edidData); + edidLength = sizeof(edidData); if (RegGetValueW(HKEY_LOCAL_MACHINE, regPath, L"EDID", RRF_RT_REG_BINARY, NULL, edidData, &edidLength) == ERROR_SUCCESS && edidLength > 0 && edidLength % 128 == 0) { @@ -113,6 +115,7 @@ static void detectDisplays(FFDisplayServerResult* ds) } else { + edidLength = 0; if (targetName.flags.friendlyNameFromEdid) ffStrbufSetWS(&name, targetName.monitorFriendlyDeviceName); else @@ -177,9 +180,18 @@ static void detectDisplays(FFDisplayServerResult* ds) }; if (DisplayConfigGetDeviceInfo(&advColorInfo.header) == ERROR_SUCCESS) { - display->hdrEnabled = !!advColorInfo.advancedColorEnabled; + if (advColorInfo.advancedColorEnabled) + display->hdrStatus = FF_DISPLAY_HDR_STATUS_ENABLED; + else if (advColorInfo.advancedColorSupported) + display->hdrStatus = FF_DISPLAY_HDR_STATUS_SUPPORTED; + else + display->hdrStatus = FF_DISPLAY_HDR_STATUS_UNSUPPORTED; display->bitDepth = (uint8_t) advColorInfo.bitsPerColorChannel; } + else + display->hdrStatus = FF_DISPLAY_HDR_STATUS_UNKNOWN; + if (edidLength > 0) + ffEdidGetSerialAndManufactureDate(edidData, &display->serial, &display->manufactureYear, &display->manufactureWeek); } } }