Fix HDR detection
BT2020 can also be non-HDR. Instead of a list of dataspaces, use
instead the transfer mask. Anything PQ or HLG is HDR.
Fixes: 187252812
Test: Repro steps in bug
Change-Id: I7018f1f71971bb53b410805921f0f137667ccf15
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 3edbe1d..a033bee 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2190,20 +2190,10 @@
mDrawingState.traverse([&, compositionDisplay = compositionDisplay](Layer* layer) {
if (layer->isVisible() &&
compositionDisplay->belongsInOutput(layer->getCompositionEngineLayerFE())) {
- bool isHdr = false;
- switch (layer->getDataSpace()) {
- case ui::Dataspace::BT2020:
- case ui::Dataspace::BT2020_HLG:
- case ui::Dataspace::BT2020_PQ:
- case ui::Dataspace::BT2020_ITU:
- case ui::Dataspace::BT2020_ITU_HLG:
- case ui::Dataspace::BT2020_ITU_PQ:
- isHdr = true;
- break;
- default:
- isHdr = false;
- break;
- }
+ const Dataspace transfer =
+ static_cast<Dataspace>(layer->getDataSpace() & Dataspace::TRANSFER_MASK);
+ const bool isHdr = (transfer == Dataspace::TRANSFER_ST2084 ||
+ transfer == Dataspace::TRANSFER_HLG);
if (isHdr) {
info.numberOfHdrLayers++;