author | Jiacheng 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) |
commit | d3683b5586ad280c7e24b72d7d6fa50381d4cc59 (patch) | |
tree | 055ecba586636ffad77fa33bcbfce554c8c130d8 | |
parent | 7b79336602096c090ffa135df14acb966232317a (diff) | |
download | gralloc-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
-rw-r--r-- | alloc_device.cpp | 14 | ||||
-rw-r--r-- | gralloc_module.cpp | 8 |
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; |