[SurfaceFlinger] Make sure data space is set correctly
This patch makes sure data space is set correctly for native window.
Previously, the data space could be unknown.
BUG: 77652630
BUG: 78025830
Test: Build, flash, watch some videos
Change-Id: I3096ebaecda35838493e0d5e2efdf141eff0b75e
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index 2aa4cd3..57f474b 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -515,7 +515,27 @@
recomputeVisibleRegions = true;
}
- setDataSpace(mConsumer->getCurrentDataSpace());
+ // Dataspace::V0_SRGB and Dataspace::V0_SRGB_LINEAR are not legacy
+ // data space, however since framework doesn't distinguish them out of
+ // legacy SRGB, we have to treat them as the same for now.
+ // UNKNOWN is treated as legacy SRGB when the connected api is EGL.
+ ui::Dataspace dataSpace = mConsumer->getCurrentDataSpace();
+ switch (dataSpace) {
+ case ui::Dataspace::V0_SRGB:
+ dataSpace = ui::Dataspace::SRGB;
+ break;
+ case ui::Dataspace::V0_SRGB_LINEAR:
+ dataSpace = ui::Dataspace::SRGB_LINEAR;
+ break;
+ case ui::Dataspace::UNKNOWN:
+ if (mConsumer->getCurrentApi() == NATIVE_WINDOW_API_EGL) {
+ dataSpace = ui::Dataspace::SRGB;
+ }
+ break;
+ default:
+ break;
+ }
+ setDataSpace(dataSpace);
Rect crop(mConsumer->getCurrentCrop());
const uint32_t transform(mConsumer->getCurrentTransform());