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

Commit 34ea5b96 authored by Peiyong Lin's avatar Peiyong Lin
Browse files

Avoid setting color space agnostic when in HDR mode.

HDR is assumed to have high brightness, and thus the white means 10000 nits
when in HDR 10. Making layers color space agnostic could probably results in
wrong visual perception.

BUG: 126616348
Test: Build, flash and boot. Verify with Youtube HDR.
Change-Id: Icf6ae321cf53f31426362df2a972a0b396501f9f
parent 178e86bb
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -304,7 +304,9 @@ void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice,
        setCompositionType(displayDevice, Hwc2::IComposerClient::Composition::DEVICE);
    }

    ui::Dataspace dataspace = isColorSpaceAgnostic() ? targetDataspace : mCurrentDataSpace;
    ui::Dataspace dataspace = isColorSpaceAgnostic() && targetDataspace != ui::Dataspace::UNKNOWN
            ? targetDataspace
            : mCurrentDataSpace;
    error = hwcLayer->setDataspace(dataspace);
    if (error != HWC2::Error::None) {
        ALOGE("[%s] Failed to set dataspace %d: %s (%d)", mName.string(), dataspace,
+3 −1
Original line number Diff line number Diff line
@@ -114,7 +114,9 @@ void ColorLayer::setPerFrameData(const sp<const DisplayDevice>& display,

    setCompositionType(display, Hwc2::IComposerClient::Composition::SOLID_COLOR);

    const ui::Dataspace dataspace = isColorSpaceAgnostic() ? targetDataspace : mCurrentDataSpace;
    const ui::Dataspace dataspace =
            isColorSpaceAgnostic() && targetDataspace != ui::Dataspace::UNKNOWN ? targetDataspace
                                                                                : mCurrentDataSpace;
    error = hwcLayer->setDataspace(dataspace);
    if (error != HWC2::Error::None) {
        ALOGE("[%s] Failed to set dataspace %d: %s (%d)", mName.string(), dataspace,
+25 −1
Original line number Diff line number Diff line
@@ -157,6 +157,28 @@ bool isWideColorMode(const ColorMode colorMode) {
    return false;
}

bool isHdrColorMode(const ColorMode colorMode) {
    switch (colorMode) {
        case ColorMode::BT2100_PQ:
        case ColorMode::BT2100_HLG:
            return true;
        case ColorMode::DISPLAY_P3:
        case ColorMode::ADOBE_RGB:
        case ColorMode::DCI_P3:
        case ColorMode::BT2020:
        case ColorMode::DISPLAY_BT2020:
        case ColorMode::NATIVE:
        case ColorMode::STANDARD_BT601_625:
        case ColorMode::STANDARD_BT601_625_UNADJUSTED:
        case ColorMode::STANDARD_BT601_525:
        case ColorMode::STANDARD_BT601_525_UNADJUSTED:
        case ColorMode::STANDARD_BT709:
        case ColorMode::SRGB:
            return false;
    }
    return false;
}

ui::Transform::orientation_flags fromSurfaceComposerRotation(ISurfaceComposer::Rotation rotation) {
    switch (rotation) {
        case ISurfaceComposer::eRotateNone:
@@ -1836,7 +1858,9 @@ void SurfaceFlinger::calculateWorkingSet() {

            const auto& displayState = display->getState();
            layer->setPerFrameData(displayDevice, displayState.transform, displayState.viewport,
                                   displayDevice->getSupportedPerFrameMetadata(), targetDataspace);
                                   displayDevice->getSupportedPerFrameMetadata(),
                                   isHdrColorMode(displayState.colorMode) ? Dataspace::UNKNOWN
                                                                          : targetDataspace);
        }
    }