drm_hwcomposer: Set HDR metadata on the connector
Implement a function to set HDR metadata on the connector. Support HDR10
and HLG, which are common HDR types.
Change-Id: Id3dbe8eea2ee6b8ba700af23845a43e2070dd14e
Signed-off-by: Sasha McIntosh <sashamcintosh@google.com>
diff --git a/utils/EdidWrapper.h b/utils/EdidWrapper.h
index 3552001..867d1a0 100644
--- a/utils/EdidWrapper.h
+++ b/utils/EdidWrapper.h
@@ -24,6 +24,8 @@
}
#endif
+#include <ui/GraphicTypes.h>
+
#include "drm/DrmUnique.h"
#include "utils/log.h"
@@ -35,6 +37,16 @@
EdidWrapper() = default;
EdidWrapper(const EdidWrapper &) = delete;
virtual ~EdidWrapper() = default;
+
+ virtual void GetSupportedHdrTypes(std::vector<ui::Hdr> &types) {
+ types.clear();
+ };
+ virtual void GetHdrCapabilities(std::vector<ui::Hdr> &types,
+ const float * /*max_luminance*/,
+ const float * /*max_average_luminance*/,
+ const float * /*min_luminance*/) {
+ GetSupportedHdrTypes(types);
+ };
};
#if HAS_LIBDISPLAY_INFO
@@ -42,26 +54,23 @@
class LibdisplayEdidWrapper final : public EdidWrapper {
public:
LibdisplayEdidWrapper() = delete;
- LibdisplayEdidWrapper(di_info *info) : info_(info) {
- }
~LibdisplayEdidWrapper() override {
di_info_destroy(info_);
}
static auto Create(DrmModePropertyBlobUnique blob)
- -> std::unique_ptr<LibdisplayEdidWrapper> {
- if (!blob)
- return nullptr;
+ -> std::unique_ptr<LibdisplayEdidWrapper>;
- auto *info = di_info_parse_edid(blob->data, blob->length);
- if (!info) {
- ALOGW("Failed to parse edid blob.");
- return nullptr;
- }
+ void GetSupportedHdrTypes(std::vector<ui::Hdr> &types) override;
- return std::make_unique<LibdisplayEdidWrapper>(std::move(info));
- }
+ void GetHdrCapabilities(std::vector<ui::Hdr> &types,
+ const float *max_luminance,
+ const float *max_average_luminance,
+ const float *min_luminance) override;
private:
+ LibdisplayEdidWrapper(di_info *info) : info_(std::move(info)) {
+ }
+
di_info *info_{};
};
#endif