summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp41
1 files changed, 15 insertions, 26 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index e12d7ca73d..f736c8cfda 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1119,31 +1119,14 @@ status_t SurfaceFlinger::getHdrCapabilities(const sp<IBinder>& display,
return BAD_VALUE;
}
- HdrCapabilities capabilities;
- int status = getBE().mHwc->getHdrCapabilities(
- displayDevice->getHwcDisplayId(), &capabilities);
- if (status == NO_ERROR) {
- if (displayDevice->hasWideColorGamut()) {
- std::vector<Hdr> types = capabilities.getSupportedHdrTypes();
- // insert HDR10/HLG as we will force client composition for HDR10/HLG
- // layers
- if (!displayDevice->hasHDR10Support()) {
- types.push_back(Hdr::HDR10);
- }
- if (!displayDevice->hasHLGSupport()) {
- types.push_back(Hdr::HLG);
- }
-
- *outCapabilities = HdrCapabilities(types,
- capabilities.getDesiredMaxLuminance(),
- capabilities.getDesiredMaxAverageLuminance(),
- capabilities.getDesiredMinLuminance());
- } else {
- *outCapabilities = std::move(capabilities);
- }
- } else {
- return BAD_VALUE;
- }
+ // At this point the DisplayDeivce should already be set up,
+ // meaning the luminance information is already queried from
+ // hardware composer and stored properly.
+ const HdrCapabilities& capabilities = displayDevice->getHdrCapabilities();
+ *outCapabilities = HdrCapabilities(capabilities.getSupportedHdrTypes(),
+ capabilities.getDesiredMaxLuminance(),
+ capabilities.getDesiredMaxAverageLuminance(),
+ capabilities.getDesiredMinLuminance());
return NO_ERROR;
}
@@ -2917,6 +2900,8 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& displayDev
outputDataspace = displayDevice->getCompositionDataSpace();
}
getBE().mRenderEngine->setOutputDataSpace(outputDataspace);
+ getBE().mRenderEngine->setDisplayMaxLuminance(
+ displayDevice->getHdrCapabilities().getDesiredMaxLuminance());
if (!displayDevice->makeCurrent()) {
ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s",
@@ -4721,6 +4706,9 @@ status_t SurfaceFlinger::captureLayers(const sp<IBinder>& layerHandleBinder,
}
bool getWideColorSupport() const override { return false; }
Dataspace getDataSpace() const override { return Dataspace::UNKNOWN; }
+ float getDisplayMaxLuminance() const override {
+ return DisplayDevice::sDefaultMaxLumiance;
+ }
class ReparentForDrawing {
public:
@@ -4923,7 +4911,8 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea,
if (renderArea.getWideColorSupport()) {
outputDataspace = renderArea.getDataSpace();
}
- getBE().mRenderEngine->setOutputDataSpace(outputDataspace);
+ engine.setOutputDataSpace(outputDataspace);
+ engine.setDisplayMaxLuminance(renderArea.getDisplayMaxLuminance());
// make sure to clear all GL error flags
engine.checkErrors();