summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTapani Pälli <tapani.palli@intel.com>2012-12-14 10:43:39 +0200
committerTapani Pälli <tapani.palli@intel.com>2012-12-14 10:53:49 +0200
commit45a9451495fade9c39239569f55c1de6aa0866ab (patch)
tree7654ee2e1a7fd2412979d43240e76137a94ada2b
parentebfa14d1d1851bd063b8d50e2071ee52acbf76b6 (diff)
downloadexternal_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.h3
-rw-r--r--gralloc_drm_formats.h39
-rw-r--r--gralloc_drm_kms.c12
-rw-r--r--gralloc_drm_pipe.c1
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: