summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/DisplayDevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'services/surfaceflinger/DisplayDevice.cpp')
-rw-r--r--services/surfaceflinger/DisplayDevice.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index 7c6302e70a..00f8cc9c5c 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -108,7 +108,8 @@ DisplayDevice::DisplayDevice(
mSupportedPerFrameMetadata(supportedPerFrameMetadata)
{
// clang-format on
- for (Hdr hdrType : hdrCapabilities.getSupportedHdrTypes()) {
+ std::vector<Hdr> types = hdrCapabilities.getSupportedHdrTypes();
+ for (Hdr hdrType : types) {
switch (hdrType) {
case Hdr::HDR10:
mHasHdr10 = true;
@@ -124,6 +125,26 @@ DisplayDevice::DisplayDevice(
}
}
+ float minLuminance = hdrCapabilities.getDesiredMinLuminance();
+ float maxLuminance = hdrCapabilities.getDesiredMaxLuminance();
+ float maxAverageLuminance = hdrCapabilities.getDesiredMaxAverageLuminance();
+
+ minLuminance = minLuminance <= 0.0 ? sDefaultMinLumiance : minLuminance;
+ maxLuminance = maxLuminance <= 0.0 ? sDefaultMaxLumiance : maxLuminance;
+ maxAverageLuminance = maxAverageLuminance <= 0.0 ? sDefaultMaxLumiance : maxAverageLuminance;
+ if (this->hasWideColorGamut()) {
+ // insert HDR10/HLG as we will force client composition for HDR10/HLG
+ // layers
+ if (!hasHDR10Support()) {
+ types.push_back(Hdr::HDR10);
+ }
+
+ if (!hasHLGSupport()) {
+ types.push_back(Hdr::HLG);
+ }
+ }
+ mHdrCapabilities = HdrCapabilities(types, maxLuminance, maxAverageLuminance, minLuminance);
+
// initialize the display orientation transform.
setProjection(DisplayState::eOrientationDefault, mViewport, mFrame);
}