Loading services/surfaceflinger/SurfaceFlinger.cpp +25 −10 Original line number Diff line number Diff line Loading @@ -1123,12 +1123,16 @@ status_t SurfaceFlinger::getHdrCapabilities(const sp<IBinder>& display, int status = getBE().mHwc->getHdrCapabilities( displayDevice->getHwcDisplayId(), &capabilities); if (status == NO_ERROR) { if (displayDevice->hasWideColorGamut() && !displayDevice->hasHDR10Support()) { // insert HDR10 as we will force client composition for HDR10 // layers 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(), Loading Loading @@ -1904,17 +1908,23 @@ ui::Dataspace SurfaceFlinger::getBestDataspace( case Dataspace::V0_SCRGB_LINEAR: // return immediately return Dataspace::V0_SCRGB_LINEAR; case Dataspace::BT2020_PQ: case Dataspace::BT2020_ITU_PQ: case Dataspace::DISPLAY_P3: bestDataspace = Dataspace::DISPLAY_P3; break; // Historically, HDR dataspaces are ignored by SurfaceFlinger. But // since SurfaceFlinger simulates HDR support now, it should honor // them unless there is also native support. case Dataspace::BT2020_PQ: case Dataspace::BT2020_ITU_PQ: if (!displayDevice->hasHDR10Support()) { return Dataspace::V0_SCRGB_LINEAR; } break; case Dataspace::DISPLAY_P3: bestDataspace = Dataspace::DISPLAY_P3; case Dataspace::BT2020_HLG: case Dataspace::BT2020_ITU_HLG: if (!displayDevice->hasHLGSupport()) { return Dataspace::V0_SCRGB_LINEAR; } break; default: break; Loading Loading @@ -2030,6 +2040,11 @@ void SurfaceFlinger::setUpHWComposer() { !displayDevice->hasHDR10Support()) { layer->forceClientComposition(hwcId); } if ((layer->getDataSpace() == Dataspace::BT2020_HLG || layer->getDataSpace() == Dataspace::BT2020_ITU_HLG) && !displayDevice->hasHLGSupport()) { layer->forceClientComposition(hwcId); } if (layer->getForceClientComposition(hwcId)) { ALOGV("[%s] Requesting Client composition", layer->getName().string()); Loading Loading
services/surfaceflinger/SurfaceFlinger.cpp +25 −10 Original line number Diff line number Diff line Loading @@ -1123,12 +1123,16 @@ status_t SurfaceFlinger::getHdrCapabilities(const sp<IBinder>& display, int status = getBE().mHwc->getHdrCapabilities( displayDevice->getHwcDisplayId(), &capabilities); if (status == NO_ERROR) { if (displayDevice->hasWideColorGamut() && !displayDevice->hasHDR10Support()) { // insert HDR10 as we will force client composition for HDR10 // layers 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(), Loading Loading @@ -1904,17 +1908,23 @@ ui::Dataspace SurfaceFlinger::getBestDataspace( case Dataspace::V0_SCRGB_LINEAR: // return immediately return Dataspace::V0_SCRGB_LINEAR; case Dataspace::BT2020_PQ: case Dataspace::BT2020_ITU_PQ: case Dataspace::DISPLAY_P3: bestDataspace = Dataspace::DISPLAY_P3; break; // Historically, HDR dataspaces are ignored by SurfaceFlinger. But // since SurfaceFlinger simulates HDR support now, it should honor // them unless there is also native support. case Dataspace::BT2020_PQ: case Dataspace::BT2020_ITU_PQ: if (!displayDevice->hasHDR10Support()) { return Dataspace::V0_SCRGB_LINEAR; } break; case Dataspace::DISPLAY_P3: bestDataspace = Dataspace::DISPLAY_P3; case Dataspace::BT2020_HLG: case Dataspace::BT2020_ITU_HLG: if (!displayDevice->hasHLGSupport()) { return Dataspace::V0_SCRGB_LINEAR; } break; default: break; Loading Loading @@ -2030,6 +2040,11 @@ void SurfaceFlinger::setUpHWComposer() { !displayDevice->hasHDR10Support()) { layer->forceClientComposition(hwcId); } if ((layer->getDataSpace() == Dataspace::BT2020_HLG || layer->getDataSpace() == Dataspace::BT2020_ITU_HLG) && !displayDevice->hasHLGSupport()) { layer->forceClientComposition(hwcId); } if (layer->getForceClientComposition(hwcId)) { ALOGV("[%s] Requesting Client composition", layer->getName().string()); Loading