summaryrefslogtreecommitdiff
path: root/libgralloc
diff options
context:
space:
mode:
authorRamkumar Radhakrishnan <ramkumar@codeaurora.org>2016-03-24 17:03:41 -0700
committerRamkumar Radhakrishnan <ramkumar@codeaurora.org>2016-03-29 14:42:53 -0700
commit790357e66099e51367f4089019c068eb064b3f25 (patch)
tree418505203992b132511bc007f033da98bcc0164b /libgralloc
parentb800f1b5b4f81484dedb7047488432e6cb25f535 (diff)
downloaddisplay-790357e66099e51367f4089019c068eb064b3f25.tar.gz
libgralloc: Get appropriate width and height from metadata
Compute YUV plane info using buffer width and height from metadata for UPDATE_BUFFER_GEOMETRY use case. CRs-Fixed: 994771 Change-Id: Idb42b56be970942a79c07ceb337afa2f966e4fbc
Diffstat (limited to 'libgralloc')
-rw-r--r--libgralloc/alloc_controller.cpp36
1 files changed, 17 insertions, 19 deletions
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp
index 2eb1adca..9b21dde6 100644
--- a/libgralloc/alloc_controller.cpp
+++ b/libgralloc/alloc_controller.cpp
@@ -726,8 +726,8 @@ void getBufferAttributes(int width, int height, int format, int usage,
size = getSize(format, width, height, usage, alignedw, alignedh);
}
-void getYuvUbwcSPPlaneInfo(private_handle_t* hnd, int color_format,
- struct android_ycbcr* ycbcr)
+void getYuvUbwcSPPlaneInfo(uint64_t base, int width, int height,
+ int color_format, struct android_ycbcr* ycbcr)
{
// UBWC buffer has these 4 planes in the following sequence:
// Y_Meta_Plane, Y_Plane, UV_Meta_Plane, UV_Plane
@@ -735,8 +735,6 @@ void getYuvUbwcSPPlaneInfo(private_handle_t* hnd, int color_format,
unsigned int y_stride, y_height, y_size;
unsigned int c_meta_stride, c_meta_height, c_meta_size;
unsigned int alignment = 4096;
- int width = hnd->width;
- int height = hnd->height;
y_meta_stride = VENUS_Y_META_STRIDE(color_format, width);
y_meta_height = VENUS_Y_META_SCANLINES(color_format, height);
@@ -750,25 +748,23 @@ void getYuvUbwcSPPlaneInfo(private_handle_t* hnd, int color_format,
c_meta_height = VENUS_UV_META_SCANLINES(color_format, height);
c_meta_size = ALIGN((c_meta_stride * c_meta_height), alignment);
- ycbcr->y = (void*)(hnd->base + y_meta_size);
- ycbcr->cb = (void*)(hnd->base + y_meta_size + y_size + c_meta_size);
- ycbcr->cr = (void*)(hnd->base + y_meta_size + y_size +
+ ycbcr->y = (void*)(base + y_meta_size);
+ ycbcr->cb = (void*)(base + y_meta_size + y_size + c_meta_size);
+ ycbcr->cr = (void*)(base + y_meta_size + y_size +
c_meta_size + 1);
ycbcr->ystride = y_stride;
ycbcr->cstride = VENUS_UV_STRIDE(color_format, width);
}
-void getYuvSPPlaneInfo(private_handle_t* hnd, int bpp,
- struct android_ycbcr* ycbcr)
+void getYuvSPPlaneInfo(uint64_t base, int width, int height, int bpp,
+ struct android_ycbcr* ycbcr)
{
- int width = hnd->width;
- int height = hnd->height;
unsigned int ystride, cstride;
ystride = cstride = width * bpp;
- ycbcr->y = (void*)hnd->base;
- ycbcr->cb = (void*)(hnd->base + ystride * height);
- ycbcr->cr = (void*)(hnd->base + ystride * height + 1);
+ ycbcr->y = (void*)base;
+ ycbcr->cb = (void*)(base + ystride * height);
+ ycbcr->cr = (void*)(base + ystride * height + 1);
ycbcr->ystride = ystride;
ycbcr->cstride = cstride;
ycbcr->chroma_step = 2 * bpp;
@@ -811,20 +807,22 @@ int getYUVPlaneInfo(private_handle_t* hnd, struct android_ycbcr* ycbcr)
case HAL_PIXEL_FORMAT_YCbCr_422_SP:
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: //Same as YCbCr_420_SP_VENUS
- getYuvSPPlaneInfo(hnd, 1, ycbcr);
+ getYuvSPPlaneInfo(hnd->base, width, height, 1, ycbcr);
break;
case HAL_PIXEL_FORMAT_YCbCr_420_P010:
- getYuvSPPlaneInfo(hnd, 2, ycbcr);
+ getYuvSPPlaneInfo(hnd->base, width, height, 2, ycbcr);
break;
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
- getYuvUbwcSPPlaneInfo(hnd, COLOR_FMT_NV12_UBWC, ycbcr);
+ getYuvUbwcSPPlaneInfo(hnd->base, width, height,
+ COLOR_FMT_NV12_UBWC, ycbcr);
ycbcr->chroma_step = 2;
break;
case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
- getYuvUbwcSPPlaneInfo(hnd, COLOR_FMT_NV12_BPP10_UBWC, ycbcr);
+ getYuvUbwcSPPlaneInfo(hnd->base, width, height,
+ COLOR_FMT_NV12_BPP10_UBWC, ycbcr);
ycbcr->chroma_step = 3;
break;
@@ -835,7 +833,7 @@ int getYUVPlaneInfo(private_handle_t* hnd, struct android_ycbcr* ycbcr)
case HAL_PIXEL_FORMAT_NV21_ZSL:
case HAL_PIXEL_FORMAT_RAW16:
case HAL_PIXEL_FORMAT_RAW10:
- getYuvSPPlaneInfo(hnd, 1, ycbcr);
+ getYuvSPPlaneInfo(hnd->base, width, height, 1, ycbcr);
std::swap(ycbcr->cb, ycbcr->cr);
break;