[SurfaceFlinger] Extend HDR support.
Previously we stored HDR10 support in DisplayDevice. This patch extends and
generalizes the support to HLG and Dolby Vision.
Minor: Adapt Hdr type from HAL.
BUG: 73825729
BUG: 77156734
Test: Build, flash, watch Youtube HDR
Change-Id: Id642bc9482523b4646814dca9ecfb1f043987dc5
diff --git a/libs/ui/HdrCapabilities.cpp b/libs/ui/HdrCapabilities.cpp
index 755e60c..50f9bf1 100644
--- a/libs/ui/HdrCapabilities.cpp
+++ b/libs/ui/HdrCapabilities.cpp
@@ -33,7 +33,7 @@
sizeof(mMaxAverageLuminance) +
sizeof(mMinLuminance) +
sizeof(int32_t) +
- mSupportedHdrTypes.size() * sizeof(int32_t);
+ mSupportedHdrTypes.size() * sizeof(ui::Hdr);
}
status_t HdrCapabilities::flatten(void* buffer, size_t size) const {
@@ -48,7 +48,7 @@
reinterpret_cast<float&>(buf[2]) = mMinLuminance;
buf[3] = static_cast<int32_t>(mSupportedHdrTypes.size());
for (size_t i = 0, c = mSupportedHdrTypes.size(); i < c; ++i) {
- buf[4 + i] = mSupportedHdrTypes[i];
+ buf[4 + i] = static_cast<int32_t>(mSupportedHdrTypes[i]);
}
return NO_ERROR;
}
@@ -78,7 +78,7 @@
if (itemCount) {
mSupportedHdrTypes.resize(itemCount);
for (size_t i = 0; i < itemCount; ++i) {
- mSupportedHdrTypes[i] = buf[4 + i];
+ mSupportedHdrTypes[i] = static_cast<ui::Hdr>(buf[4 + i]);
}
}
return NO_ERROR;
diff --git a/libs/ui/include/ui/GraphicTypes.h b/libs/ui/include/ui/GraphicTypes.h
index bd5722f..0fa819d 100644
--- a/libs/ui/include/ui/GraphicTypes.h
+++ b/libs/ui/include/ui/GraphicTypes.h
@@ -24,6 +24,7 @@
namespace android {
namespace ui {
+using android::hardware::graphics::common::V1_0::Hdr;
using android::hardware::graphics::common::V1_1::ColorMode;
using android::hardware::graphics::common::V1_1::Dataspace;
using android::hardware::graphics::common::V1_1::PixelFormat;
diff --git a/libs/ui/include/ui/HdrCapabilities.h b/libs/ui/include/ui/HdrCapabilities.h
index 925aa1b..4e98c28 100644
--- a/libs/ui/include/ui/HdrCapabilities.h
+++ b/libs/ui/include/ui/HdrCapabilities.h
@@ -21,6 +21,7 @@
#include <vector>
+#include <ui/GraphicTypes.h>
#include <utils/Flattenable.h>
namespace android {
@@ -28,7 +29,7 @@
class HdrCapabilities : public LightFlattenable<HdrCapabilities>
{
public:
- HdrCapabilities(const std::vector<int32_t /*android_hdr_t*/>& types,
+ HdrCapabilities(const std::vector<ui::Hdr>& types,
float maxLuminance, float maxAverageLuminance, float minLuminance)
: mSupportedHdrTypes(types),
mMaxLuminance(maxLuminance),
@@ -47,7 +48,7 @@
~HdrCapabilities();
- const std::vector<int32_t /*android_hdr_t*/>& getSupportedHdrTypes() const {
+ const std::vector<ui::Hdr>& getSupportedHdrTypes() const {
return mSupportedHdrTypes;
}
float getDesiredMaxLuminance() const { return mMaxLuminance; }
@@ -61,7 +62,7 @@
status_t unflatten(void const* buffer, size_t size);
private:
- std::vector<int32_t /*android_hdr_t*/> mSupportedHdrTypes;
+ std::vector<ui::Hdr> mSupportedHdrTypes;
float mMaxLuminance;
float mMaxAverageLuminance;
float mMinLuminance;