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

Commit 0c8c8d18 authored by Peiyong Lin's avatar Peiyong Lin Committed by android-build-merger
Browse files

Merge "[SurfaceFlinger] Use SDR data space for HDR video if it's in GPU...

Merge "[SurfaceFlinger] Use SDR data space for HDR video if it's in GPU composition." into qt-dev am: ab22c357
am: d7d84bd1

Change-Id: I10e5c2c18945965049d3b38e2e36e09f598b3d8e
parents 07943a65 d7d84bd1
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -2195,8 +2195,9 @@ void SurfaceFlinger::rebuildLayerStacks() {
//  - Dataspace::UNKNOWN
//  - Dataspace::UNKNOWN
//  - Dataspace::BT2020_HLG
//  - Dataspace::BT2020_HLG
//  - Dataspace::BT2020_PQ
//  - Dataspace::BT2020_PQ
Dataspace SurfaceFlinger::getBestDataspace(const sp<const DisplayDevice>& display,
Dataspace SurfaceFlinger::getBestDataspace(const sp<DisplayDevice>& display,
                                           Dataspace* outHdrDataSpace) const {
                                           Dataspace* outHdrDataSpace,
                                           bool* outIsHdrClientComposition) const {
    Dataspace bestDataSpace = Dataspace::V0_SRGB;
    Dataspace bestDataSpace = Dataspace::V0_SRGB;
    *outHdrDataSpace = Dataspace::UNKNOWN;
    *outHdrDataSpace = Dataspace::UNKNOWN;


@@ -2217,6 +2218,7 @@ Dataspace SurfaceFlinger::getBestDataspace(const sp<const DisplayDevice>& displa
            case Dataspace::BT2020_ITU_PQ:
            case Dataspace::BT2020_ITU_PQ:
                bestDataSpace = Dataspace::DISPLAY_P3;
                bestDataSpace = Dataspace::DISPLAY_P3;
                *outHdrDataSpace = Dataspace::BT2020_PQ;
                *outHdrDataSpace = Dataspace::BT2020_PQ;
                *outIsHdrClientComposition = layer->getForceClientComposition(display);
                break;
                break;
            case Dataspace::BT2020_HLG:
            case Dataspace::BT2020_HLG:
            case Dataspace::BT2020_ITU_HLG:
            case Dataspace::BT2020_ITU_HLG:
@@ -2246,7 +2248,8 @@ void SurfaceFlinger::pickColorMode(const sp<DisplayDevice>& display, ColorMode*
    }
    }


    Dataspace hdrDataSpace;
    Dataspace hdrDataSpace;
    Dataspace bestDataSpace = getBestDataspace(display, &hdrDataSpace);
    bool isHdrClientComposition = false;
    Dataspace bestDataSpace = getBestDataspace(display, &hdrDataSpace, &isHdrClientComposition);


    auto* profile = display->getCompositionDisplay()->getDisplayColorProfile();
    auto* profile = display->getCompositionDisplay()->getDisplayColorProfile();


@@ -2262,8 +2265,8 @@ void SurfaceFlinger::pickColorMode(const sp<DisplayDevice>& display, ColorMode*
    }
    }


    // respect hdrDataSpace only when there is no legacy HDR support
    // respect hdrDataSpace only when there is no legacy HDR support
    const bool isHdr =
    const bool isHdr = hdrDataSpace != Dataspace::UNKNOWN &&
            hdrDataSpace != Dataspace::UNKNOWN && !profile->hasLegacyHdrSupport(hdrDataSpace);
            !profile->hasLegacyHdrSupport(hdrDataSpace) && !isHdrClientComposition;
    if (isHdr) {
    if (isHdr) {
        bestDataSpace = hdrDataSpace;
        bestDataSpace = hdrDataSpace;
    }
    }
+2 −2
Original line number Original line Diff line number Diff line
@@ -734,8 +734,8 @@ private:
                                    nsecs_t compositeToPresentLatency);
                                    nsecs_t compositeToPresentLatency);
    void rebuildLayerStacks();
    void rebuildLayerStacks();


    ui::Dataspace getBestDataspace(const sp<const DisplayDevice>& display,
    ui::Dataspace getBestDataspace(const sp<DisplayDevice>& display, ui::Dataspace* outHdrDataSpace,
                                   ui::Dataspace* outHdrDataSpace) const;
                                   bool* outIsHdrClientComposition) const;


    // Returns the appropriate ColorMode, Dataspace and RenderIntent for the
    // Returns the appropriate ColorMode, Dataspace and RenderIntent for the
    // DisplayDevice. The function only returns the supported ColorMode,
    // DisplayDevice. The function only returns the supported ColorMode,