exynos4: gralloc: Do FIMC1 memory allocations from ION instead of FIMC1

Mobile's blobs behave this way, except they don't do the
4k alignment done by the FIMC1 allocs.

The 4k alignment should fix issues such as NHK World Live TV,
but fails to do so.

Change-Id: I1ee4cd13e23f9f2f6c6616ee9eed1096b571a82c
diff --git a/exynos4/hal/libgralloc_ump/alloc_device.cpp b/exynos4/hal/libgralloc_ump/alloc_device.cpp
index b064ab6..2acf0b3 100644
--- a/exynos4/hal/libgralloc_ump/alloc_device.cpp
+++ b/exynos4/hal/libgralloc_ump/alloc_device.cpp
@@ -106,6 +106,7 @@
     ump_secure_id ump_id;
 
     size = round_up_to_page_size(size);
+#ifdef INSIGNAL_FIMC1
     if (usage & GRALLOC_USAGE_HW_FIMC1) {
         int dev_fd=0;
         char node[20];
@@ -170,11 +171,16 @@
         hnd->base = intptr_t(mappedAddress) + hnd->offset;
         return 0;
     } else {
+#endif
         ion_buffer ion_fd = 0;
         unsigned int ion_flags = 0;
         int priv_alloc_flag = private_handle_t::PRIV_FLAGS_USES_UMP;
 
+#ifdef  INSIGNAL_FIMC1
         if (usage & GRALLOC_USAGE_HW_ION) {
+#else
+        if (usage & GRALLOC_USAGE_HW_ION || usage & GRALLOC_USAGE_HW_FIMC1) {
+#endif
             if (!ion_dev_open) {
                 ALOGE("ERROR, failed to open ion");
                 return -1;
@@ -249,8 +255,22 @@
                             hnd->uoffset = ((EXYNOS4_ALIGN(hnd->width, 16) * hnd->height));
                             hnd->voffset = ((EXYNOS4_ALIGN((hnd->width >> 1), 16) * (hnd->height >> 1)));
                         } else {
+#ifndef INSIGNAL_FIMC1
                             hnd->uoffset = ((EXYNOS4_ALIGN(hnd->width, 16) * EXYNOS4_ALIGN(hnd->height, 16)));
                             hnd->voffset = ((EXYNOS4_ALIGN((hnd->width >> 1), 16) * EXYNOS4_ALIGN((hnd->height >> 1), 16)));
+#else
+                            if(usage & GRALLOC_USAGE_HW_FIMC1) {
+                                /* FIMC1 allocs had an additional alignment to a 4k boundary.  This solves the issues with
+                                 * NHK World Live TV and a few other apps
+                                 */
+                                hnd->uoffset = (EXYNOS4_ALIGN(EXYNOS4_ALIGN(hnd->width, 16) * EXYNOS4_ALIGN(hnd->height, 16)),4096);
+                                hnd->voffset = (EXYNOS4_ALIGN(EXYNOS4_ALIGN((hnd->width >> 1), 16) * EXYNOS4_ALIGN((hnd->height >> 1), 16)),4096);
+                            }
+                            else {
+                                hnd->uoffset = ((EXYNOS4_ALIGN(hnd->width, 16) * EXYNOS4_ALIGN(hnd->height, 16)));
+                                hnd->voffset = ((EXYNOS4_ALIGN((hnd->width >> 1), 16) * EXYNOS4_ALIGN((hnd->height >> 1), 16)));
+                            }
+#endif
                         }
                         return 0;
                     } else {
@@ -269,7 +289,9 @@
         } else {
             ALOGE("gralloc_alloc_buffer() failed to allcoate UMP memory");
         }
+#ifdef INSIGNAL_FIMC1
     }
+#endif
     return -1;
 }
 
@@ -379,8 +401,13 @@
         case OMX_COLOR_FormatYUV420Planar:
         case OMX_COLOR_FormatYUV420SemiPlanar:
             size = stride * vstride + EXYNOS4_ALIGN((w / 2), 16) * EXYNOS4_ALIGN((h / 2), 16) * 2;
-            if(usage & GRALLOC_USAGE_HW_FIMC1)
+#ifdef  INSIGNAL_FIMC1
+            if (usage & GRALLOC_USAGE_HW_FIMC1) {
+#else
+            if (usage & (GRALLOC_USAGE_HW_ION || GRALLOC_USAGE_HW_FIMC1)) {
+#endif
                 size += PAGE_SIZE * 2;
+            }
             break;
         case HAL_PIXEL_FORMAT_YCbCr_422_SP:
             size = (stride * vstride) + (w/2 * h/2) * 2;