summaryrefslogtreecommitdiff
path: root/gralloc/gr_utils.cpp
diff options
context:
space:
mode:
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: