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

Commit 773e2f23 authored by Peiyong Lin's avatar Peiyong Lin Committed by android-build-merger
Browse files

[SurfaceFlinger] Plumb getPerFrameMetadataKeys and setLayerPerFrameMetadata.

am: 2c327ac2

Change-Id: Ia6dae40504d8add71614ed76fc293878cbff7394
parents 7ed8f7ef 2c327ac2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -650,7 +650,7 @@ void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice)
    }

    const HdrMetadata& metadata = mConsumer->getCurrentHdrMetadata();
    error = hwcLayer->setHdrMetadata(metadata);
    error = hwcLayer->setPerFrameMetadata(displayDevice->getSupportedPerFrameMetadata(), metadata);
    if (error != HWC2::Error::None && error != HWC2::Error::Unsupported) {
        ALOGE("[%s] Failed to set hdrMetadata: %s (%d)", mName.string(),
              to_string(error).c_str(), static_cast<int32_t>(error));
+3 −1
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ DisplayDevice::DisplayDevice(
        int displayHeight,
        bool hasWideColorGamut,
        const HdrCapabilities& hdrCapabilities,
        const int32_t supportedPerFrameMetadata,
        int initialPowerMode)
    : lastCompositionHadVisibleLayers(false),
      mFlinger(flinger),
@@ -103,7 +104,8 @@ DisplayDevice::DisplayDevice(
      mHasWideColorGamut(hasWideColorGamut),
      mHasHdr10(false),
      mHasHLG(false),
      mHasDolbyVision(false)
      mHasDolbyVision(false),
      mSupportedPerFrameMetadata(supportedPerFrameMetadata)
{
    // clang-format on
    for (Hdr hdrType : hdrCapabilities.getSupportedHdrTypes()) {
+9 −5
Original line number Diff line number Diff line
@@ -23,17 +23,16 @@

#include <math/mat4.h>

#include <ui/Region.h>

#include <binder/IBinder.h>
#include <gui/ISurfaceComposer.h>
#include <hardware/hwcomposer_defs.h>
#include <ui/GraphicTypes.h>
#include <ui/Region.h>
#include <utils/RefBase.h>
#include <utils/Mutex.h>
#include <utils/String8.h>
#include <utils/Timers.h>

#include <gui/ISurfaceComposer.h>
#include <hardware/hwcomposer_defs.h>
#include <ui/GraphicTypes.h>
#include "RenderArea.h"
#include "RenderEngine/Surface.h"

@@ -86,6 +85,7 @@ public:
            int displayHeight,
            bool hasWideColorGamut,
            const HdrCapabilities& hdrCapabilities,
            const int32_t supportedPerFrameMetadata,
            int initialPowerMode);
    // clang-format on

@@ -131,6 +131,8 @@ public:
    int32_t                 getHwcDisplayId() const { return mHwcDisplayId; }
    const wp<IBinder>&      getDisplayToken() const { return mDisplayToken; }

    int32_t getSupportedPerFrameMetadata() const { return mSupportedPerFrameMetadata; }

    // We pass in mustRecompose so we can keep VirtualDisplaySurface's state
    // machine happy without actually queueing a buffer if nothing has changed
    status_t beginFrame(bool mustRecompose) const;
@@ -259,6 +261,8 @@ private:
    bool mHasHdr10;
    bool mHasHLG;
    bool mHasDolbyVision;

    const int32_t mSupportedPerFrameMetadata;
};

struct DisplayDeviceState {
+12 −42
Original line number Diff line number Diff line
@@ -715,48 +715,6 @@ Error Composer::setLayerDataspace(Display display, Layer layer,
    return Error::NONE;
}

Error Composer::setLayerHdrMetadata(Display display, Layer layer, const HdrMetadata& metadata) {
    if (!mClient_2_2) {
        return Error::UNSUPPORTED;
    }

    mWriter.selectDisplay(display);
    mWriter.selectLayer(layer);

    std::vector<IComposerClient::PerFrameMetadata> composerMetadata;
    using PerFrameMetadataKey = IComposerClient::PerFrameMetadataKey;
    if (metadata.validTypes & HdrMetadata::SMPTE2086) {
        composerMetadata
                .insert(composerMetadata.end(),
                        {{PerFrameMetadataKey::DISPLAY_RED_PRIMARY_X,
                          metadata.smpte2086.displayPrimaryRed.x},
                         {PerFrameMetadataKey::DISPLAY_RED_PRIMARY_Y,
                          metadata.smpte2086.displayPrimaryRed.y},
                         {PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_X,
                          metadata.smpte2086.displayPrimaryGreen.x},
                         {PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_Y,
                          metadata.smpte2086.displayPrimaryGreen.y},
                         {PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_X,
                          metadata.smpte2086.displayPrimaryBlue.x},
                         {PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_Y,
                          metadata.smpte2086.displayPrimaryBlue.y},
                         {PerFrameMetadataKey::WHITE_POINT_X, metadata.smpte2086.whitePoint.x},
                         {PerFrameMetadataKey::WHITE_POINT_Y, metadata.smpte2086.whitePoint.y},
                         {PerFrameMetadataKey::MAX_LUMINANCE, metadata.smpte2086.maxLuminance},
                         {PerFrameMetadataKey::MIN_LUMINANCE, metadata.smpte2086.minLuminance}});
    }
    if (metadata.validTypes & HdrMetadata::CTA861_3) {
        composerMetadata.insert(composerMetadata.end(),
                                {{PerFrameMetadataKey::MAX_CONTENT_LIGHT_LEVEL,
                                  metadata.cta8613.maxContentLightLevel},
                                 {PerFrameMetadataKey::MAX_FRAME_AVERAGE_LIGHT_LEVEL,
                                  metadata.cta8613.maxFrameAverageLightLevel}});
    }

    mWriter.setLayerPerFrameMetadata(composerMetadata);
    return Error::NONE;
}

Error Composer::setLayerDisplayFrame(Display display, Layer layer,
        const IComposerClient::Rect& frame)
{
@@ -927,6 +885,18 @@ Error Composer::execute()

// Composer HAL 2.2

Error Composer::setLayerPerFrameMetadata(Display display, Layer layer,
        const std::vector<IComposerClient::PerFrameMetadata>& perFrameMetadatas) {
    if (!mClient_2_2) {
        return Error::UNSUPPORTED;
    }

    mWriter.selectDisplay(display);
    mWriter.selectLayer(layer);
    mWriter.setLayerPerFrameMetadata(perFrameMetadatas);
    return Error::NONE;
}

Error Composer::getPerFrameMetadataKeys(
        Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) {
    if (!mClient_2_2) {
+9 −3
Original line number Diff line number Diff line
@@ -64,6 +64,9 @@ using V2_2::CommandWriterBase;
using V2_2::IComposer;
using V2_2::IComposerClient;

using PerFrameMetadata = IComposerClient::PerFrameMetadata;
using PerFrameMetadataKey = IComposerClient::PerFrameMetadataKey;

class Composer {
public:
    virtual ~Composer() = 0;
@@ -160,8 +163,6 @@ public:
    virtual Error setLayerCompositionType(Display display, Layer layer,
                                          IComposerClient::Composition type) = 0;
    virtual Error setLayerDataspace(Display display, Layer layer, Dataspace dataspace) = 0;
    virtual Error setLayerHdrMetadata(Display display, Layer layer,
                                      const HdrMetadata& metadata) = 0;
    virtual Error setLayerDisplayFrame(Display display, Layer layer,
                                       const IComposerClient::Rect& frame) = 0;
    virtual Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) = 0;
@@ -176,6 +177,9 @@ public:
    virtual Error setLayerInfo(Display display, Layer layer, uint32_t type, uint32_t appId) = 0;

    // Composer HAL 2.2
    virtual Error setLayerPerFrameMetadata(
            Display display, Layer layer,
            const std::vector<IComposerClient::PerFrameMetadata>& perFrameMetadatas) = 0;
    virtual Error getPerFrameMetadataKeys(
            Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) = 0;
    virtual Error getRenderIntents(Display display, ColorMode colorMode,
@@ -353,7 +357,6 @@ public:
    Error setLayerCompositionType(Display display, Layer layer,
                                  IComposerClient::Composition type) override;
    Error setLayerDataspace(Display display, Layer layer, Dataspace dataspace) override;
    Error setLayerHdrMetadata(Display display, Layer layer, const HdrMetadata& metadata) override;
    Error setLayerDisplayFrame(Display display, Layer layer,
                               const IComposerClient::Rect& frame) override;
    Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) override;
@@ -368,6 +371,9 @@ public:
    Error setLayerInfo(Display display, Layer layer, uint32_t type, uint32_t appId) override;

    // Composer HAL 2.2
    Error setLayerPerFrameMetadata(
            Display display, Layer layer,
            const std::vector<IComposerClient::PerFrameMetadata>& perFrameMetadatas) override;
    Error getPerFrameMetadataKeys(
            Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) override;
    Error getRenderIntents(Display display, ColorMode colorMode,
Loading