Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c6b7efc authored by Peiyong Lin's avatar Peiyong Lin
Browse files

[SurfaceFlinger] Respect HDR data space.

Respect HDR data space when there is no legacy HDR support. Previously we only
cared about HDR data space when it is supported, however, on Pixel 2 there is
no HDR mode support. This patch makes sure that when HDR mode is not supported,
we fall back to Display P3 color mode correctly.

BUG: 80404330
Test: Build, flash and watch Youtube HDR
Change-Id: I7d27711fe4d33268e5ebbd14fce0975f9e642e84
Merged-In: I7d27711fe4d33268e5ebbd14fce0975f9e642e84
parent 4f80b867
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -761,12 +761,12 @@ bool DisplayDevice::hasRenderIntent(RenderIntent intent) const {
    return iter != mColorModes.end() && iter->second.renderIntent == intent;
    return iter != mColorModes.end() && iter->second.renderIntent == intent;
}
}


bool DisplayDevice::hasModernHdrSupport(Dataspace dataspace) const {
bool DisplayDevice::hasLegacyHdrSupport(Dataspace dataspace) const {
    if ((dataspace == Dataspace::BT2020_PQ && hasHDR10Support()) ||
    if ((dataspace == Dataspace::BT2020_PQ && hasHDR10Support()) ||
        (dataspace == Dataspace::BT2020_HLG && hasHLGSupport())) {
        (dataspace == Dataspace::BT2020_HLG && hasHLGSupport())) {
        auto iter =
        auto iter =
                mColorModes.find(getColorModeKey(dataspace, RenderIntent::TONE_MAP_COLORIMETRIC));
                mColorModes.find(getColorModeKey(dataspace, RenderIntent::TONE_MAP_COLORIMETRIC));
        return iter != mColorModes.end() && iter->second.dataspace == dataspace;
        return iter == mColorModes.end() || iter->second.dataspace != dataspace;
    }
    }


    return false;
    return false;
+3 −3
Original line number Original line Diff line number Diff line
@@ -150,9 +150,9 @@ public:
    bool hasHLGSupport() const { return mHasHLG; }
    bool hasHLGSupport() const { return mHasHLG; }
    bool hasDolbyVisionSupport() const { return mHasDolbyVision; }
    bool hasDolbyVisionSupport() const { return mHasDolbyVision; }


    // Return true if the corresponding color mode for the HDR dataspace is
    // Return true if the HDR dataspace is supported but
    // supported.
    // there is no corresponding color mode.
    bool hasModernHdrSupport(ui::Dataspace dataspace) const;
    bool hasLegacyHdrSupport(ui::Dataspace dataspace) const;


    // The returned HdrCapabilities is the combination of HDR capabilities from
    // The returned HdrCapabilities is the combination of HDR capabilities from
    // hardware composer and RenderEngine. When the DisplayDevice supports wide
    // hardware composer and RenderEngine. When the DisplayDevice supports wide
+2 −2
Original line number Original line Diff line number Diff line
@@ -1932,9 +1932,9 @@ void SurfaceFlinger::pickColorMode(const sp<DisplayDevice>& displayDevice,
    Dataspace hdrDataSpace;
    Dataspace hdrDataSpace;
    Dataspace bestDataSpace = getBestDataspace(displayDevice, &hdrDataSpace);
    Dataspace bestDataSpace = getBestDataspace(displayDevice, &hdrDataSpace);


    // respect hdrDataSpace only when there is modern HDR support
    // respect hdrDataSpace only when there is no legacy HDR support
    const bool isHdr = hdrDataSpace != Dataspace::UNKNOWN &&
    const bool isHdr = hdrDataSpace != Dataspace::UNKNOWN &&
        displayDevice->hasModernHdrSupport(hdrDataSpace);
        !displayDevice->hasLegacyHdrSupport(hdrDataSpace);
    if (isHdr) {
    if (isHdr) {
        bestDataSpace = hdrDataSpace;
        bestDataSpace = hdrDataSpace;
    }
    }