surfaceflinger: fix video color conversion in WCG
There is a typo in RenderEngine that causes
Dataspace::TRANSFER_SMPTE_170M and others to be treated as
Dataspace::TRANSFER_LINEAR.
Bug: 77629979
Test: manual
Change-Id: I26cf386304909015fc914b2dd86ef8fdeb34479a
diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
index 0fb3d28..1efe0ac 100644
--- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
@@ -321,10 +321,16 @@
default:
// treat all other dataspaces as sRGB
wideColorState.setColorMatrix(mState.getColorMatrix() * mSrgbToDisplayP3);
- if ((mDataSpace & Dataspace::TRANSFER_MASK) & Dataspace::TRANSFER_LINEAR) {
- wideColorState.setInputTransferFunction(Description::TransferFunction::LINEAR);
- } else {
- wideColorState.setInputTransferFunction(Description::TransferFunction::SRGB);
+ switch (static_cast<Dataspace>(mDataSpace & Dataspace::TRANSFER_MASK)) {
+ case Dataspace::TRANSFER_LINEAR:
+ wideColorState.setInputTransferFunction(
+ Description::TransferFunction::LINEAR);
+ break;
+ default:
+ // treat all other transfer functions as sRGB
+ wideColorState.setInputTransferFunction(
+ Description::TransferFunction::SRGB);
+ break;
}
wideColorState.setOutputTransferFunction(Description::TransferFunction::SRGB);
ALOGV("drawMesh: gamut transform applied");