summaryrefslogtreecommitdiffstats
path: root/sdm
diff options
context:
space:
mode:
authorNaseer Ahmed <naseer@codeaurora.org>2018-05-03 12:29:43 -0400
committerNaseer Ahmed <naseer@codeaurora.org>2018-05-12 12:52:27 -0400
commit613a0ecb827de5b5abf589996d2b76dcf93071de (patch)
tree73e6bf0217f6f1d8173662a2f05e3ce911496c4e /sdm
parent5a73a6ab8ba60bb2ccbef700ae7bc87b9175128d (diff)
downloadandroid_hardware_qcom_sdm710_display-613a0ecb827de5b5abf589996d2b76dcf93071de.tar.gz
android_hardware_qcom_sdm710_display-613a0ecb827de5b5abf589996d2b76dcf93071de.tar.bz2
android_hardware_qcom_sdm710_display-613a0ecb827de5b5abf589996d2b76dcf93071de.zip
sdm: Simplify HDR mode handling
* HDR mode is now set by the framework, remove local mode set. * Disable GPU tonemapper. Change-Id: I89b8e665af7b49aa487bbca87897a2ca68a59a20 CRs-Fixed: 2236509
Diffstat (limited to 'sdm')
-rw-r--r--sdm/libs/core/display_base.cpp183
-rw-r--r--sdm/libs/core/display_base.h6
-rw-r--r--sdm/libs/hwc2/hwc_display.cpp7
3 files changed, 11 insertions, 185 deletions
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 656a8743..5072a23f 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -234,12 +234,6 @@ DisplayError DisplayBase::Prepare(LayerStack *layer_stack) {
return error;
}
- error = HandleHDR(layer_stack);
- if (error != kErrorNone) {
- DLOGW("HandleHDR failed");
- return error;
- }
-
if (color_mgr_ && color_mgr_->NeedsPartialUpdateDisable()) {
DisablePartialUpdateOneFrame();
}
@@ -272,16 +266,7 @@ DisplayError DisplayBase::Prepare(LayerStack *layer_stack) {
comp_manager_->PostPrepare(display_comp_ctx_, &hw_layers_);
- if (error != kErrorNone) {
- return error;
- }
-
- error = ValidateHDR(layer_stack);
- if (error != kErrorNone) {
- DLOGW("ValidateHDR failed");
- }
-
- DLOGI_IF(kTagDisplay, "Exiting Prepare for display type : %d", display_type_);
+ DLOGI_IF(kTagDisplay, "Exiting Prepare for display type : %d error: %d", display_type_, error);
return error;
}
@@ -820,61 +805,21 @@ DisplayError DisplayBase::SetColorMode(const std::string &color_mode) {
return kErrorNotSupported;
}
- DynamicRangeType dynamic_range_type;
- if (IsSupportColorModeAttribute(color_mode)) {
- auto it_mode = color_mode_attr_map_.find(color_mode);
- std::string dynamic_range;
- GetValueOfModeAttribute(it_mode->second, kDynamicRangeAttribute, &dynamic_range);
- if (dynamic_range == kHdr) {
- dynamic_range_type = kHdrType;
- } else {
- dynamic_range_type = kSdrType;
- }
- } else {
- if (color_mode.find("hal_hdr") != std::string::npos) {
- dynamic_range_type = kHdrType;
- } else {
- dynamic_range_type = kSdrType;
- }
- }
-
DisplayError error = kErrorNone;
- if (disable_hdr_lut_gen_) {
- error = SetColorModeInternal(color_mode);
- if (error != kErrorNone) {
- return error;
- }
- // Store the new SDR color mode request by client
- if (dynamic_range_type == kSdrType) {
- current_color_mode_ = color_mode;
- }
+ error = SetColorModeInternal(color_mode);
+ if (error != kErrorNone) {
return error;
}
- if (hdr_playback_) {
- // HDR playback on, If incoming mode is SDR mode,
- // cache the mode and apply it after HDR playback stop.
- if (dynamic_range_type == kHdrType) {
- error = SetColorModeInternal(color_mode);
- if (error != kErrorNone) {
- return error;
- }
- } else if (dynamic_range_type == kSdrType) {
- current_color_mode_ = color_mode;
- }
- } else {
- // HDR playback off, do not apply HDR mode
- if (dynamic_range_type == kHdrType) {
- DLOGE("Failed: Forbid setting HDR Mode : %s when HDR playback off", color_mode.c_str());
- return kErrorNotSupported;
- }
- error = SetColorModeInternal(color_mode);
- if (error != kErrorNone) {
- return error;
- }
- current_color_mode_ = color_mode;
+ std::string dynamic_range = kSdr;
+ if (IsSupportColorModeAttribute(color_mode)) {
+ auto it_mode = color_mode_attr_map_.find(color_mode);
+ GetValueOfModeAttribute(it_mode->second, kDynamicRangeAttribute, &dynamic_range);
}
+ comp_manager_->ControlDpps(dynamic_range != kHdr);
+
+ current_color_mode_ = color_mode;
return error;
}
@@ -927,25 +872,6 @@ bool DisplayBase::IsSupportColorModeAttribute(const std::string &color_mode) {
return true;
}
-DisplayError DisplayBase::GetHdrColorMode(std::string *color_mode, bool *found_hdr) {
- if (!found_hdr || !color_mode) {
- return kErrorParameters;
- }
- *found_hdr = false;
- // get the default HDR mode which is value of picture quality equal to "standard"
- for (auto &it_hdr : color_mode_attr_map_) {
- std::string dynamic_range, pic_quality;
- GetValueOfModeAttribute(it_hdr.second, kDynamicRangeAttribute, &dynamic_range);
- GetValueOfModeAttribute(it_hdr.second, kPictureQualityAttribute, &pic_quality);
- if (dynamic_range == kHdr && pic_quality == kStandard) {
- *color_mode = it_hdr.first;
- *found_hdr = true;
- }
- }
-
- return kErrorNone;
-}
-
DisplayError DisplayBase::SetColorTransform(const uint32_t length, const double *color_transform) {
lock_guard<recursive_mutex> obj(recursive_mutex_);
if (!color_mgr_) {
@@ -1477,95 +1403,6 @@ DisplayError DisplayBase::InitializeColorModes() {
return kErrorNone;
}
-DisplayError DisplayBase::SetHDRMode(bool set) {
- DisplayError error = kErrorNone;
- std::string color_mode = "";
-
- if (color_mgr_ && !disable_hdr_lut_gen_) {
- // Do not apply HDR Mode when hdr lut generation is disabled
- if (set) {
- color_mode = "hal_hdr";
- if (IsSupportColorModeAttribute(current_color_mode_)) {
- bool found_hdr = false;
- error = GetHdrColorMode(&color_mode, &found_hdr);
- if (!found_hdr) {
- color_mode = "hal_hdr";
- }
- }
- } else {
- // HDR playback off - set prev mode
- color_mode = current_color_mode_;
- }
- DLOGI("Setting color mode = %s", color_mode.c_str());
- error = SetColorModeInternal(color_mode);
- }
-
- // DPPS and HDR features are mutually exclusive
- comp_manager_->ControlDpps(!set);
- hdr_mode_ = set;
-
- return error;
-}
-
-DisplayError DisplayBase::HandleHDR(LayerStack *layer_stack) {
- DisplayError error = kErrorNone;
-
- if (display_type_ != kPrimary) {
- // Handling is needed for only primary displays
- return kErrorNone;
- }
-
- if (!layer_stack->flags.hdr_present) {
- // HDR playback off - set prev mode
- if (hdr_playback_) {
- hdr_playback_ = false;
- if (hdr_mode_) {
- error = SetHDRMode(false);
- }
- }
- } else {
- // hdr is present
- if (!hdr_playback_ && !layer_stack->flags.animating) {
- // hdr is starting
- hdr_playback_ = true;
- error = SetHDRMode(true);
- if (error != kErrorNone) {
- DLOGW("Failed to set HDR mode");
- }
- } else if (hdr_playback_ && !hdr_mode_) {
- error = SetHDRMode(true);
- if (error != kErrorNone) {
- DLOGW("Failed to set HDR mode");
- }
- }
- }
-
- return error;
-}
-
-DisplayError DisplayBase::ValidateHDR(LayerStack *layer_stack) {
- DisplayError error = kErrorNone;
-
- if (display_type_ != kPrimary) {
- // Handling is needed for only primary displays
- return kErrorNone;
- }
-
- if (hdr_playback_) {
- // HDR color mode is set when hdr layer is present in layer_stack.
- // If client flags HDR layer as skipped, then blending happens
- // in SDR color space. Hence, need to restore the SDR color mode.
- if (layer_stack->blend_cs.first != ColorPrimaries_BT2020) {
- error = SetHDRMode(false);
- if (error != kErrorNone) {
- DLOGW("Failed to restore SDR mode");
- }
- }
- }
-
- return kErrorNone;
-}
-
DisplayError DisplayBase::GetClientTargetSupport(uint32_t width, uint32_t height,
LayerBufferFormat format,
const ColorMetaData &color_metadata) {
diff --git a/sdm/libs/core/display_base.h b/sdm/libs/core/display_base.h
index 5463befb..fcc076cd 100644
--- a/sdm/libs/core/display_base.h
+++ b/sdm/libs/core/display_base.h
@@ -122,9 +122,6 @@ class DisplayBase : public DisplayInterface {
virtual DisplayError ValidateGPUTargetParams();
void CommitLayerParams(LayerStack *layer_stack);
void PostCommitLayerParams(LayerStack *layer_stack);
- DisplayError HandleHDR(LayerStack *layer_stack);
- DisplayError ValidateHDR(LayerStack *layer_stack);
- DisplayError SetHDRMode(bool set);
DisplayError ValidateScaling(uint32_t width, uint32_t height);
DisplayError ValidateDataspace(const ColorMetaData &color_metadata);
@@ -139,7 +136,6 @@ class DisplayBase : public DisplayInterface {
DisplayError SetColorModeInternal(const std::string &color_mode);
DisplayError GetValueOfModeAttribute(const AttrVal &attr, const std::string &type,
std::string *value);
- DisplayError GetHdrColorMode(std::string *color_mode, bool *found_hdr);
bool IsSupportColorModeAttribute(const std::string &color_mode);
DisplayState GetLastPowerMode();
void SetPUonDestScaler();
@@ -182,8 +178,6 @@ class DisplayBase : public DisplayInterface {
uint32_t req_mixer_width_ = 0;
uint32_t req_mixer_height_ = 0;
std::string current_color_mode_ = "hal_native";
- bool hdr_playback_ = false;
- bool hdr_mode_ = false;
int disable_hdr_lut_gen_ = 0;
DisplayState last_power_mode_ = kStateOff;
bool drop_hw_vsync_ = false;
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index 091ca54b..6f5549a6 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -358,8 +358,6 @@ int HWCDisplay::Init() {
return -EINVAL;
}
- tone_mapper_ = new HWCToneMapper(buffer_allocator_);
-
display_intf_->GetRefreshRateRange(&min_refresh_rate_, &max_refresh_rate_);
current_refresh_rate_ = max_refresh_rate_;
@@ -386,9 +384,6 @@ int HWCDisplay::Deinit() {
delete color_mode_;
}
- delete tone_mapper_;
- tone_mapper_ = nullptr;
-
return 0;
}
@@ -534,7 +529,7 @@ void HWCDisplay::BuildLayerStack() {
layer_stack_.flags.hdr_present = true;
}
- if (hwc_layer->IsNonIntegralSourceCrop() && !is_secure && !hdr_layer) {
+ if (hwc_layer->IsNonIntegralSourceCrop() && !is_secure) {
layer->flags.skip = true;
}