Merge "sdm: color-manager: Detail Enhancer Enhancements."
diff --git a/sdm/include/private/color_params.h b/sdm/include/private/color_params.h
index d2f8094..91499f9 100644
--- a/sdm/include/private/color_params.h
+++ b/sdm/include/private/color_params.h
@@ -51,6 +51,7 @@
kEnableFrameCapture = BITMAP(6),
kDisableFrameCapture = BITMAP(7),
kConfigureDetailedEnhancer = BITMAP(8),
+ kGetDetailedEnhancerData = BITMAP(21),
kNoAction = BITMAP(31),
};
diff --git a/sdm/libs/hwc/hwc_color_manager.cpp b/sdm/libs/hwc/hwc_color_manager.cpp
index bfa827e..471ca49 100644
--- a/sdm/libs/hwc/hwc_color_manager.cpp
+++ b/sdm/libs/hwc/hwc_color_manager.cpp
@@ -417,9 +417,8 @@
return ret;
}
-int HWCColorManager::SetDetailedEnhancer(void *params, HWCDisplay *hwc_display) {
- SCOPE_LOCK(locker_);
- DisplayError err = kErrorNone;
+int HWCColorManager::SetHWDetailedEnhancerConfig(void *params, HWCDisplay *hwc_display) {
+ int err = -1;
DisplayDetailEnhancerData de_data;
PPDETuningCfgData *de_tuning_cfg_data = reinterpret_cast<PPDETuningCfgData*>(params);
@@ -485,7 +484,31 @@
}
de_tuning_cfg_data->cfg_pending = false;
}
+ return err;
+}
+void HWCColorManager::SetColorModeDetailEnhancer(HWCDisplay *hwc_display) {
+ SCOPE_LOCK(locker_);
+ int err = -1;
+ PPPendingParams pending_action;
+ PPDisplayAPIPayload req_payload;
+
+ pending_action.action = kGetDetailedEnhancerData;
+ pending_action.params = NULL;
+
+ if (hwc_display) {
+ err = hwc_display->ColorSVCRequestRoute(req_payload, NULL, &pending_action);
+ if (!err && pending_action.action == kConfigureDetailedEnhancer) {
+ err = SetHWDetailedEnhancerConfig(pending_action.params, hwc_display);
+ }
+ }
+ return;
+}
+
+int HWCColorManager::SetDetailedEnhancer(void *params, HWCDisplay *hwc_display) {
+ SCOPE_LOCK(locker_);
+ int err = -1;
+ err = SetHWDetailedEnhancerConfig(params, hwc_display);
return err;
}
diff --git a/sdm/libs/hwc/hwc_color_manager.h b/sdm/libs/hwc/hwc_color_manager.h
index 792d5ca..0f4247d 100644
--- a/sdm/libs/hwc/hwc_color_manager.h
+++ b/sdm/libs/hwc/hwc_color_manager.h
@@ -120,6 +120,8 @@
bool SolidFillLayersSet(hwc_display_contents_1_t **displays, HWCDisplay *hwc_display);
int SetFrameCapture(void *params, bool enable, HWCDisplay *hwc_display);
int SetDetailedEnhancer(void *params, HWCDisplay *hwc_display);
+ void SetColorModeDetailEnhancer(HWCDisplay *hwc_display);
+ int SetHWDetailedEnhancerConfig(void *params, HWCDisplay *hwc_display);
protected:
int CreateSolidFillLayers(HWCDisplay *hwc_display);
diff --git a/sdm/libs/hwc/hwc_session.cpp b/sdm/libs/hwc/hwc_session.cpp
index 2d0605a..8f829ea 100644
--- a/sdm/libs/hwc/hwc_session.cpp
+++ b/sdm/libs/hwc/hwc_session.cpp
@@ -373,6 +373,7 @@
int ret = hwc_session->color_mgr_->SolidFillLayersSet(displays, primary_display);
if (ret)
return 0;
+ hwc_session->color_mgr_->SetColorModeDetailEnhancer(primary_display);
}
}
diff --git a/sdm/libs/hwc2/hwc_color_manager.cpp b/sdm/libs/hwc2/hwc_color_manager.cpp
index c76f540..61618cb 100644
--- a/sdm/libs/hwc2/hwc_color_manager.cpp
+++ b/sdm/libs/hwc2/hwc_color_manager.cpp
@@ -273,9 +273,8 @@
return ret;
}
-int HWCColorManager::SetDetailedEnhancer(void *params, HWCDisplay *hwc_display) {
- SCOPE_LOCK(locker_);
- DisplayError err = kErrorNone;
+int HWCColorManager::SetHWDetailedEnhancerConfig(void *params, HWCDisplay *hwc_display) {
+ int err = -1;
DisplayDetailEnhancerData de_data;
PPDETuningCfgData *de_tuning_cfg_data = reinterpret_cast<PPDETuningCfgData*>(params);
@@ -341,7 +340,31 @@
}
de_tuning_cfg_data->cfg_pending = false;
}
+ return err;
+}
+void HWCColorManager::SetColorModeDetailEnhancer(HWCDisplay *hwc_display) {
+ SCOPE_LOCK(locker_);
+ int err = -1;
+ PPPendingParams pending_action;
+ PPDisplayAPIPayload req_payload;
+
+ pending_action.action = kGetDetailedEnhancerData;
+ pending_action.params = NULL;
+
+ if (hwc_display) {
+ err = hwc_display->ColorSVCRequestRoute(req_payload, NULL, &pending_action);
+ if (!err && pending_action.action == kConfigureDetailedEnhancer) {
+ err = SetHWDetailedEnhancerConfig(pending_action.params, hwc_display);
+ }
+ }
+ return;
+}
+
+int HWCColorManager::SetDetailedEnhancer(void *params, HWCDisplay *hwc_display) {
+ SCOPE_LOCK(locker_);
+ int err = -1;
+ err = SetHWDetailedEnhancerConfig(params, hwc_display);
return err;
}
diff --git a/sdm/libs/hwc2/hwc_color_manager.h b/sdm/libs/hwc2/hwc_color_manager.h
index 62b6bce..a407f85 100644
--- a/sdm/libs/hwc2/hwc_color_manager.h
+++ b/sdm/libs/hwc2/hwc_color_manager.h
@@ -117,6 +117,8 @@
int SetSolidFill(const void *params, bool enable, HWCDisplay *hwc_display);
int SetFrameCapture(void *params, bool enable, HWCDisplay *hwc_display);
int SetDetailedEnhancer(void *params, HWCDisplay *hwc_display);
+ void SetColorModeDetailEnhancer(HWCDisplay *hwc_display);
+ int SetHWDetailedEnhancerConfig(void *params, HWCDisplay *hwc_display);
protected:
int CreateSolidFillLayers(HWCDisplay *hwc_display);
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index 8fcc255..79a3a37 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -574,6 +574,10 @@
if (hwc_session->need_invalidate_) {
hwc_session->callbacks_.Refresh(display);
}
+
+ if (hwc_session->color_mgr_) {
+ hwc_session->color_mgr_->SetColorModeDetailEnhancer(hwc_session->hwc_display_[display]);
+ }
}
status = hwc_session->hwc_display_[display]->Validate(out_num_types, out_num_requests);