Merge "gralloc: Fix array out of bound"
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp
index 3cc45be..1edfa3c 100644
--- a/gralloc/gr_utils.cpp
+++ b/gralloc/gr_utils.cpp
@@ -689,6 +689,9 @@
plane_info[0].step = step;
plane_info[0].stride = width;
plane_info[0].stride_bytes = static_cast<int32_t>(alignedWidth);
+ if (format == HAL_PIXEL_FORMAT_RAW16) {
+ plane_info[0].stride_bytes = static_cast<int32_t>(alignedWidth * GetBpp(format));
+ }
plane_info[0].scanlines = height;
plane_info[0].size = size;
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 7d41b7d..fa4bca9 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -146,11 +146,12 @@
error = comp_manager_->RegisterDisplay(display_id_, display_type_, display_attributes_,
hw_panel_info_, mixer_attributes_, fb_config_,
- &display_comp_ctx_, &(default_qos_data_.clock_hz));
+ &display_comp_ctx_, &(default_clock_hz_));
if (error != kErrorNone) {
DLOGW("Display %d comp manager registration failed!", display_id_);
goto CleanupOnError;
}
+ cached_qos_data_.clock_hz = default_clock_hz_;
if (color_modes_cs_.size() > 0) {
error = comp_manager_->SetColorModesInfo(display_comp_ctx_, color_modes_cs_);
@@ -567,10 +568,12 @@
if (error == kErrorNone) {
error = hw_intf_->PowerOff(teardown);
}
+ cached_qos_data_ = {};
+ cached_qos_data_.clock_hz = default_clock_hz_;
break;
case kStateOn:
- error = hw_intf_->PowerOn(default_qos_data_, release_fence);
+ error = hw_intf_->PowerOn(cached_qos_data_, release_fence);
if (error != kErrorNone) {
if (error == kErrorDeferred) {
pending_power_on_ = true;
@@ -582,16 +585,17 @@
error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes_,
hw_panel_info_, mixer_attributes_, fb_config_,
- &(default_qos_data_.clock_hz));
+ &(default_clock_hz_));
if (error != kErrorNone) {
return error;
}
+ cached_qos_data_.clock_hz = default_clock_hz_;
active = true;
break;
case kStateDoze:
- error = hw_intf_->Doze(default_qos_data_, release_fence);
+ error = hw_intf_->Doze(cached_qos_data_, release_fence);
if (error != kErrorNone) {
if (error == kErrorDeferred) {
pending_doze_ = true;
@@ -604,7 +608,7 @@
break;
case kStateDozeSuspend:
- error = hw_intf_->DozeSuspend(default_qos_data_, release_fence);
+ error = hw_intf_->DozeSuspend(cached_qos_data_, release_fence);
if (display_type_ != kBuiltIn) {
active = true;
}
@@ -1313,10 +1317,11 @@
error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
mixer_attributes, fb_config_,
- &(default_qos_data_.clock_hz));
+ &(default_clock_hz_));
if (error != kErrorNone) {
return error;
}
+ cached_qos_data_.clock_hz = default_clock_hz_;
bool disble_pu = true;
if (mixer_unchanged && panel_unchanged) {
@@ -1526,10 +1531,11 @@
error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes_, hw_panel_info_,
mixer_attributes_, variable_info,
- &(default_qos_data_.clock_hz));
+ &(default_clock_hz_));
if (error != kErrorNone) {
return error;
}
+ cached_qos_data_.clock_hz = default_clock_hz_;
fb_config_.x_pixels = width;
fb_config_.y_pixels = height;
@@ -1673,6 +1679,7 @@
hw_layer.input_buffer.release_fence, sdm_layer->input_buffer.release_fence);
}
}
+ cached_qos_data_ = hw_layers_.qos_data;
return;
}
diff --git a/sdm/libs/core/display_base.h b/sdm/libs/core/display_base.h
index f5e347a..1c43b76 100644
--- a/sdm/libs/core/display_base.h
+++ b/sdm/libs/core/display_base.h
@@ -239,7 +239,8 @@
std::string current_color_mode_ = "hal_native";
bool hw_recovery_logs_captured_ = false;
int disable_hw_recovery_dump_ = 0;
- HWQosData default_qos_data_;
+ HWQosData cached_qos_data_;
+ uint32_t default_clock_hz_ = 0;
bool drop_hw_vsync_ = false;
uint32_t current_refresh_rate_ = 0;
bool drop_skewed_vsync_ = false;
diff --git a/sdm/libs/core/display_builtin.cpp b/sdm/libs/core/display_builtin.cpp
index f9fcb22..a73bf2f 100644
--- a/sdm/libs/core/display_builtin.cpp
+++ b/sdm/libs/core/display_builtin.cpp
@@ -1146,10 +1146,11 @@
error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
mixer_attributes, fb_config_,
- &(default_qos_data_.clock_hz));
+ &(default_clock_hz_));
if (error != kErrorNone) {
return error;
}
+ cached_qos_data_.clock_hz = default_clock_hz_;
bool disble_pu = true;
if (mixer_unchanged && panel_unchanged) {
diff --git a/sdm/libs/core/display_virtual.cpp b/sdm/libs/core/display_virtual.cpp
index 1da0ece..db4107e 100644
--- a/sdm/libs/core/display_virtual.cpp
+++ b/sdm/libs/core/display_virtual.cpp
@@ -141,15 +141,16 @@
if (!display_comp_ctx_) {
error = comp_manager_->RegisterDisplay(display_id_, display_type_, display_attributes,
hw_panel_info, mixer_attributes, fb_config,
- &display_comp_ctx_, &(default_qos_data_.clock_hz));
+ &display_comp_ctx_, &(default_clock_hz_));
} else {
error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
mixer_attributes, fb_config,
- &(default_qos_data_.clock_hz));
+ &(default_clock_hz_));
}
if (error != kErrorNone) {
return error;
}
+ cached_qos_data_.clock_hz = default_clock_hz_;
display_attributes_ = display_attributes;
mixer_attributes_ = mixer_attributes;