sdm: color-manager: Detail Enhancer Enhancements.
Add Detail Enhancer configuration support in color-mode set
operation.
Change-Id: Ibdf3f70db911358db515d8d027cff312ec73e424
CRs-Fixed: 1075087
diff --git a/sdm/include/private/color_params.h b/sdm/include/private/color_params.h
index fdd0c9e..d2f8094 100644
--- a/sdm/include/private/color_params.h
+++ b/sdm/include/private/color_params.h
@@ -238,6 +238,7 @@
struct PPDETuningCfgData {
uint32_t cfg_en = 0;
PPDETuningCfg params;
+ bool cfg_pending = false;
};
struct SDEGamutCfg {
diff --git a/sdm/libs/hwc/hwc_color_manager.cpp b/sdm/libs/hwc/hwc_color_manager.cpp
index 1200de3..7bf49ff 100644
--- a/sdm/libs/hwc/hwc_color_manager.cpp
+++ b/sdm/libs/hwc/hwc_color_manager.cpp
@@ -423,65 +423,67 @@
DisplayDetailEnhancerData de_data;
PPDETuningCfgData *de_tuning_cfg_data = reinterpret_cast<PPDETuningCfgData*>(params);
- if (!de_tuning_cfg_data->cfg_en) {
- de_data.override_flags = kOverrideDEEnable;
- de_data.enable = 0;
- } else {
- de_data.override_flags = kOverrideDEEnable;
- de_data.enable = 1;
+ if (de_tuning_cfg_data->cfg_pending == true) {
+ if (!de_tuning_cfg_data->cfg_en) {
+ de_data.override_flags = kOverrideDEEnable;
+ de_data.enable = 0;
+ } else {
+ de_data.override_flags = kOverrideDEEnable;
+ de_data.enable = 1;
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
+ de_data.override_flags |= kOverrideDESharpen1;
+ de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.clip = de_tuning_cfg_data->params.clip;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
+ de_data.override_flags |= kOverrideDEClip;
+ de_data.clip = de_tuning_cfg_data->params.clip;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
+ de_data.override_flags |= kOverrideDEThrQuiet;
+ de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
+ de_data.override_flags |= kOverrideDEThrDieout;
+ de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_low = de_tuning_cfg_data->params.thr_low;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
+ de_data.override_flags |= kOverrideDEThrLow;
+ de_data.thr_low = de_tuning_cfg_data->params.thr_low;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_high = de_tuning_cfg_data->params.thr_high;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
+ de_data.override_flags |= kOverrideDEThrHigh;
+ de_data.thr_high = de_tuning_cfg_data->params.thr_high;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
- de_data.override_flags |= kOverrideDEEnable;
- switch (de_tuning_cfg_data->params.quality) {
- case kDeContentQualLow:
- de_data.quality_level = kContentQualityLow;
- break;
- case kDeContentQualMedium:
- de_data.quality_level = kContentQualityMedium;
- break;
- case kDeContentQualHigh:
- de_data.quality_level = kContentQualityHigh;
- break;
- case kDeContentQualUnknown:
- default:
- de_data.quality_level = kContentQualityUnknown;
- break;
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
+ switch (de_tuning_cfg_data->params.quality) {
+ case kDeContentQualLow:
+ de_data.quality_level = kContentQualityLow;
+ break;
+ case kDeContentQualMedium:
+ de_data.quality_level = kContentQualityMedium;
+ break;
+ case kDeContentQualHigh:
+ de_data.quality_level = kContentQualityHigh;
+ break;
+ case kDeContentQualUnknown:
+ default:
+ de_data.quality_level = kContentQualityUnknown;
+ break;
+ }
}
}
- }
- err = hwc_display->SetDetailEnhancerConfig(de_data);
- if (err) {
- DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+ err = hwc_display->SetDetailEnhancerConfig(de_data);
+ if (err) {
+ DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+ }
+ de_tuning_cfg_data->cfg_pending = false;
}
return err;
diff --git a/sdm/libs/hwc2/hwc_color_manager.cpp b/sdm/libs/hwc2/hwc_color_manager.cpp
index ec0dffe..c76f540 100644
--- a/sdm/libs/hwc2/hwc_color_manager.cpp
+++ b/sdm/libs/hwc2/hwc_color_manager.cpp
@@ -279,65 +279,67 @@
DisplayDetailEnhancerData de_data;
PPDETuningCfgData *de_tuning_cfg_data = reinterpret_cast<PPDETuningCfgData*>(params);
- if (!de_tuning_cfg_data->cfg_en) {
- de_data.override_flags = kOverrideDEEnable;
- de_data.enable = 0;
- } else {
- de_data.override_flags = kOverrideDEEnable;
- de_data.enable = 1;
+ if (de_tuning_cfg_data->cfg_pending == true) {
+ if (!de_tuning_cfg_data->cfg_en) {
+ de_data.override_flags = kOverrideDEEnable;
+ de_data.enable = 0;
+ } else {
+ de_data.override_flags = kOverrideDEEnable;
+ de_data.enable = 1;
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
+ de_data.override_flags |= kOverrideDESharpen1;
+ de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.clip = de_tuning_cfg_data->params.clip;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
+ de_data.override_flags |= kOverrideDEClip;
+ de_data.clip = de_tuning_cfg_data->params.clip;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
+ de_data.override_flags |= kOverrideDEThrQuiet;
+ de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
+ de_data.override_flags |= kOverrideDEThrDieout;
+ de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_low = de_tuning_cfg_data->params.thr_low;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
+ de_data.override_flags |= kOverrideDEThrLow;
+ de_data.thr_low = de_tuning_cfg_data->params.thr_low;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_high = de_tuning_cfg_data->params.thr_high;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
+ de_data.override_flags |= kOverrideDEThrHigh;
+ de_data.thr_high = de_tuning_cfg_data->params.thr_high;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
- de_data.override_flags |= kOverrideDEEnable;
- switch (de_tuning_cfg_data->params.quality) {
- case kDeContentQualLow:
- de_data.quality_level = kContentQualityLow;
- break;
- case kDeContentQualMedium:
- de_data.quality_level = kContentQualityMedium;
- break;
- case kDeContentQualHigh:
- de_data.quality_level = kContentQualityHigh;
- break;
- case kDeContentQualUnknown:
- default:
- de_data.quality_level = kContentQualityUnknown;
- break;
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
+ switch (de_tuning_cfg_data->params.quality) {
+ case kDeContentQualLow:
+ de_data.quality_level = kContentQualityLow;
+ break;
+ case kDeContentQualMedium:
+ de_data.quality_level = kContentQualityMedium;
+ break;
+ case kDeContentQualHigh:
+ de_data.quality_level = kContentQualityHigh;
+ break;
+ case kDeContentQualUnknown:
+ default:
+ de_data.quality_level = kContentQualityUnknown;
+ break;
+ }
}
}
- }
- err = hwc_display->SetDetailEnhancerConfig(de_data);
- if (err) {
- DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+ err = hwc_display->SetDetailEnhancerConfig(de_data);
+ if (err) {
+ DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+ }
+ de_tuning_cfg_data->cfg_pending = false;
}
return err;