diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2018-05-08 23:08:57 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-05-08 23:08:57 -0700 |
commit | 13944ed415a7357ef39c19562936fd0588df161e (patch) | |
tree | 026c166b4c9fe5c0451b7463e11da0332d314a69 /sdm | |
parent | 1f4f1bdbb98b15af2abc48cbf5764931f0f1e26f (diff) | |
parent | 648ef743024c5ed1a5787a7bf9a2ee6cad9e659e (diff) | |
download | android_hardware_qcom_sdm710_display-13944ed415a7357ef39c19562936fd0588df161e.tar.gz android_hardware_qcom_sdm710_display-13944ed415a7357ef39c19562936fd0588df161e.tar.bz2 android_hardware_qcom_sdm710_display-13944ed415a7357ef39c19562936fd0588df161e.zip |
Merge "hwc2: Avoid overwriting metadata refresh rate."
Diffstat (limited to 'sdm')
-rw-r--r-- | sdm/libs/core/display_base.cpp | 10 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_display.cpp | 16 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_display.h | 1 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_layers.cpp | 1 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_layers.h | 2 |
5 files changed, 25 insertions, 5 deletions
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp index 0422b586..656a8743 100644 --- a/sdm/libs/core/display_base.cpp +++ b/sdm/libs/core/display_base.cpp @@ -404,8 +404,14 @@ DisplayError DisplayBase::GetConfig(DisplayConfigFixedInfo *fixed_info) { HWResourceInfo hw_resource_info = HWResourceInfo(); hw_info_intf_->GetHWResourceInfo(&hw_resource_info); - // hdr can be supported by display when target and panel supports HDR. - fixed_info->hdr_supported = (hw_resource_info.has_hdr && hw_panel_info_.hdr_enabled); + bool hdr_supported = hw_resource_info.has_hdr; + HWDisplayInterfaceInfo hw_disp_info = {}; + hw_info_intf_->GetFirstDisplayInterfaceType(&hw_disp_info); + if (hw_disp_info.type == kHDMI) { + hdr_supported = (hdr_supported && hw_panel_info_.hdr_enabled); + } + + fixed_info->hdr_supported = hdr_supported; // Populate luminance values only if hdr will be supported on that display fixed_info->max_luminance = fixed_info->hdr_supported ? hw_panel_info_.peak_luminance: 0; fixed_info->average_luminance = fixed_info->hdr_supported ? hw_panel_info_.average_luminance : 0; diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp index 28a2a5ef..8888f114 100644 --- a/sdm/libs/hwc2/hwc_display.cpp +++ b/sdm/libs/hwc2/hwc_display.cpp @@ -596,11 +596,10 @@ void HWCDisplay::BuildLayerStack() { layer->src_rect.bottom = layer_buffer->height; } - if (layer->frame_rate > metadata_refresh_rate_) { + if (hwc_layer->HasMetaDataRefreshRate() && layer->frame_rate > metadata_refresh_rate_) { metadata_refresh_rate_ = SanitizeRefreshRate(layer->frame_rate); - } else { - layer->frame_rate = current_refresh_rate_; } + display_rect_ = Union(display_rect_, layer->dst_rect); geometry_changes_ |= hwc_layer->GetGeometryChanges(); @@ -1054,6 +1053,7 @@ HWC2::Error HWCDisplay::PrepareLayerStack(uint32_t *out_num_types, uint32_t *out return HWC2::Error::BadDisplay; } + UpdateRefreshRate(); if (!skip_prepare_) { DisplayError error = display_intf_->Prepare(&layer_stack_); if (error != kErrorNone) { @@ -2145,4 +2145,14 @@ HWC2::Error HWCDisplay::GetValidateDisplayOutput(uint32_t *out_num_types, return ((*out_num_types > 0) ? HWC2::Error::HasChanges : HWC2::Error::None); } +void HWCDisplay::UpdateRefreshRate() { + for (auto hwc_layer : layer_set_) { + if (hwc_layer->HasMetaDataRefreshRate()) { + continue; + } + auto layer = hwc_layer->GetSDMLayer(); + layer->frame_rate = current_refresh_rate_; + } +} + } // namespace sdm diff --git a/sdm/libs/hwc2/hwc_display.h b/sdm/libs/hwc2/hwc_display.h index d2620efb..86d9462f 100644 --- a/sdm/libs/hwc2/hwc_display.h +++ b/sdm/libs/hwc2/hwc_display.h @@ -328,6 +328,7 @@ class HWCDisplay : public DisplayEventHandler { private: void DumpInputBuffers(void); + void UpdateRefreshRate(); qService::QService *qservice_ = NULL; DisplayClass display_class_; uint32_t geometry_changes_ = GeometryChanges::kNone; diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp index 6dcfa233..3fb1afab 100644 --- a/sdm/libs/hwc2/hwc_layers.cpp +++ b/sdm/libs/hwc2/hwc_layers.cpp @@ -736,6 +736,7 @@ DisplayError HWCLayer::SetMetaData(const private_handle_t *pvt_handle, Layer *la uint32_t frame_rate = layer->frame_rate; if (getMetaData(handle, GET_REFRESH_RATE, &fps) == 0) { frame_rate = (fps != 0) ? RoundToStandardFPS(fps) : layer->frame_rate; + has_metadata_refresh_rate_ = true; } int32_t interlaced = 0; diff --git a/sdm/libs/hwc2/hwc_layers.h b/sdm/libs/hwc2/hwc_layers.h index 92267445..41ec6ede 100644 --- a/sdm/libs/hwc2/hwc_layers.h +++ b/sdm/libs/hwc2/hwc_layers.h @@ -99,6 +99,7 @@ class HWCLayer { bool IsScalingPresent(); bool IsRotationPresent(); bool IsNonIntegralSourceCrop() { return non_integral_source_crop_; } + bool HasMetaDataRefreshRate() { return has_metadata_refresh_rate_; } private: Layer *layer_ = nullptr; @@ -115,6 +116,7 @@ class HWCLayer { bool single_buffer_ = false; int buffer_fd_ = -1; bool non_integral_source_crop_ = false; + bool has_metadata_refresh_rate_ = false; // Composition requested by client(SF) HWC2::Composition client_requested_ = HWC2::Composition::Device; |