diff options
author | Chia-I Wu <olv@google.com> | 2018-05-29 12:57:23 -0700 |
---|---|---|
committer | Chia-I Wu <olv@google.com> | 2018-05-30 09:29:49 -0700 |
commit | c4b08bde2aaa455a7f789eb2858863d19563b949 (patch) | |
tree | 534680968900e4aeb4fec0ca13c5599b76d883df | |
parent | ca175ee15a529cca0eb2bc8372e552d4ad255fc0 (diff) | |
download | native-c4b08bde2aaa455a7f789eb2858863d19563b949.tar.gz |
surfaceflinger: RenderIntent::COLORIMETRIC is no longer mandatory
RenderIntent::COLORIMETRIC is mandatory only for SDR color modes.
For HDR color modes, RenderIntent::TONE_MAP_COLORIMETRIC is
mandatory.
Bug: 80030364
Test: HDR videos
Change-Id: I70d96ac66d069218d789dded330169284a61bde1
-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); } |