Merge "qdutils: Use HW revision from linux header if available"
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index 9221b71..3d391ab 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -325,8 +325,8 @@
int crop_h = crop.bottom - crop.top;
int dst_w = dst.right - dst.left;
int dst_h = dst.bottom - dst.top;
- float w_dscale = ceilf((float)crop_w / (float)dst_w);
- float h_dscale = ceilf((float)crop_h / (float)dst_h);
+ float w_scale = ((float)crop_w / (float)dst_w);
+ float h_scale = ((float)crop_h / (float)dst_h);
/* Workaround for MDP HW limitation in DSI command mode panels where
* FPS will not go beyond 30 if buffers on RGB pipes are of width or height
@@ -337,9 +337,12 @@
if((crop_w < 5)||(crop_h < 5))
return false;
- if((w_dscale > 1.0f) || (h_dscale > 1.0f)) {
+ if((w_scale > 1.0f) || (h_scale > 1.0f)) {
const uint32_t downscale =
qdutils::MDPVersion::getInstance().getMaxMDPDownscale();
+ const float w_dscale = w_scale;
+ const float h_dscale = h_scale;
+
if(ctx->mMDP.version >= qdutils::MDSS_V5) {
/* Workaround for downscales larger than 4x.
* Will be removed once decimator block is enabled for MDSS
@@ -358,6 +361,16 @@
}
}
+ if((w_scale < 1.0f) || (h_scale < 1.0f)) {
+ const uint32_t upscale =
+ qdutils::MDPVersion::getInstance().getMaxMDPUpscale();
+ const float w_uscale = 1.0f / w_scale;
+ const float h_uscale = 1.0f / h_scale;
+
+ if(w_uscale > upscale || h_uscale > upscale)
+ return false;
+ }
+
return true;
}
diff --git a/libhwcomposer/hwc_mdpcomp.h b/libhwcomposer/hwc_mdpcomp.h
index 05a560b..512a120 100644
--- a/libhwcomposer/hwc_mdpcomp.h
+++ b/libhwcomposer/hwc_mdpcomp.h
@@ -25,7 +25,7 @@
#include <cutils/properties.h>
#include <overlay.h>
-#define DEFAULT_IDLE_TIME 2000
+#define DEFAULT_IDLE_TIME 70
#define MAX_PIPES_PER_MIXER 4
namespace overlay {
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index ed3454a..fa021cc 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -1093,7 +1093,8 @@
if(!needsScaling(&list->hwLayers[j])) {
hwc_layer_1_t* layer = (hwc_layer_1_t*)&list->hwLayers[j];
hwc_rect_t& bottomframe = layer->displayFrame;
- hwc_rect_t& bottomCrop = layer->sourceCrop;
+ hwc_rect_t bottomCrop =
+ integerizeSourceCrop(layer->sourceCropf);
int transform =layer->transform;
hwc_rect_t irect = getIntersection(bottomframe, topframe);
@@ -1103,7 +1104,11 @@
dest_rect = deductRect(bottomframe, irect);
qhwc::calculate_crop_rects(bottomCrop, bottomframe,
dest_rect, transform);
-
+ //Update layer sourceCropf
+ layer->sourceCropf.left = bottomCrop.left;
+ layer->sourceCropf.top = bottomCrop.top;
+ layer->sourceCropf.right = bottomCrop.right;
+ layer->sourceCropf.bottom = bottomCrop.bottom;
}
}
j--;
diff --git a/libqdutils/mdp_version.cpp b/libqdutils/mdp_version.cpp
index d372785..b743d7a 100644
--- a/libqdutils/mdp_version.cpp
+++ b/libqdutils/mdp_version.cpp
@@ -272,6 +272,10 @@
return mMDPDownscale;
}
+uint32_t MDPVersion::getMaxMDPUpscale() {
+ return mMDPUpscale;
+}
+
bool MDPVersion::supportsBWC() {
// BWC - Bandwidth Compression
return (mFeatures & MDP_BWC_EN);
diff --git a/libqdutils/mdp_version.h b/libqdutils/mdp_version.h
index 56dbc72..853b9f5 100644
--- a/libqdutils/mdp_version.h
+++ b/libqdutils/mdp_version.h
@@ -106,6 +106,7 @@
uint8_t getDMAPipes() { return mDMAPipes; }
bool supportsDecimation();
uint32_t getMaxMDPDownscale();
+ uint32_t getMaxMDPUpscale();
bool supportsBWC();
bool supportsMacroTile();
int getLeftSplit() { return mSplit.left(); }