Loading services/surfaceflinger/BufferLayer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -639,7 +639,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)); Loading services/surfaceflinger/DisplayDevice.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ DisplayDevice::DisplayDevice( int displayHeight, bool hasWideColorGamut, const HdrCapabilities& hdrCapabilities, const int32_t supportedPerFrameMetadata, int initialPowerMode) : lastCompositionHadVisibleLayers(false), mFlinger(flinger), Loading @@ -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()) { Loading services/surfaceflinger/DisplayDevice.h +9 −5 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -86,6 +85,7 @@ public: int displayHeight, bool hasWideColorGamut, const HdrCapabilities& hdrCapabilities, const int32_t supportedPerFrameMetadata, int initialPowerMode); // clang-format on Loading Loading @@ -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; Loading Loading @@ -259,6 +261,8 @@ private: bool mHasHdr10; bool mHasHLG; bool mHasDolbyVision; const int32_t mSupportedPerFrameMetadata; }; struct DisplayDeviceState { Loading services/surfaceflinger/DisplayHardware/ComposerHal.cpp +12 −42 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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) { Loading services/surfaceflinger/DisplayHardware/ComposerHal.h +9 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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, Loading Loading @@ -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; Loading @@ -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 Loading
services/surfaceflinger/BufferLayer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -639,7 +639,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)); Loading
services/surfaceflinger/DisplayDevice.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ DisplayDevice::DisplayDevice( int displayHeight, bool hasWideColorGamut, const HdrCapabilities& hdrCapabilities, const int32_t supportedPerFrameMetadata, int initialPowerMode) : lastCompositionHadVisibleLayers(false), mFlinger(flinger), Loading @@ -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()) { Loading
services/surfaceflinger/DisplayDevice.h +9 −5 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -86,6 +85,7 @@ public: int displayHeight, bool hasWideColorGamut, const HdrCapabilities& hdrCapabilities, const int32_t supportedPerFrameMetadata, int initialPowerMode); // clang-format on Loading Loading @@ -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; Loading Loading @@ -259,6 +261,8 @@ private: bool mHasHdr10; bool mHasHLG; bool mHasDolbyVision; const int32_t mSupportedPerFrameMetadata; }; struct DisplayDeviceState { Loading
services/surfaceflinger/DisplayHardware/ComposerHal.cpp +12 −42 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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) { Loading
services/surfaceflinger/DisplayHardware/ComposerHal.h +9 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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, Loading Loading @@ -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; Loading @@ -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