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