Display (macOS): merge monitor module features

This commit is contained in:
李通洲
2024-09-30 20:16:24 +08:00
parent ca442b3da4
commit fb0a18dc82
4 changed files with 86 additions and 12 deletions
+4 -1
View File
@@ -33,7 +33,10 @@ FFDisplayResult* ffdsAppendDisplay(
display->primary = primary;
display->bitDepth = 0;
display->hdrEnabled = false;
display->hdrStatus = FF_DISPLAY_HDR_STATUS_UNKNOWN;
display->manufactureYear = 0;
display->manufactureWeek = 0;
display->serial = 0;
return display;
}
+12 -1
View File
@@ -48,6 +48,14 @@ typedef enum FFDisplayType {
FF_DISPLAY_TYPE_EXTERNAL,
} FFDisplayType;
typedef enum FFDisplayHdrStatus
{
FF_DISPLAY_HDR_STATUS_UNKNOWN,
FF_DISPLAY_HDR_STATUS_UNSUPPORTED,
FF_DISPLAY_HDR_STATUS_SUPPORTED,
FF_DISPLAY_HDR_STATUS_ENABLED,
} FFDisplayHdrStatus;
typedef struct FFDisplayResult
{
uint32_t width;
@@ -63,7 +71,10 @@ typedef struct FFDisplayResult
uint32_t physicalHeight;
bool primary;
uint8_t bitDepth;
bool hdrEnabled;
FFDisplayHdrStatus hdrStatus;
uint16_t manufactureYear;
uint16_t manufactureWeek;
uint32_t serial;
} FFDisplayResult;
typedef struct FFDisplayServerResult
@@ -8,9 +8,10 @@
#include <CoreGraphics/CGDirectDisplay.h>
#include <CoreVideo/CVDisplayLink.h>
extern Boolean CoreDisplay_Display_SupportsHDRMode(CGDirectDisplayID display) __attribute__((weak_import));
extern Boolean CoreDisplay_Display_IsHDRModeEnabled(CGDirectDisplayID display) __attribute__((weak_import));
#ifdef MAC_OS_X_VERSION_10_15
extern CFDictionaryRef CoreDisplay_DisplayCreateInfoDictionary(CGDirectDisplayID display) __attribute__((weak_import));
extern Boolean CoreDisplay_Display_IsHDRModeEnabled(CGDirectDisplayID display) __attribute__((weak_import));
#else
#include <IOKit/graphics/IOGraphicsLib.h>
#endif
@@ -89,12 +90,23 @@ static void detectDisplays(FFDisplayServerResult* ds)
display->bitDepth = (uint8_t) bitDepth;
}
#ifdef MAC_OS_X_VERSION_10_15
if (CoreDisplay_Display_IsHDRModeEnabled)
if (display->type == FF_DISPLAY_TYPE_BUILTIN)
display->hdrStatus = CFDictionaryContainsKey(displayInfo, CFSTR("ReferencePeakHDRLuminance"))
? FF_DISPLAY_HDR_STATUS_SUPPORTED : FF_DISPLAY_HDR_STATUS_UNSUPPORTED;
else if (CoreDisplay_Display_SupportsHDRMode)
{
display->hdrEnabled = CoreDisplay_Display_IsHDRModeEnabled(screen);
if (CoreDisplay_Display_SupportsHDRMode(screen))
{
if (CoreDisplay_Display_IsHDRModeEnabled)
{
display->hdrStatus = CoreDisplay_Display_IsHDRModeEnabled(screen)
? FF_DISPLAY_HDR_STATUS_ENABLED
: FF_DISPLAY_HDR_STATUS_SUPPORTED;
}
else
display->hdrStatus = FF_DISPLAY_HDR_STATUS_SUPPORTED;
}
}
#endif
}
CGDisplayModeRelease(mode);
}