diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-05-30 23:57:58 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-05-30 23:57:58 +0000 |
commit | 88fbd425a85fbba6365976ca9b056c719f7685a5 (patch) | |
tree | ef9eac3b2a1771ecd0ad5f427749a93254035d9b | |
parent | 31b85c2326ea082733a848d47b630f44c7888549 (diff) | |
parent | c4b08bde2aaa455a7f789eb2858863d19563b949 (diff) | |
download | native-88fbd425a85fbba6365976ca9b056c719f7685a5.tar.gz |
Merge "surfaceflinger: RenderIntent::COLORIMETRIC is no longer mandatory" into pi-dev
-rw-r--r-- | services/surfaceflinger/DisplayDevice.cpp | 28 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 18 |
2 files changed, 29 insertions, 17 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index e81df8ad53..9ecbacc86b 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -162,18 +162,20 @@ std::vector<RenderIntent> getRenderIntentCandidates(RenderIntent intent) { } } - // add other HDR candidates when intent is HDR if (isHdr) { + // add other HDR candidates when intent is HDR for (auto hdrIntent : sHdrRenderIntents) { if (hdrIntent != intent) { candidates.push_back(hdrIntent); } } - } - - // add COLORIMETRIC - if (intent != RenderIntent::COLORIMETRIC) { - candidates.push_back(RenderIntent::COLORIMETRIC); + } else { + // add other SDR candidates when intent is SDR + for (auto sdrIntent : sSdrRenderIntents) { + if (sdrIntent != intent) { + candidates.push_back(sdrIntent); + } + } } return candidates; @@ -727,14 +729,24 @@ void DisplayDevice::populateColorModes( } } - // add known SDR combinations + // add all known SDR combinations for (auto intent : sdrRenderIntents) { for (auto mode : sSdrColorModes) { addColorMode(hwcColorModes, mode, intent); } } - // add known HDR combinations + // collect all known HDR render intents + std::unordered_set<RenderIntent> hdrRenderIntents(sHdrRenderIntents.begin(), + sHdrRenderIntents.end()); + iter = hwcColorModes.find(ColorMode::BT2100_PQ); + if (iter != hwcColorModes.end()) { + for (auto intent : iter->second) { + hdrRenderIntents.insert(intent); + } + } + + // add all known HDR combinations for (auto intent : sHdrRenderIntents) { for (auto mode : sHdrColorModes) { addColorMode(hwcColorModes, mode, intent); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index f5fa478a2d..a120738713 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1932,27 +1932,27 @@ void SurfaceFlinger::pickColorMode(const sp<DisplayDevice>& displayDevice, Dataspace hdrDataSpace; Dataspace bestDataSpace = getBestDataspace(displayDevice, &hdrDataSpace); + // respect hdrDataSpace only when there is modern HDR support + const bool isHdr = hdrDataSpace != Dataspace::UNKNOWN && + displayDevice->hasModernHdrSupport(hdrDataSpace); + if (isHdr) { + bestDataSpace = hdrDataSpace; + } + RenderIntent intent; switch (mDisplayColorSetting) { case DisplayColorSetting::MANAGED: case DisplayColorSetting::UNMANAGED: - intent = RenderIntent::COLORIMETRIC; + intent = isHdr ? RenderIntent::TONE_MAP_COLORIMETRIC : RenderIntent::COLORIMETRIC; break; case DisplayColorSetting::ENHANCED: - intent = RenderIntent::ENHANCE; + intent = isHdr ? RenderIntent::TONE_MAP_ENHANCE : RenderIntent::ENHANCE; break; default: // vendor display color setting intent = static_cast<RenderIntent>(mDisplayColorSetting); break; } - // respect hdrDataSpace only when there is modern HDR support - if (hdrDataSpace != Dataspace::UNKNOWN && displayDevice->hasModernHdrSupport(hdrDataSpace)) { - bestDataSpace = hdrDataSpace; - intent = mDisplayColorSetting == DisplayColorSetting::ENHANCED ? - RenderIntent::TONE_MAP_ENHANCE : RenderIntent::TONE_MAP_COLORIMETRIC; - } - displayDevice->getBestColorMode(bestDataSpace, intent, outDataSpace, outMode, outRenderIntent); } |