diff options
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 2017f468d9..b90bd53d4d 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1758,6 +1758,13 @@ void SurfaceFlinger::calculateWorkingSet() { if (mDrawingState.colorMatrixChanged) { display->setColorTransform(mDrawingState.colorMatrix); } + Dataspace targetDataspace = Dataspace::UNKNOWN; + if (useColorManagement) { + ColorMode colorMode; + RenderIntent renderIntent; + pickColorMode(displayDevice, &colorMode, &targetDataspace, &renderIntent); + display->setColorMode(colorMode, targetDataspace, renderIntent); + } for (auto& layer : displayDevice->getVisibleLayersSortedByZ()) { if (layer->isHdrY410()) { layer->forceClientComposition(displayDevice); @@ -1789,15 +1796,7 @@ void SurfaceFlinger::calculateWorkingSet() { const auto& displayState = display->getState(); layer->setPerFrameData(displayDevice, displayState.transform, displayState.viewport, - displayDevice->getSupportedPerFrameMetadata()); - } - - if (useColorManagement) { - ColorMode colorMode; - Dataspace dataSpace; - RenderIntent renderIntent; - pickColorMode(displayDevice, &colorMode, &dataSpace, &renderIntent); - display->setColorMode(colorMode, dataSpace, renderIntent); + displayDevice->getSupportedPerFrameMetadata(), targetDataspace); } } @@ -3888,6 +3887,11 @@ uint32_t SurfaceFlinger::setClientStateLocked(const ComposerState& composerState if (what & layer_state_t::eMetadataChanged) { if (layer->setMetadata(s.metadata)) flags |= eTraversalNeeded; } + if (what & layer_state_t::eColorSpaceAgnosticChanged) { + if (layer->setColorSpaceAgnostic(s.colorSpaceAgnostic)) { + flags |= eTraversalNeeded; + } + } std::vector<sp<CallbackHandle>> callbackHandles; if ((what & layer_state_t::eListenerCallbacksChanged) && (!s.listenerCallbacks.empty())) { mTransactionCompletedThread.run(); |