diff options
author | Tapani Pälli <tapani.palli@intel.com> | 2012-12-14 10:43:39 +0200 |
---|---|---|
committer | Tapani Pälli <tapani.palli@intel.com> | 2012-12-14 10:53:49 +0200 |
commit | 45a9451495fade9c39239569f55c1de6aa0866ab (patch) | |
tree | 7654ee2e1a7fd2412979d43240e76137a94ada2b | |
parent | ebfa14d1d1851bd063b8d50e2071ee52acbf76b6 (diff) | |
download | external_drm_gralloc-45a9451495fade9c39239569f55c1de6aa0866ab.zip external_drm_gralloc-45a9451495fade9c39239569f55c1de6aa0866ab.tar.gz external_drm_gralloc-45a9451495fade9c39239569f55c1de6aa0866ab.tar.bz2 |
gralloc: add NV12 format enum and fb allocation support for it
Change-Id: If1c92810a17c60c29239f5384d6e971b015dd174
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
-rw-r--r-- | gralloc_drm.h | 3 | ||||
-rw-r--r-- | gralloc_drm_formats.h | 39 | ||||
-rw-r--r-- | gralloc_drm_kms.c | 12 | ||||
-rw-r--r-- | gralloc_drm_pipe.c | 1 |
4 files changed, 55 insertions, 0 deletions
diff --git a/gralloc_drm.h b/gralloc_drm.h index cf2d71c..716173a 100644 --- a/gralloc_drm.h +++ b/gralloc_drm.h @@ -25,6 +25,7 @@ #define _GRALLOC_DRM_H_ #include <hardware/gralloc.h> +#include "gralloc_drm_formats.h" struct gralloc_drm_t; struct gralloc_drm_bo_t; @@ -66,6 +67,7 @@ static inline int gralloc_drm_get_bpp(int format) break; /* planar; only Y is considered */ case HAL_PIXEL_FORMAT_YV12: + case HAL_PIXEL_FORMAT_DRM_NV12: case HAL_PIXEL_FORMAT_YCbCr_422_SP: case HAL_PIXEL_FORMAT_YCrCb_420_SP: bpp = 1; @@ -83,6 +85,7 @@ static inline void gralloc_drm_align_geometry(int format, int *width, int *heigh int align_w = 1, align_h = 1, extra_height_div = 0; switch (format) { + case HAL_PIXEL_FORMAT_DRM_NV12: case HAL_PIXEL_FORMAT_YV12: align_w = 32; align_h = 2; diff --git a/gralloc_drm_formats.h b/gralloc_drm_formats.h new file mode 100644 index 0000000..b8d0622 --- /dev/null +++ b/gralloc_drm_formats.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2012 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Android graphics.h defines the formats and leaves 0x100 - 0x1FF + * range available for HAL implementation specific formats. + */ + +#ifndef GRALLOC_DRM_FORMATS_H +#define GRALLOC_DRM_FORMATS_H + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + + HAL_PIXEL_FORMAT_DRM_NV12 = 0x102, +}; + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/gralloc_drm_kms.c b/gralloc_drm_kms.c index d9b1096..3310807 100644 --- a/gralloc_drm_kms.c +++ b/gralloc_drm_kms.c @@ -59,6 +59,8 @@ static unsigned int drm_format_from_hal(int hal_format) return DRM_FORMAT_RGB565; case HAL_PIXEL_FORMAT_YV12: return DRM_FORMAT_YUV420; + case HAL_PIXEL_FORMAT_DRM_NV12: + return DRM_FORMAT_NV12; default: return 0; } @@ -95,6 +97,16 @@ static int resolve_drm_format(struct gralloc_drm_bo_t *bo, pitches[2] * bo->handle->height/2; handles[1] = handles[2] = handles[0]; + break; + + case HAL_PIXEL_FORMAT_DRM_NV12: + + // U and V are interleaved in 2nd plane + pitches[1] = pitches[0]; + offsets[1] = offsets[0] + + pitches[0] * bo->handle->height; + handles[1] = handles[0]; + break; } return format; } diff --git a/gralloc_drm_pipe.c b/gralloc_drm_pipe.c index 83d02d1..ee5c4c0 100644 --- a/gralloc_drm_pipe.c +++ b/gralloc_drm_pipe.c @@ -77,6 +77,7 @@ static enum pipe_format get_pipe_format(int format) case HAL_PIXEL_FORMAT_RGBA_5551: case HAL_PIXEL_FORMAT_RGBA_4444: case HAL_PIXEL_FORMAT_YV12: + case HAL_PIXEL_FORMAT_DRM_NV12: case HAL_PIXEL_FORMAT_YCbCr_422_SP: case HAL_PIXEL_FORMAT_YCrCb_420_SP: default: |