summaryrefslogtreecommitdiff
path: root/gralloc/gr_utils.cpp
diff options
context:
space:
mode:
authorYichi Chen <yichichen@google.com>2020-05-27 20:16:13 +0800
committerGerrit - the friendly Code Review server <code-review@localhost>2020-08-11 05:28:56 -0700
commit24d146c89d3016ad28b8f62f9aaef05f1daf895c (patch)
tree0db2a56e34b2727756b7e2d78e662ef9ad94b4d0 /gralloc/gr_utils.cpp
parent54cac898e5c75d41496411c17c714ee7629ec6bd (diff)
gralloc: Add the support of RAW data in getComponentSizeAndOffset
To support RAW8, RAW10, RAW12, and RAW16 in gralloc4.0, the patch sets the corresponding data in PlaneLayoutInfo and PlaneLayoutComponent. (Not a contribution) Bug: 157534008 Test: VtsHalGraphicsMapperV4_0TargetTest CRs-Fixed: 2728586 Change-Id: I5c0d7c31199b949dc32e112e2743ec6cdc7106bd
Diffstat (limited to 'gralloc/gr_utils.cpp')
-rw-r--r--gralloc/gr_utils.cpp58
1 files changed, 47 insertions, 11 deletions
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp
index 3dc91d5b..312058ed 100644
--- a/gralloc/gr_utils.cpp
+++ b/gralloc/gr_utils.cpp
@@ -518,15 +518,10 @@ void GetYuvSPPlaneInfo(const BufferInfo &info, int format, uint32_t width, uint3
c_size = (width * height) / 2;
c_height = height >> 1;
break;
- case HAL_PIXEL_FORMAT_RAW16:
case HAL_PIXEL_FORMAT_Y16:
c_size = width * height;
c_height = height;
break;
- case HAL_PIXEL_FORMAT_RAW10:
- c_size = 0;
- break;
- case HAL_PIXEL_FORMAT_RAW8:
case HAL_PIXEL_FORMAT_Y8:
c_size = 0;
break;
@@ -631,6 +626,44 @@ int GetYUVPlaneInfo(const private_handle_t *hnd, struct android_ycbcr ycbcr[2])
return err;
}
+int GetRawPlaneInfo(int32_t format, int32_t width, int32_t height, PlaneLayoutInfo *plane_info) {
+ int32_t step = 0;
+
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RAW16:
+ step = 2;
+ break;
+ case HAL_PIXEL_FORMAT_RAW8:
+ step = 1;
+ break;
+ case HAL_PIXEL_FORMAT_RAW12:
+ case HAL_PIXEL_FORMAT_RAW10:
+ step = 0;
+ break;
+ default:
+ ALOGW("RawPlaneInfo is unsupported for format 0x%x", format);
+ return -EINVAL;
+ }
+
+ BufferInfo info(width, height, format);
+ uint32_t alignedWidth, alignedHeight;
+ GetAlignedWidthAndHeight(info, &alignedWidth, &alignedHeight);
+
+ uint32_t size = GetSize(info, alignedWidth, alignedHeight);
+
+ plane_info[0].component = (PlaneComponent)PLANE_COMPONENT_RAW;
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+ plane_info[0].offset = 0;
+ plane_info[0].step = step;
+ plane_info[0].stride = width;
+ plane_info[0].stride_bytes = static_cast<int32_t>(alignedWidth);
+ plane_info[0].scanlines = height;
+ plane_info[0].size = size;
+
+ return 0;
+}
+
// Explicitly defined UBWC formats
bool IsUBwcFormat(int format) {
switch (format) {
@@ -1326,10 +1359,7 @@ int GetYUVPlaneInfo(const BufferInfo &info, int32_t format, int32_t width, int32
case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
case HAL_PIXEL_FORMAT_NV21_ZSL:
- case HAL_PIXEL_FORMAT_RAW16:
case HAL_PIXEL_FORMAT_Y16:
- case HAL_PIXEL_FORMAT_RAW10:
- case HAL_PIXEL_FORMAT_RAW8:
case HAL_PIXEL_FORMAT_Y8:
*plane_count = 2;
GetYuvSPPlaneInfo(info, format, width, height, 1, plane_info);
@@ -1340,6 +1370,15 @@ int GetYUVPlaneInfo(const BufferInfo &info, int32_t format, int32_t width, int32
plane_info[1].v_subsampling = v_subsampling;
break;
+ case HAL_PIXEL_FORMAT_RAW10:
+ case HAL_PIXEL_FORMAT_RAW8:
+ case HAL_PIXEL_FORMAT_RAW16:
+ case HAL_PIXEL_FORMAT_RAW12:
+ *plane_count = 1;
+ GetRawPlaneInfo(format, info.width, info.height, plane_info);
+ break;
+
+
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
GetYuvSubSamplingFactor(format, &h_subsampling, &v_subsampling);
if (flags & LAYOUT_INTERLACED_FLAG) {
@@ -1548,10 +1587,7 @@ void GetYuvSubSamplingFactor(int32_t format, int *h_subsampling, int *v_subsampl
*h_subsampling = 1;
*v_subsampling = 0;
break;
- case HAL_PIXEL_FORMAT_RAW16:
case HAL_PIXEL_FORMAT_Y16:
- case HAL_PIXEL_FORMAT_RAW12:
- case HAL_PIXEL_FORMAT_RAW10:
case HAL_PIXEL_FORMAT_Y8:
case HAL_PIXEL_FORMAT_BLOB:
case HAL_PIXEL_FORMAT_RAW_OPAQUE: