Merge "gralloc: Add Raw10 support in allocator" into mnc-dev
diff --git a/msm8960/libgralloc/gpu.cpp b/msm8960/libgralloc/gpu.cpp
index 46aebc8..8d71e32 100644
--- a/msm8960/libgralloc/gpu.cpp
+++ b/msm8960/libgralloc/gpu.cpp
@@ -263,6 +263,12 @@
grallocFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; //NV21
else if(usage & GRALLOC_USAGE_HW_CAMERA_WRITE)
grallocFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; //NV21
+ //If flexible yuv is used for sw read/write, need map to NV21
+ else if(format == HAL_PIXEL_FORMAT_YCbCr_420_888 &&
+ (usage & GRALLOC_USAGE_SW_WRITE_MASK ||
+ usage & GRALLOC_USAGE_SW_READ_MASK)) {
+ grallocFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP;
+ }
}
getGrallocInformationFromFormat(grallocFormat, &bufferType);
diff --git a/msm8960/libgralloc/mapper.cpp b/msm8960/libgralloc/mapper.cpp
index 55a34a9..f2d6e23 100644
--- a/msm8960/libgralloc/mapper.cpp
+++ b/msm8960/libgralloc/mapper.cpp
@@ -250,7 +250,7 @@
{
private_handle_t* hnd = (private_handle_t*)handle;
int err = gralloc_map_and_invalidate(module, handle, usage, l, t, w, h);
- int ystride;
+ int ystride, cstride;
if(!err) {
//hnd->format holds our implementation defined format
//HAL_PIXEL_FORMAT_YCrCb_420_SP is the only one set right now.
@@ -276,6 +276,19 @@
ycbcr->chroma_step = 2;
memset(ycbcr->reserved, 0, sizeof(ycbcr->reserved));
break;
+ // YCrCb_420_P
+ case HAL_PIXEL_FORMAT_YV12:
+ ystride = ALIGN(hnd->width, 16);
+ cstride = ALIGN(ystride / 2, 16);
+ ycbcr->y = (void*)hnd->base;
+ ycbcr->cr = (void*)(hnd->base + ystride * hnd->height);
+ ycbcr->cb = (void*)(hnd->base + ystride * hnd->height
+ + cstride * hnd->height / 2);
+ ycbcr->ystride = ystride;
+ ycbcr->cstride = cstride;
+ ycbcr->chroma_step = 1;
+ memset(ycbcr->reserved, 0, sizeof(ycbcr->reserved));
+ break;
default:
ALOGD("%s: Invalid format passed: 0x%x", __FUNCTION__,
hnd->format);