sdm: Add support for P010 Venus format

Add support for P010 Venus video format in SDM. Handle Qualcomm Venus
h/w video decoder aligned P010 buffer format.

Change-Id: I3edf21a5c3d90556c69c9944558398b65e4ed1e5
CRs-Fixed: 2149780
diff --git a/libgralloc1/gr_adreno_info.cpp b/libgralloc1/gr_adreno_info.cpp
index 1ac99be..8d83627 100644
--- a/libgralloc1/gr_adreno_info.cpp
+++ b/libgralloc1/gr_adreno_info.cpp
@@ -205,6 +205,7 @@
       return ADRENO_PIXELFORMAT_TP10;
     case HAL_PIXEL_FORMAT_YCbCr_420_P010:
     case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
       return ADRENO_PIXELFORMAT_P010;
     case HAL_PIXEL_FORMAT_RGBA_1010102:
        return ADRENO_PIXELFORMAT_R10G10B10A2_UNORM;
diff --git a/libgralloc1/gr_buf_mgr.cpp b/libgralloc1/gr_buf_mgr.cpp
index cd89d41..8aeee40 100644
--- a/libgralloc1/gr_buf_mgr.cpp
+++ b/libgralloc1/gr_buf_mgr.cpp
@@ -835,6 +835,7 @@
     case HAL_PIXEL_FORMAT_YCbCr_420_P010:
     case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
     case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
       return true;
     default:
       return false;
diff --git a/libgralloc1/gr_utils.cpp b/libgralloc1/gr_utils.cpp
index a7e8c91..6af5df6 100644
--- a/libgralloc1/gr_utils.cpp
+++ b/libgralloc1/gr_utils.cpp
@@ -240,6 +240,9 @@
     case HAL_PIXEL_FORMAT_YCbCr_420_P010:
       size = ALIGN((alignedw * alignedh * 2) + (alignedw * alignedh) + 1, SIZE_4K);
       break;
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+      size = VENUS_BUFFER_SIZE(COLOR_FMT_P010, width, height);
+      break;
     case HAL_PIXEL_FORMAT_YCbCr_422_SP:
     case HAL_PIXEL_FORMAT_YCrCb_422_SP:
     case HAL_PIXEL_FORMAT_YCbCr_422_I:
@@ -399,10 +402,6 @@
       GetYuvSPPlaneInfo(hnd->base, width, height, 1, ycbcr);
       break;
 
-    case HAL_PIXEL_FORMAT_YCbCr_420_P010:
-      GetYuvSPPlaneInfo(hnd->base, width, height, 2, ycbcr);
-      break;
-
     case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
       if (!interlaced) {
         GetYuvUbwcSPPlaneInfo(hnd->base, width, height, COLOR_FMT_NV12_UBWC, ycbcr);
@@ -412,6 +411,10 @@
       ycbcr->chroma_step = 2;
       break;
 
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+      GetYuvSPPlaneInfo(hnd->base, width, height, 2, ycbcr);
+      break;
+
     case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
       GetYuvUbwcSPPlaneInfo(hnd->base, width, height, COLOR_FMT_NV12_BPP10_UBWC, ycbcr);
       ycbcr->chroma_step = 3;
@@ -422,6 +425,19 @@
       ycbcr->chroma_step = 4;
       break;
 
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+      ystride = VENUS_Y_STRIDE(COLOR_FMT_P010, width);
+      cstride = VENUS_UV_STRIDE(COLOR_FMT_P010, width);
+      ycbcr->y = reinterpret_cast<void *>(hnd->base);
+      ycbcr->cb = reinterpret_cast<void *>(hnd->base +
+                                           ystride * VENUS_Y_SCANLINES(COLOR_FMT_P010, height));
+      ycbcr->cr = reinterpret_cast<void *>(hnd->base +
+                                           ystride * VENUS_Y_SCANLINES(COLOR_FMT_P010, height) + 1);
+      ycbcr->ystride = ystride;
+      ycbcr->cstride = cstride;
+      ycbcr->chroma_step = 4;
+      break;
+
     case HAL_PIXEL_FORMAT_YCrCb_420_SP:
     case HAL_PIXEL_FORMAT_YCrCb_422_SP:
     case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
@@ -743,6 +759,10 @@
     case HAL_PIXEL_FORMAT_YCbCr_420_P010:
       aligned_w = ALIGN(width, 16);
       break;
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+      aligned_w = INT(VENUS_Y_STRIDE(COLOR_FMT_P010, width) / 2);
+      aligned_h = INT(VENUS_Y_SCANLINES(COLOR_FMT_P010, height));
+      break;
     case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
     case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
       aligned_w = INT(VENUS_Y_STRIDE(COLOR_FMT_NV12, width));
@@ -829,6 +849,7 @@
     case HAL_PIXEL_FORMAT_YCbCr_420_P010:
     case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
     case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+    case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
       offset[1] = static_cast<uint32_t>(reinterpret_cast<uint64_t>(yuvInfo.cb) - hnd->base);
       break;
     case HAL_PIXEL_FORMAT_YCrCb_420_SP:
diff --git a/libgralloc1/gralloc_priv.h b/libgralloc1/gralloc_priv.h
index ef1bbc3..db0afd2 100644
--- a/libgralloc1/gralloc_priv.h
+++ b/libgralloc1/gralloc_priv.h
@@ -131,6 +131,7 @@
 #define HAL_PIXEL_FORMAT_XBGR_2101010 0x11D
 #define HAL_PIXEL_FORMAT_YCbCr_420_P010 0x11F
 #define HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC 0x124
+#define HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS 0x7FA30C0A
 
 #define HAL_PIXEL_FORMAT_CbYCrY_422_I            0x120
 #define HAL_PIXEL_FORMAT_BGR_888                 0x121