diff options
author | Naseer Ahmed <naseer@codeaurora.org> | 2018-05-03 12:29:43 -0400 |
---|---|---|
committer | Naseer Ahmed <naseer@codeaurora.org> | 2018-05-12 12:52:27 -0400 |
commit | 613a0ecb827de5b5abf589996d2b76dcf93071de (patch) | |
tree | 73e6bf0217f6f1d8173662a2f05e3ce911496c4e /sdm | |
parent | 5a73a6ab8ba60bb2ccbef700ae7bc87b9175128d (diff) | |
download | android_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.cpp | 183 | ||||
-rw-r--r-- | sdm/libs/core/display_base.h | 6 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_display.cpp | 7 |
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; } |