diff options
author | 2023-03-22 13:27:19 -0700 | |
---|---|---|
committer | 2023-03-23 21:40:20 -0700 | |
commit | bb9ff7f5b943214c6946af113c9d55b28ccb15ce (patch) | |
tree | 055cc2d3e445e9390459f15d84959b42e14bf1f5 | |
parent | fa823a93cc64f301eef90f7e44c325538691d9a2 (diff) |
Temp fix for overdimming issue in silkFX.
- disable caching if hdr/sdr ratio > 1.01f, which we uses the extended
brightness api.
Bug: 273624686
Test: play HDR video in silkFX and make sure no overdimming obeserved;
atest libcompositionengine_test
Change-Id: Iae53c5928e4f91b4b73f9e4ee9dd7bb052e86090
3 files changed, 28 insertions, 0 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h index d5c488e40e..ee9e646c1f 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h @@ -247,6 +247,10 @@ public: ui::Dataspace getDataspace() const { return mOutputDataspace.get(); } + float getHdrSdrRatio() const { + return getOutputLayer()->getLayerFE().getCompositionState()->currentSdrHdrRatio; + }; + wp<GraphicBuffer> getBuffer() const { return mBuffer.get(); } bool isProtected() const { return mIsProtected.get(); } diff --git a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp index a00ce57e29..8ced0aca36 100644 --- a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp +++ b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp @@ -378,6 +378,10 @@ bool CachedSet::hasUnsupportedDataspace() const { // to avoid flickering/color differences. return true; } + // TODO(b/274804887): temp fix of overdimming issue, skip caching if hsdr/sdr ratio > 1.01f + if (layer.getState()->getHdrSdrRatio() > 1.01f) { + return true; + } return false; }); } diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp index ca5ba69e8e..1f7fb93c6b 100644 --- a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp @@ -662,6 +662,26 @@ TEST_F(CachedSetTest, holePunch_requiresNonBT601_625) { EXPECT_FALSE(cachedSet.requiresHolePunch()); } +TEST_F(CachedSetTest, holePunch_requiresNonHdrWithExtendedBrightness) { + const auto dataspace = static_cast<ui::Dataspace>(ui::Dataspace::STANDARD_DCI_P3 | + ui::Dataspace::TRANSFER_SRGB | + ui::Dataspace::RANGE_EXTENDED); + mTestLayers[0]->outputLayerCompositionState.dataspace = dataspace; + mTestLayers[0]->layerFECompositionState.currentSdrHdrRatio = 5.f; + mTestLayers[0]->layerState->update(&mTestLayers[0]->outputLayer); + + CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get(); + auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; + layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + layerFECompositionState.blendMode = hal::BlendMode::NONE; + sp<mock::LayerFE> layerFE = mTestLayers[0]->layerFE; + + CachedSet cachedSet(layer); + EXPECT_CALL(*layerFE, hasRoundedCorners()).WillRepeatedly(Return(true)); + + EXPECT_FALSE(cachedSet.requiresHolePunch()); +} + TEST_F(CachedSetTest, holePunch_requiresNoBlending) { CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get(); auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; |