summaryrefslogtreecommitdiffstats
path: root/gralloc_drm.h
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2011-10-27 18:01:23 +0800
committerChia-I Wu <olvaffe@gmail.com>2011-10-27 18:40:45 +0800
commitb65a3f83ccf8d17cea46fe5af1bc348ad5d4467f (patch)
treecee2a030ca46c2c485703d98452c21f4574ab83b /gralloc_drm.h
parent51966409ebae46df92720a0658090771e399be4f (diff)
downloadexternal_drm_gralloc-b65a3f83ccf8d17cea46fe5af1bc348ad5d4467f.zip
external_drm_gralloc-b65a3f83ccf8d17cea46fe5af1bc348ad5d4467f.tar.gz
external_drm_gralloc-b65a3f83ccf8d17cea46fe5af1bc348ad5d4467f.tar.bz2
add support for YUV formats
Diffstat (limited to 'gralloc_drm.h')
-rw-r--r--gralloc_drm.h38
1 files changed, 38 insertions, 0 deletions
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);