drm_hwcomposer: Implement getHdrCapabilities and getColorModes
Retrieve color and HDR information from the EDID.
Change-Id: I1aac27644d5c4fd5d5f295ca32b69ed69e94e0c6
Signed-off-by: Sasha McIntosh <sashamcintosh@google.com>
diff --git a/hwc3/ComposerClient.cpp b/hwc3/ComposerClient.cpp
index 04beb3a..ff3d42e 100644
--- a/hwc3/ComposerClient.cpp
+++ b/hwc3/ComposerClient.cpp
@@ -941,8 +941,28 @@
return ToBinderStatus(hwc3::Error::kBadDisplay);
}
- /* No HDR capabilities */
- caps->types.clear();
+ uint32_t num_types = 0;
+ hwc3::Error error = Hwc2toHwc3Error(
+ display->GetHdrCapabilities(&num_types, nullptr, nullptr, nullptr,
+ nullptr));
+ if (error != hwc3::Error::kNone) {
+ return ToBinderStatus(error);
+ }
+
+ std::vector<int32_t> out_types(num_types);
+ error = Hwc2toHwc3Error(
+ display->GetHdrCapabilities(&num_types, out_types.data(),
+ &caps->maxLuminance,
+ &caps->maxAverageLuminance,
+ &caps->minLuminance));
+ if (error != hwc3::Error::kNone) {
+ return ToBinderStatus(error);
+ }
+
+ caps->types.reserve(num_types);
+ for (const auto type : out_types)
+ caps->types.emplace_back(Hwc2HdrTypeToHwc3(type));
+
return ndk::ScopedAStatus::ok();
}
diff --git a/hwc3/Utils.h b/hwc3/Utils.h
index b322f5d..642c777 100644
--- a/hwc3/Utils.h
+++ b/hwc3/Utils.h
@@ -16,6 +16,7 @@
#pragma once
+#include <aidl/android/hardware/graphics/common/Hdr.h>
#include <aidl/android/hardware/graphics/composer3/IComposerClient.h>
#include <hardware/hwcomposer2.h>
#include <log/log.h>
@@ -165,4 +166,12 @@
return static_cast<int32_t>(dataspace);
}
-}; // namespace aidl::android::hardware::graphics::composer3
\ No newline at end of file
+// Values appear to match.
+// https://cs.android.com/android/platform/superproject/main/+/main:hardware/interfaces/graphics/common/aidl/android/hardware/graphics/common/Hdr.aidl
+// https://cs.android.com/android/platform/superproject/main/+/main:system/core/libsystem/include/system/graphics-base-v1.0.h;l=130;drc=7d940ae4afa450696afa25e07982f3a95e17e9b2
+// https://cs.android.com/android/platform/superproject/main/+/main:system/core/libsystem/include/system/graphics-base-v1.2.h;l=12;drc=af7be7616859f8e9e57710b9c37c66cf880a6643
+inline common::Hdr Hwc2HdrTypeToHwc3(int32_t hdr_type) {
+ return static_cast<common::Hdr>(hdr_type);
+}
+
+}; // namespace aidl::android::hardware::graphics::composer3