Use wide color modes with external displays
A prior code cleanup made it obvious that wide color modes were only
being used for the primary display. This patch allows external displays
to use wide color modes, and adds a requested TODO to update a variable
name.
Bug: None
Test: Builds
Change-Id: Iec262e51674a2a2f7fcfc9177c7bfbf0b1a860e3
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index bfa239d..f21a691 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -136,6 +136,7 @@
bool SurfaceFlinger::hasSyncFramework;
bool SurfaceFlinger::useVrFlinger;
int64_t SurfaceFlinger::maxFrameBufferAcquiredBuffers;
+// TODO(courtneygo): Rename hasWideColorDisplay to clarify its actual meaning.
bool SurfaceFlinger::hasWideColorDisplay;
@@ -2238,7 +2239,7 @@
if (dispSurface != nullptr) {
bool useWideColorMode = hasWideColorDisplay;
- if (state.isMainDisplay()) {
+ if (!mForceNativeColorMode) {
bool hasWideColorModes = false;
std::vector<android_color_mode_t> modes =
getHwComposer().getColorModes(state.type);
@@ -2253,26 +2254,23 @@
break;
}
}
- useWideColorMode = hasWideColorModes && hasWideColorDisplay &&
- !mForceNativeColorMode;
+ useWideColorMode = hasWideColorModes && hasWideColorDisplay;
}
sp<DisplayDevice> hw =
new DisplayDevice(this, state.type, hwcId, state.isSecure, display,
dispSurface, producer, useWideColorMode);
- if (state.isMainDisplay()) {
- android_color_mode defaultColorMode = HAL_COLOR_MODE_NATIVE;
- if (useWideColorMode) {
- defaultColorMode = HAL_COLOR_MODE_SRGB;
- }
- setActiveColorModeInternal(hw, defaultColorMode);
- hw->setCompositionDataSpace(HAL_DATASPACE_UNKNOWN);
+ android_color_mode defaultColorMode = HAL_COLOR_MODE_NATIVE;
+ if (useWideColorMode) {
+ defaultColorMode = HAL_COLOR_MODE_SRGB;
}
-
+ setActiveColorModeInternal(hw, defaultColorMode);
+ hw->setCompositionDataSpace(HAL_DATASPACE_UNKNOWN);
hw->setLayerStack(state.layerStack);
hw->setProjection(state.orientation, state.viewport, state.frame);
hw->setDisplayName(state.displayName);
+
mDisplays.add(display, hw);
if (!state.isVirtualDisplay()) {
mEventThread->onHotplugReceived(state.type, true);