From 97b779aefbc042dec09c1b7ec5fd9beecc252612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sat, 12 Aug 2023 00:27:05 +0800 Subject: [PATCH] Monitor (Linux): try detecting HDR support --- src/detection/monitor/monitor_linux.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/detection/monitor/monitor_linux.c b/src/detection/monitor/monitor_linux.c index cca0c7de3..a04276412 100644 --- a/src/detection/monitor/monitor_linux.c +++ b/src/detection/monitor/monitor_linux.c @@ -3,8 +3,10 @@ #include "common/io/io.h" #include "util/edidHelper.h" #include "util/stringUtils.h" +#include "util/mallocHelper.h" #include +#include const char* ffDetectMonitor(FFlist* results) { @@ -28,7 +30,14 @@ const char* ffDetectMonitor(FFlist* results) ffStrbufAppendS(&drmDir, entry->d_name); ffStrbufAppendS(&drmDir, "/edid"); - uint8_t edidData[128]; + struct stat fileStat; + if (stat(drmDir.chars, &fileStat) < 0 || fileStat.st_size == 0 || fileStat.st_size % 128 != 0) + { + ffStrbufSubstrBefore(&drmDir, drmDirLength); + continue; + } + + FF_AUTO_FREE uint8_t* edidData = malloc((size_t) fileStat.st_size); if(ffReadFileData(drmDir.chars, sizeof(edidData), edidData) != sizeof(edidData)) { ffStrbufSubstrBefore(&drmDir, drmDirLength); @@ -45,6 +54,7 @@ const char* ffDetectMonitor(FFlist* results) ffStrbufInit(&display->name); ffEdidGetName(edidData, &display->name); ffEdidGetPhysicalSize(edidData, &display->physicalWidth, &display->physicalHeight); + display->hdrCompatible = ffEdidGetHdrCompatible(edidData, (uint32_t) fileStat.st_size); } ffStrbufSubstrBefore(&drmDir, drmDirLength);