From b65a3f83ccf8d17cea46fe5af1bc348ad5d4467f Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 27 Oct 2011 18:01:23 +0800 Subject: add support for YUV formats --- gralloc_drm.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'gralloc_drm.h') diff --git a/gralloc_drm.h b/gralloc_drm.h index b9c0de8..85e3675 100644 --- a/gralloc_drm.h +++ b/gralloc_drm.h @@ -61,8 +61,15 @@ static inline int gralloc_drm_get_bpp(int format) case HAL_PIXEL_FORMAT_RGB_565: case HAL_PIXEL_FORMAT_RGBA_5551: case HAL_PIXEL_FORMAT_RGBA_4444: + case HAL_PIXEL_FORMAT_YCbCr_422_I: bpp = 2; break; + /* planar; only Y is considered */ + case HAL_PIXEL_FORMAT_YV12: + case HAL_PIXEL_FORMAT_YCbCr_422_SP: + case HAL_PIXEL_FORMAT_YCrCb_420_SP: + bpp = 1; + break; default: bpp = 0; break; @@ -71,6 +78,37 @@ static inline int gralloc_drm_get_bpp(int format) return bpp; } +static inline void gralloc_drm_align_geometry(int format, int *width, int *height) +{ + int align_w = 1, align_h = 1, extra_height_div = 0; + + switch (format) { + case HAL_PIXEL_FORMAT_YV12: + align_w = 32; + align_h = 2; + extra_height_div = 2; + break; + case HAL_PIXEL_FORMAT_YCbCr_422_SP: + align_w = 2; + extra_height_div = 1; + break; + case HAL_PIXEL_FORMAT_YCrCb_420_SP: + align_w = 2; + align_h = 2; + extra_height_div = 2; + break; + case HAL_PIXEL_FORMAT_YCbCr_422_I: + align_w = 2; + break; + } + + *width = (*width + align_w - 1) & ~(align_w - 1); + *height = (*height + align_h - 1) & ~(align_h - 1); + + if (extra_height_div) + *height += *height / extra_height_div; +} + int gralloc_drm_handle_register(buffer_handle_t handle, struct gralloc_drm_t *drm); int gralloc_drm_handle_unregister(buffer_handle_t handle); -- cgit v1.1