diff options
author | Long Ling <longling@google.com> | 2022-04-29 17:58:57 -0700 |
---|---|---|
committer | Long Ling <longling@google.com> | 2022-05-02 12:56:47 -0700 |
commit | 34b535a29513a95726dfd3991649eab5ba3846e4 (patch) | |
tree | 042a1fdd0a27a298ac6dc41a4d0453177d95587a /libhwc2.1 | |
parent | dce496ae458a90a0e89b962910925319df7891d3 (diff) | |
download | gs101-34b535a29513a95726dfd3991649eab5ba3846e4.tar.gz |
libhwc2.1: support solid color layer dimming in HWC
Bug: 230570414
Change-Id: Id55b717750d6dcae51a9228d76e883ae7805346d
Diffstat (limited to 'libhwc2.1')
3 files changed, 12 insertions, 2 deletions
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)); |