hwc: Bump up version to 1.3
Increment hwc version to 1.3.
Create and use a converter from float source crop to integers.
Change-Id: I5e185195c975b3a9434c5d9dce9ae4757ff98739
(cherry picked from commit 7e5637c850bcdbe21784ca3bfa9668870306adff)
diff --git a/libhwcomposer/hwc.cpp b/libhwcomposer/hwc.cpp
index fb23470..b6952d3 100644
--- a/libhwcomposer/hwc.cpp
+++ b/libhwcomposer/hwc.cpp
@@ -842,7 +842,7 @@
//Setup HWC methods
dev->device.common.tag = HARDWARE_DEVICE_TAG;
- dev->device.common.version = HWC_DEVICE_API_VERSION_1_2;
+ dev->device.common.version = HWC_DEVICE_API_VERSION_1_3;
dev->device.common.module = const_cast<hw_module_t*>(module);
dev->device.common.close = hwc_device_close;
dev->device.prepare = hwc_prepare;
diff --git a/libhwcomposer/hwc_copybit.cpp b/libhwcomposer/hwc_copybit.cpp
index d54a5f2..2068732 100644
--- a/libhwcomposer/hwc_copybit.cpp
+++ b/libhwcomposer/hwc_copybit.cpp
@@ -393,7 +393,7 @@
}
}
// Copybit source rect
- hwc_rect_t sourceCrop = layer->sourceCrop;
+ hwc_rect_t sourceCrop = integerizeSourceCrop(layer->sourceCropf);
copybit_rect_t srcRect = {sourceCrop.left, sourceCrop.top,
sourceCrop.right,
sourceCrop.bottom};
diff --git a/libhwcomposer/hwc_dump_layers.cpp b/libhwcomposer/hwc_dump_layers.cpp
index 9f1b287..aeaac08 100644
--- a/libhwcomposer/hwc_dump_layers.cpp
+++ b/libhwcomposer/hwc_dump_layers.cpp
@@ -213,7 +213,7 @@
}
hwc_layer_1_t *layer = &hwLayers[layerIndex];
- hwc_rect_t sourceCrop = layer->sourceCrop;
+ hwc_rect_t sourceCrop = integerizeSourceCrop(layer->sourceCropf);
hwc_rect_t displayFrame = layer->displayFrame;
size_t numHwcRects = layer->visibleRegionScreen.numRects;
hwc_rect_t const *hwcRects = layer->visibleRegionScreen.rects;
diff --git a/libhwcomposer/hwc_fbupdate.cpp b/libhwcomposer/hwc_fbupdate.cpp
index 391b150..ce18695 100644
--- a/libhwcomposer/hwc_fbupdate.cpp
+++ b/libhwcomposer/hwc_fbupdate.cpp
@@ -134,7 +134,7 @@
ovutils::eIsFg isFg = ovutils::IS_FG_OFF;
ovutils::eZorder zOrder = static_cast<ovutils::eZorder>(fbZorder);
- hwc_rect_t sourceCrop = layer->sourceCrop;
+ hwc_rect_t sourceCrop = integerizeSourceCrop(layer->sourceCropf);
hwc_rect_t displayFrame = layer->displayFrame;
int transform = layer->transform;
int rotFlags = ovutils::ROT_FLAGS_NONE;
@@ -298,7 +298,7 @@
getBlending(layer->blending));
ov.setSource(pargR, destR);
- hwc_rect_t sourceCrop = layer->sourceCrop;
+ hwc_rect_t sourceCrop = integerizeSourceCrop(layer->sourceCropf);
hwc_rect_t displayFrame = layer->displayFrame;
const float xres = ctx->dpyAttr[mDpy].xres;
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index bb52728..ebfa22e 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -295,7 +295,7 @@
int hw_w = ctx->dpyAttr[mDpy].xres;
int hw_h = ctx->dpyAttr[mDpy].yres;
- hwc_rect_t crop = layer->sourceCrop;
+ hwc_rect_t crop = integerizeSourceCrop(layer->sourceCropf);
hwc_rect_t dst = layer->displayFrame;
if(dst.left < 0 || dst.top < 0 || dst.right > hw_w || dst.bottom > hw_h) {
@@ -1089,7 +1089,7 @@
hwc_layer_1_t* layer = &list->hwLayers[i];
private_handle_t *hnd = (private_handle_t *)layer->handle;
if (hnd) {
- hwc_rect_t crop = layer->sourceCrop;
+ hwc_rect_t crop = integerizeSourceCrop(layer->sourceCropf);
hwc_rect_t dst = layer->displayFrame;
trimLayer(ctx, mDpy, layer->transform, crop, dst);
float bpp = ((float)hnd->size) / (hnd->width * hnd->height);
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 61f3f1c..ee97de5 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -611,7 +611,7 @@
int dst_w, dst_h, src_w, src_h;
hwc_rect_t displayFrame = layer->displayFrame;
- hwc_rect_t sourceCrop = layer->sourceCrop;
+ hwc_rect_t sourceCrop = integerizeSourceCrop(layer->sourceCropf);
trimLayer(ctx, dpy, layer->transform, sourceCrop, displayFrame);
dst_w = displayFrame.right - displayFrame.left;
@@ -637,7 +637,7 @@
int hw_h = ctx->dpyAttr[dpy].yres;
hwc_rect_t cropL, dstL, cropR, dstR;
const int lSplit = getLeftSplit(ctx, dpy);
- hwc_rect_t sourceCrop = layer->sourceCrop;
+ hwc_rect_t sourceCrop = integerizeSourceCrop(layer->sourceCropf);
hwc_rect_t displayFrame = layer->displayFrame;
private_handle_t *hnd = (private_handle_t *)layer->handle;
trimLayer(ctx, dpy, layer->transform, sourceCrop, displayFrame);
@@ -1394,7 +1394,7 @@
MetaData_t *metadata = (MetaData_t *)hnd->base_metadata;
- hwc_rect_t crop = layer->sourceCrop;
+ hwc_rect_t crop = integerizeSourceCrop(layer->sourceCropf);
hwc_rect_t dst = layer->displayFrame;
int transform = layer->transform;
eTransform orient = static_cast<eTransform>(transform);
@@ -1525,7 +1525,7 @@
int hw_w = ctx->dpyAttr[dpy].xres;
int hw_h = ctx->dpyAttr[dpy].yres;
- hwc_rect_t crop = layer->sourceCrop;
+ hwc_rect_t crop = integerizeSourceCrop(layer->sourceCropf);
hwc_rect_t dst = layer->displayFrame;
int transform = layer->transform;
eTransform orient = static_cast<eTransform>(transform);
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index 1f1953b..d1fbad8 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -23,6 +23,7 @@
#define HWC_REMOVE_DEPRECATED_VERSIONS 1
#include <fcntl.h>
+#include <math.h>
#include <hardware/hwcomposer.h>
#include <gr.h>
#include <gralloc_priv.h>
@@ -163,6 +164,15 @@
return mRot[index];
}
+inline hwc_rect_t integerizeSourceCrop(const hwc_frect_t& cropF) {
+ hwc_rect_t cropI = {0};
+ cropI.left = int(ceilf(cropF.left));
+ cropI.top = int(ceilf(cropF.top));
+ cropI.right = int(floorf(cropF.right));
+ cropI.bottom = int(floorf(cropF.bottom));
+ return cropI;
+}
+
// -----------------------------------------------------------------------------
// Utility functions - implemented in hwc_utils.cpp
void dumpLayer(hwc_layer_1_t const* l);