diff options
author | Long Ling <longling@google.com> | 2022-05-12 02:31:53 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-05-12 02:31:53 +0000 |
commit | 8ea97d8cddfa7de3b4024a6dfbf87978f51619da (patch) | |
tree | 042a1fdd0a27a298ac6dc41a4d0453177d95587a | |
parent | 56dd385ff70f2f0df68b627eb79f9fb2eaf41e25 (diff) | |
parent | 34b535a29513a95726dfd3991649eab5ba3846e4 (diff) | |
download | gs101-8ea97d8cddfa7de3b4024a6dfbf87978f51619da.tar.gz |
libhwc2.1: support solid color layer dimming in HWC am: 34b535a295
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/graphics/gs101/+/18124583
Change-Id: I22af2bb4f4b9b3af28612e1a5d15ad9a00594715
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
4 files changed, 15 insertions, 2 deletions
diff --git a/include/gs101/displaycolor/displaycolor_gs101.h b/include/gs101/displaycolor/displaycolor_gs101.h index 5c89d76..4154209 100644 --- a/include/gs101/displaycolor/displaycolor_gs101.h +++ b/include/gs101/displaycolor/displaycolor_gs101.h @@ -149,6 +149,9 @@ class IDisplayColorGS101 : public IDisplayColorGeneric { /// Get data for the OETF LUT. virtual const OetfData& OetfLut() const = 0; + /// Get the solid color + virtual const Color SolidColor() const = 0; + virtual ~IDpp() {} }; diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp index bfe8eaa..b42edaa 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp @@ -629,7 +629,7 @@ int32_t ExynosDisplayDrmInterfaceModule::setPlaneColorBlob( int32_t ExynosDisplayDrmInterfaceModule::setPlaneColorSetting( ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq, const std::unique_ptr<DrmPlane> &plane, - const exynos_win_config_data &config) + const exynos_win_config_data &config, uint32_t &solidColor) { if ((mColorSettingChanged == false) || (isPrimary() == false)) @@ -685,6 +685,10 @@ int32_t ExynosDisplayDrmInterfaceModule::setPlaneColorSetting( const uint32_t dppIndex = static_cast<uint32_t>(display->getDppIndexForLayer(mppSource)); bool planeChanged = display->checkAndSaveLayerPlaneId(mppSource, plane->id()); + auto &color = dpp.SolidColor(); + // exynos_win_config_data.color ARGB + solidColor = (color.a << 24) | (color.r << 16) | (color.g << 8) | color.b; + int ret = 0; if ((ret = setPlaneColorBlob(plane, plane->eotf_lut_property(), static_cast<uint32_t>(DppBlobs::EOTF), diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h index b72f2a7..f2e826b 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h @@ -37,7 +37,8 @@ class ExynosDisplayDrmInterfaceModule : public ExynosDisplayDrmInterface { virtual int32_t setPlaneColorSetting( ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq, const std::unique_ptr<DrmPlane> &plane, - const exynos_win_config_data &config); + const exynos_win_config_data &config, + uint32_t &solidColor); void setColorSettingChanged(bool changed, bool forceDisplay = false) { mColorSettingChanged = changed; mForceDisplayColorSetting = forceDisplay; diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp index 74e8246..c1d3f8f 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp @@ -602,6 +602,11 @@ int32_t ExynosPrimaryDisplayModule::DisplaySceneInfo::setClientCompositionColorD int32_t ExynosPrimaryDisplayModule::DisplaySceneInfo::setLayerColorData( LayerColorData& layerData, ExynosLayer* layer, float dimSdrRatio) { + layerData.is_solid_color_layer = layer->isDimLayer(); + layerData.solid_color.r = layer->mColor.r; + layerData.solid_color.g = layer->mColor.g; + layerData.solid_color.b = layer->mColor.b; + layerData.solid_color.a = layer->mColor.a; layerData.dim_ratio = layer->mPreprocessedInfo.sdrDimRatio; setLayerDataspace(layerData, static_cast<hwc::Dataspace>(layer->mDataSpace)); |