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

Commit 0510d906 authored by Valerie Hau's avatar Valerie Hau Committed by Android (Google) Code Review
Browse files

Merge "Adding HDR10+ Support to SF"

parents eec0e702 e9e843ae
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -25,11 +25,11 @@
namespace android {
namespace ui {

using android::hardware::graphics::common::V1_0::Hdr;
using android::hardware::graphics::common::V1_1::PixelFormat;
using android::hardware::graphics::common::V1_1::RenderIntent;
using android::hardware::graphics::common::V1_2::ColorMode;
using android::hardware::graphics::common::V1_2::Dataspace;
using android::hardware::graphics::common::V1_2::Hdr;

}  // namespace ui
}  // namespace android
+11 −4
Original line number Diff line number Diff line
@@ -239,6 +239,7 @@ DisplayDevice::DisplayDevice(DisplayDeviceCreationArgs&& args)
        mActiveConfig(0),
        mColorTransform(HAL_COLOR_TRANSFORM_IDENTITY),
        mHasWideColorGamut(args.hasWideColorGamut),
        mHasHdr10Plus(false),
        mHasHdr10(false),
        mHasHLG(false),
        mHasDolbyVision(false),
@@ -252,6 +253,9 @@ DisplayDevice::DisplayDevice(DisplayDeviceCreationArgs&& args)
    std::vector<Hdr> types = args.hdrCapabilities.getSupportedHdrTypes();
    for (Hdr hdrType : types) {
        switch (hdrType) {
            case Hdr::HDR10_PLUS:
                mHasHdr10Plus = true;
                break;
            case Hdr::HDR10:
                mHasHdr10 = true;
                break;
@@ -748,8 +752,11 @@ void DisplayDevice::dump(std::string& result) const {
                  tr[2][1], tr[0][2], tr[1][2], tr[2][2]);
    auto const surface = static_cast<Surface*>(window);
    ui::Dataspace dataspace = surface->getBuffersDataSpace();
    StringAppendF(&result, "   wideColorGamut=%d, hdr10=%d, colorMode=%s, dataspace: %s (%d)\n",
                  mHasWideColorGamut, mHasHdr10, decodeColorMode(mActiveColorMode).c_str(),
    StringAppendF(&result,
                  "   wideColorGamut=%d, hdr10plus =%d, hdr10=%d, colorMode=%s, dataspace: %s "
                  "(%d)\n",
                  mHasWideColorGamut, mHasHdr10Plus, mHasHdr10,
                  decodeColorMode(mActiveColorMode).c_str(),
                  dataspaceDetails(static_cast<android_dataspace>(dataspace)).c_str(), dataspace);

    String8 surfaceDump;
+2 −0
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ public:

    bool hasWideColorGamut() const { return mHasWideColorGamut; }
    // Whether h/w composer has native support for specific HDR type.
    bool hasHDR10PlusSupport() const { return mHasHdr10Plus; }
    bool hasHDR10Support() const { return mHasHdr10; }
    bool hasHLGSupport() const { return mHasHLG; }
    bool hasDolbyVisionSupport() const { return mHasDolbyVision; }
@@ -276,6 +277,7 @@ private:
    // Initialized by SurfaceFlinger when the DisplayDevice is created.
    // Fed to RenderEngine during composition.
    bool mHasWideColorGamut;
    bool mHasHdr10Plus;
    bool mHasHdr10;
    bool mHasHLG;
    bool mHasDolbyVision;
+76 −23
Original line number Diff line number Diff line
@@ -487,7 +487,8 @@ Error Composer::getHdrCapabilities(Display display,
        float* outMaxAverageLuminance, float* outMinLuminance)
{
    Error error = kDefaultError;
    mClient->getHdrCapabilities(display,
    if (mClient_2_3) {
        mClient_2_3->getHdrCapabilities_2_3(display,
                                            [&](const auto& tmpError, const auto& tmpTypes,
                                                const auto& tmpMaxLuminance,
                                                const auto& tmpMaxAverageLuminance,
@@ -502,6 +503,27 @@ Error Composer::getHdrCapabilities(Display display,
                                                *outMaxAverageLuminance = tmpMaxAverageLuminance;
                                                *outMinLuminance = tmpMinLuminance;
                                            });
    } else {
        mClient->getHdrCapabilities(display,
                                    [&](const auto& tmpError, const auto& tmpTypes,
                                        const auto& tmpMaxLuminance,
                                        const auto& tmpMaxAverageLuminance,
                                        const auto& tmpMinLuminance) {
                                        error = tmpError;
                                        if (error != Error::NONE) {
                                            return;
                                        }

                                        outTypes->clear();
                                        for (auto type : tmpTypes) {
                                            outTypes->push_back(static_cast<Hdr>(type));
                                        }

                                        *outMaxLuminance = tmpMaxLuminance;
                                        *outMaxAverageLuminance = tmpMaxAverageLuminance;
                                        *outMinLuminance = tmpMinLuminance;
                                    });
    }

    return error;
}
@@ -926,15 +948,33 @@ std::vector<IComposerClient::PerFrameMetadataKey> Composer::getPerFrameMetadataK
    }

    Error error = kDefaultError;
    mClient_2_2->getPerFrameMetadataKeys(display, [&](const auto& tmpError, const auto& tmpKeys) {
    if (mClient_2_3) {
        mClient_2_3->getPerFrameMetadataKeys_2_3(display,
                                                 [&](const auto& tmpError, const auto& tmpKeys) {
                                                     error = tmpError;
                                                     if (error != Error::NONE) {
                                                         ALOGW("getPerFrameMetadataKeys failed "
                                                               "with %d",
                                                               tmpError);
                                                         return;
                                                     }
                                                     keys = tmpKeys;
                                                 });
    } else {
        mClient_2_2
                ->getPerFrameMetadataKeys(display, [&](const auto& tmpError, const auto& tmpKeys) {
                    error = tmpError;
                    if (error != Error::NONE) {
                        ALOGW("getPerFrameMetadataKeys failed with %d", tmpError);
                        return;
                    }

        keys = tmpKeys;
                    keys.clear();
                    for (auto key : tmpKeys) {
                        keys.push_back(static_cast<IComposerClient::PerFrameMetadataKey>(key));
                    }
                });
    }

    return keys;
}
@@ -1104,6 +1144,19 @@ Error Composer::getDisplayedContentSample(Display display, uint64_t maxFrames, u
    return error;
}

Error Composer::setLayerPerFrameMetadataBlobs(
        Display display, Layer layer,
        const std::vector<IComposerClient::PerFrameMetadataBlob>& metadata) {
    if (!mClient_2_3) {
        return Error::UNSUPPORTED;
    }

    mWriter.selectDisplay(display);
    mWriter.selectLayer(layer);
    mWriter.setLayerPerFrameMetadataBlobs(metadata);
    return Error::NONE;
}

CommandReader::~CommandReader()
{
    resetData();
+8 −1
Original line number Diff line number Diff line
@@ -47,12 +47,13 @@ namespace V2_2 = hardware::graphics::composer::V2_2;
namespace V2_3 = hardware::graphics::composer::V2_3;

using types::V1_0::ColorTransform;
using types::V1_0::Hdr;
using types::V1_0::Transform;
using types::V1_1::PixelFormat;
using types::V1_1::RenderIntent;
using types::V1_2::ColorMode;
using types::V1_2::Dataspace;
using types::V1_2::Hdr;

using V2_1::Config;
using V2_1::Display;
using V2_1::Error;
@@ -65,6 +66,7 @@ using V2_3::IComposerClient;
using DisplayCapability = IComposerClient::DisplayCapability;
using PerFrameMetadata = IComposerClient::PerFrameMetadata;
using PerFrameMetadataKey = IComposerClient::PerFrameMetadataKey;
using PerFrameMetadataBlob = IComposerClient::PerFrameMetadataBlob;

class Composer {
public:
@@ -199,6 +201,8 @@ public:
                                            DisplayedFrameStats* outStats) = 0;
    virtual Error getDisplayCapabilities(Display display,
                                         std::vector<DisplayCapability>* outCapabilities) = 0;
    virtual Error setLayerPerFrameMetadataBlobs(
            Display display, Layer layer, const std::vector<PerFrameMetadataBlob>& metadata) = 0;
};

namespace impl {
@@ -407,6 +411,9 @@ public:
                                    DisplayedFrameStats* outStats) override;
    Error getDisplayCapabilities(Display display,
                                 std::vector<DisplayCapability>* outCapabilities) override;
    Error setLayerPerFrameMetadataBlobs(
            Display display, Layer layer,
            const std::vector<IComposerClient::PerFrameMetadataBlob>& metadata) override;

private:
    class CommandWriter : public CommandWriterBase {
Loading