summaryrefslogtreecommitdiff
authorJiacheng Mei <jiacheng.mei@amlogic.com>2017-07-20 12:10:38 (GMT)
committer Jiacheng Mei <jiacheng.mei@amlogic.com>2017-07-28 02:36:27 (GMT)
commitd3683b5586ad280c7e24b72d7d6fa50381d4cc59 (patch)
tree055ecba586636ffad77fa33bcbfce554c8c130d8
parent7b79336602096c090ffa135df14acb966232317a (diff)
downloadgralloc-d3683b5586ad280c7e24b72d7d6fa50381d4cc59.zip
gralloc-d3683b5586ad280c7e24b72d7d6fa50381d4cc59.tar.gz
gralloc-d3683b5586ad280c7e24b72d7d6fa50381d4cc59.tar.bz2
gralloc: fix format HAL_PIXEL_FORMAT_YCbCr_420_888 align problem for cts
PD# 146294 use YUV_MALI_PLANE_ALIGN for format HAL_PIXEL_FORMAT_YCbCr_420_888 Change-Id: Id5e829d4772241cfab0139ad39a8d11587130cf5
Diffstat
-rw-r--r--alloc_device.cpp14
-rw-r--r--gralloc_module.cpp8
2 files changed, 17 insertions, 5 deletions
diff --git a/alloc_device.cpp b/alloc_device.cpp
index 376cf71..6e363c6 100644
--- a/alloc_device.cpp
+++ b/alloc_device.cpp
@@ -395,7 +395,7 @@ static bool get_yuv_420_888_stride_and_size(int width, int height, int* pixel_st
return false;
}
- luma_pixel_stride = GRALLOC_ALIGN(width, 16);
+ luma_pixel_stride = GRALLOC_ALIGN(width, YUV_MALI_PLANE_ALIGN);
if (size != NULL)
{
@@ -934,6 +934,18 @@ static int alloc_device_alloc(alloc_device_t* dev, int w, int h, int format, int
case HAL_PIXEL_FORMAT_YCrCb_420_SP:
case HAL_PIXEL_FORMAT_YCbCr_420_SP:
case HAL_PIXEL_FORMAT_YCbCr_420_888:
+ if (!get_yv12_stride_and_size(GRALLOC_ALIGN(w, 2), GRALLOC_ALIGN(h, 2), &pixel_stride, &byte_stride, &size, type, &internalHeight, yv12_align))
+ {
+ return -EINVAL;
+ }
+#if PLATFORM_SDK_VERSION >= 24
+ if (usage & GRALLOC_USAGE_AML_OMX_OVERLAY)
+ {
+ pixel_stride = buffer_width;
+ }
+#endif
+ break;
+
case HAL_PIXEL_FORMAT_YV12:
// Mali subsystem prefers higher stride alignment values (128b) for YUV, but software components assume default of 16.
// We only need to care about YV12 as it's the only, implicit, HAL YUV format in Android.
diff --git a/gralloc_module.cpp b/gralloc_module.cpp
index 7b254b5..3d7af28 100644
--- a/gralloc_module.cpp
+++ b/gralloc_module.cpp
@@ -326,16 +326,16 @@ static int gralloc_lock_ycbcr(gralloc_module_t const* module,
case HAL_PIXEL_FORMAT_YCrCb_420_SP: //this is NV21
case HAL_PIXEL_FORMAT_YCbCr_420_SP:
case HAL_PIXEL_FORMAT_YCbCr_420_888:
- yStride = hnd->width;
- cStride = hnd->width;
+ yStride = GRALLOC_ALIGN(hnd->width, YUV_MALI_PLANE_ALIGN);
+ cStride = GRALLOC_ALIGN(hnd->width, YUV_MALI_PLANE_ALIGN);
yOffset = 0;
vOffset = yStride * hnd->height;
uOffset = vOffset + 1;
cStep = 2;
break;
case HAL_PIXEL_FORMAT_YV12:
- yStride = GRALLOC_ALIGN(hnd->width, 16);
- cStride = GRALLOC_ALIGN(yStride / 2, 16);
+ yStride = GRALLOC_ALIGN(hnd->width, YUV_ANDROID_PLANE_ALIGN);
+ cStride = GRALLOC_ALIGN(yStride / 2, YUV_ANDROID_PLANE_ALIGN);
yOffset = 0;
vOffset = yStride * hnd->height;
uOffset = vOffset + cStride * hnd->height / 2;