diff options
author | Xin Li <delphij@google.com> | 2023-10-17 10:08:42 -0700 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2023-10-17 10:08:42 -0700 |
commit | b6d892dbcb71aac3eaeace76c9a9da62a8752d1f (patch) | |
tree | 54e0796e7d03b2ac986d58a965fa93a72a39790f /libhwc2.1/libmaindisplay | |
parent | 0c894b39caf3df07621c0f8a8bb8ba151f360475 (diff) | |
parent | fe4d155acd7c8e1461ca6171d3861d65903ceb02 (diff) | |
download | gs101-tmp_amf_315507370.tar.gz |
Merge 10952656tmp_amf_315507370
Merged-In: Id36c3055e6cb0e2083a975455a549e05dbb80165
Change-Id: Ib50ebc1d72bf309c0821170c20363a537d07f01a
Diffstat (limited to 'libhwc2.1/libmaindisplay')
-rw-r--r-- | libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp | 86 | ||||
-rw-r--r-- | libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h | 4 |
2 files changed, 67 insertions, 23 deletions
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp index 2607bb2..e21999c 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp @@ -248,6 +248,8 @@ int32_t ExynosPrimaryDisplayModule::setColorModeWithRenderIntent(int32_t mode, } mColorMode = (android_color_mode_t)mode; + mBrightnessController->updateColorRenderIntent(intent); + return HWC2_ERROR_NONE; } @@ -298,6 +300,26 @@ int32_t ExynosPrimaryDisplayModule::getClientTargetProperty( return ExynosDisplay::getClientTargetProperty(outClientTargetProperty); } +int32_t ExynosPrimaryDisplayModule::updateBrightnessTable() { + const IBrightnessTable* table = nullptr; + auto displayColorInterface = getDisplayColorInterface(); + if (displayColorInterface == nullptr) { + ALOGE("%s displaycolor interface not available!", __func__); + return HWC2_ERROR_NO_RESOURCES; + } + + auto displayType = getBuiltInDisplayType(); + auto ret = displayColorInterface->GetBrightnessTable(displayType, table); + if (ret != android::OK) { + ALOGE("%s brightness table not available!", __func__); + return HWC2_ERROR_NO_RESOURCES; + } + // BrightnessController is not ready until this step + mBrightnessController->updateBrightnessTable(table); + + return HWC2_ERROR_NONE; +} + int32_t ExynosPrimaryDisplayModule::setLayersColorData() { int32_t ret = 0; @@ -305,12 +327,34 @@ int32_t ExynosPrimaryDisplayModule::setLayersColorData() // TODO: b/212616164 remove dimSdrRatio float dimSdrRatio = mBrightnessController->getSdrDimRatioForInstantHbm(); + + // for client target + { + LayerColorData& layerColorData = mDisplaySceneInfo.getLayerColorDataInstance(layerNum); + + /* set layer data mapping info */ + if ((ret = mDisplaySceneInfo.setLayerDataMappingInfo(&mClientCompositionInfo, layerNum)) != + NO_ERROR) { + DISPLAY_LOGE("%s: setLayerDataMappingInfo fail for client composition", __func__); + return ret; + } + + if ((ret = mDisplaySceneInfo.setClientCompositionColorData(mClientCompositionInfo, + layerColorData, dimSdrRatio)) != + NO_ERROR) { + DISPLAY_LOGE("%s: setClientCompositionColorData fail", __func__); + return ret; + } + + layerColorData.is_client_target = true; + layerNum++; + } + for (uint32_t i = 0; i < mLayers.size(); i++) { ExynosLayer* layer = mLayers[i]; - if (layer->mValidateCompositionType == HWC2_COMPOSITION_CLIENT) - continue; + if (layer->mCompositionType == HWC2_COMPOSITION_CLIENT) continue; LayerColorData& layerColorData = mDisplaySceneInfo.getLayerColorDataInstance(layerNum); @@ -331,26 +375,7 @@ int32_t ExynosPrimaryDisplayModule::setLayersColorData() return ret; } - layerNum++; - } - - if (mClientCompositionInfo.mHasCompositionLayer) { - LayerColorData& layerColorData = - mDisplaySceneInfo.getLayerColorDataInstance(layerNum); - - /* set layer data mapping info */ - if ((ret = mDisplaySceneInfo.setLayerDataMappingInfo(&mClientCompositionInfo, - layerNum)) != NO_ERROR) { - DISPLAY_LOGE("%s: setLayerDataMappingInfo fail for client composition", __func__); - return ret; - } - - if ((ret = mDisplaySceneInfo.setClientCompositionColorData( - mClientCompositionInfo, layerColorData, dimSdrRatio)) != NO_ERROR) { - DISPLAY_LOGE("%s: setClientCompositionColorData fail", __func__); - return ret; - } - + layerColorData.is_client_target = false; layerNum++; } @@ -454,7 +479,7 @@ int32_t ExynosPrimaryDisplayModule::DisplaySceneInfo::setLayerDataMappingInfo( uint32_t oldPlaneId = prev_layerDataMappingInfo.count(layer) != 0 && prev_layerDataMappingInfo[layer].dppIdx == index ? prev_layerDataMappingInfo[layer].planeId - : UINT_MAX; + : LayerMappingInfo::kPlaneIdNone; layerDataMappingInfo.insert(std::make_pair(layer, LayerMappingInfo{ index, oldPlaneId })); return NO_ERROR; @@ -683,6 +708,7 @@ int32_t ExynosPrimaryDisplayModule::updateColorConversionInfo() return ret; } + updateBrightnessState(); /* clear flag and layer mapping info before setting */ mDisplaySceneInfo.reset(); @@ -710,6 +736,16 @@ int32_t ExynosPrimaryDisplayModule::updateColorConversionInfo() return ret; } +int32_t ExynosPrimaryDisplayModule::resetColorMappingInfo(ExynosMPPSource* mppSrc) { + if (mDisplaySceneInfo.layerDataMappingInfo.count(mppSrc) == 0) { + return -EINVAL; + } + + mDisplaySceneInfo.layerDataMappingInfo[mppSrc].planeId = + DisplaySceneInfo::LayerMappingInfo::kPlaneIdNone; + + return NO_ERROR; +} int32_t ExynosPrimaryDisplayModule::updatePresentColorConversionInfo() { int ret = NO_ERROR; @@ -724,6 +760,10 @@ int32_t ExynosPrimaryDisplayModule::updatePresentColorConversionInfo() if (refresh_rate > 0) { mDisplaySceneInfo.displayScene.refresh_rate = refresh_rate; } + auto operation_rate = moduleDisplayInterface->getOperationRate(); + if (operation_rate > 0) { + mDisplaySceneInfo.displayScene.operation_rate = static_cast<uint32_t>(operation_rate); + } mDisplaySceneInfo.displayScene.lhbm_on = mBrightnessController->isLhbmOn(); mDisplaySceneInfo.displayScene.dbv = mBrightnessController->getBrightnessLevel(); diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h index c60bcfd..1b1cade 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h @@ -116,6 +116,7 @@ class ExynosPrimaryDisplayModule : public ExynosPrimaryDisplay { HwcDimmingStage *outDimmingStage = nullptr) override; virtual int deliverWinConfigData(); virtual int32_t updateColorConversionInfo(); + virtual int32_t resetColorMappingInfo(ExynosMPPSource* mppSrc); virtual int32_t updatePresentColorConversionInfo(); virtual bool checkRrCompensationEnabled() { const DisplayType display = getDisplayTypeFromIndex(mIndex); @@ -148,6 +149,7 @@ class ExynosPrimaryDisplayModule : public ExynosPrimaryDisplay { uint32_t dppIdx; // assigned drm plane id in last color setting update uint32_t planeId; + static constexpr uint32_t kPlaneIdNone = std::numeric_limits<uint32_t>::max(); }; bool colorSettingChanged = false; bool displaySettingDelivered = false; @@ -262,6 +264,8 @@ class ExynosPrimaryDisplayModule : public ExynosPrimaryDisplay { // primary or secondary DisplayType getBuiltInDisplayType() { return getDisplayTypeFromIndex(mIndex); } + int32_t updateBrightnessTable(); + private: int32_t setLayersColorData(); DisplaySceneInfo mDisplaySceneInfo; |