From c433cde58f30c635f762fef9944f49d1097b12bc Mon Sep 17 00:00:00 2001
From: Paulo Sergio Travaglia <pstglia@gmail.com>
Date: Sat, 28 Mar 2015 15:00:03 -0300
Subject: [PATCH] HACK: Threat OMX_COLOR formats BGRA8888 and YUV420Planar as
 valid for gralloc

Under libstagefright/libstagefright-plugins, when you use NativeWIndows,
when allocating gralloc buffers, usage and formats used
I could set gralloc parameters directly, but libstagefright validates them,
returning errors if they are not valid. So I thought it was easier doing like this...
---
 gralloc_drm.h         | 3 +++
 gralloc_drm_intel.c   | 2 ++
 gralloc_drm_kms.c     | 2 ++
 gralloc_drm_nouveau.c | 1 +
 gralloc_drm_pipe.c    | 3 +++
 gralloc_drm_radeon.c  | 1 +
 6 files changed, 12 insertions(+)

diff --git a/gralloc_drm.h b/gralloc_drm.h
index e53ecd9..010b5c4 100644
--- a/gralloc_drm.h
+++ b/gralloc_drm.h
@@ -61,6 +61,7 @@ static inline int gralloc_drm_get_bpp(int format)
 	case HAL_PIXEL_FORMAT_RGBA_8888:
 	case HAL_PIXEL_FORMAT_RGBX_8888:
 	case HAL_PIXEL_FORMAT_BGRA_8888:
+	case 15:
 		bpp = 4;
 		break;
 	case HAL_PIXEL_FORMAT_RGB_888:
@@ -72,6 +73,7 @@ static inline int gralloc_drm_get_bpp(int format)
 		break;
 	/* planar; only Y is considered */
 	case HAL_PIXEL_FORMAT_YV12:
+	case 19:
         case HAL_PIXEL_FORMAT_DRM_NV12:
 	case HAL_PIXEL_FORMAT_YCbCr_422_SP:
 	case HAL_PIXEL_FORMAT_YCrCb_420_SP:
@@ -92,6 +94,7 @@ static inline void gralloc_drm_align_geometry(int format, int *width, int *heigh
 	switch (format) {
 	case HAL_PIXEL_FORMAT_DRM_NV12:
 	case HAL_PIXEL_FORMAT_YV12:
+	case 19:
 		align_w = 32;
 		align_h = 2;
 		extra_height_div = 2;
diff --git a/gralloc_drm_intel.c b/gralloc_drm_intel.c
index 3a020b4..521c08d 100644
--- a/gralloc_drm_intel.c
+++ b/gralloc_drm_intel.c
@@ -212,6 +212,7 @@ static void intel_resolve_format(struct gralloc_drm_drv_t *drv,
 
 	switch(ib->base.handle->format) {
 		case HAL_PIXEL_FORMAT_YV12:
+		case 19:
 
 			// U and V stride are half of Y plane
 			pitches[2] = pitches[0]/2;
@@ -570,6 +571,7 @@ static void intel_init_kms_features(struct gralloc_drm_drv_t *drv,
 	switch (drm->primary.fb_format) {
 	case HAL_PIXEL_FORMAT_BGRA_8888:
 	case HAL_PIXEL_FORMAT_RGB_565:
+	case 15:
 		break;
 	default:
 		drm->primary.fb_format = HAL_PIXEL_FORMAT_BGRA_8888;
diff --git a/gralloc_drm_kms.c b/gralloc_drm_kms.c
index 0909361..21d38f6 100644
--- a/gralloc_drm_kms.c
+++ b/gralloc_drm_kms.c
@@ -52,6 +52,7 @@ static unsigned int drm_format_from_hal(int hal_format)
 	switch(hal_format) {
 		case HAL_PIXEL_FORMAT_RGB_888:
 		case HAL_PIXEL_FORMAT_BGRA_8888:
+		case 15:
 			return DRM_FORMAT_XRGB8888;
 		case HAL_PIXEL_FORMAT_RGBX_8888:
 			return DRM_FORMAT_XBGR8888;
@@ -60,6 +61,7 @@ static unsigned int drm_format_from_hal(int hal_format)
 		case HAL_PIXEL_FORMAT_RGB_565:
 			return DRM_FORMAT_RGB565;
 		case HAL_PIXEL_FORMAT_YV12:
+		case 19:
 			return DRM_FORMAT_YUV420;
 		case HAL_PIXEL_FORMAT_DRM_NV12:
 			return DRM_FORMAT_NV12;
diff --git a/gralloc_drm_nouveau.c b/gralloc_drm_nouveau.c
index b93c564..4d261e2 100644
--- a/gralloc_drm_nouveau.c
+++ b/gralloc_drm_nouveau.c
@@ -305,6 +305,7 @@ static void nouveau_init_kms_features(struct gralloc_drm_drv_t *drv,
 	switch (drm->primary.fb_format) {
 	case HAL_PIXEL_FORMAT_BGRA_8888:
 	case HAL_PIXEL_FORMAT_RGB_565:
+	case 15:
 		break;
 	default:
 		drm->primary.fb_format = HAL_PIXEL_FORMAT_BGRA_8888;
diff --git a/gralloc_drm_pipe.c b/gralloc_drm_pipe.c
index 477e98f..6a1d30f 100644
--- a/gralloc_drm_pipe.c
+++ b/gralloc_drm_pipe.c
@@ -72,12 +72,14 @@ static enum pipe_format get_pipe_format(int format)
 		fmt = PIPE_FORMAT_B5G6R5_UNORM;
 		break;
 	case HAL_PIXEL_FORMAT_BGRA_8888:
+	case 15:
 		fmt = PIPE_FORMAT_B8G8R8A8_UNORM;
 		break;
 	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:
+	case 19:
 	default:
 		fmt = PIPE_FORMAT_NONE;
 		break;
@@ -339,6 +341,7 @@ static void pipe_init_kms_features(struct gralloc_drm_drv_t *drv, struct gralloc
 	switch (drm->primary.fb_format) {
 	case HAL_PIXEL_FORMAT_BGRA_8888:
 	case HAL_PIXEL_FORMAT_RGB_565:
+	case 15:
 		break;
 	default:
 		drm->primary.fb_format = HAL_PIXEL_FORMAT_BGRA_8888;
diff --git a/gralloc_drm_radeon.c b/gralloc_drm_radeon.c
index 2911a45..b0e2bc2 100644
--- a/gralloc_drm_radeon.c
+++ b/gralloc_drm_radeon.c
@@ -324,6 +324,7 @@ static void drm_gem_radeon_init_kms_features(struct gralloc_drm_drv_t *drv,
 	switch (drm->primary.fb_format) {
 	case HAL_PIXEL_FORMAT_BGRA_8888:
 	case HAL_PIXEL_FORMAT_RGB_565:
+	case 15:
 		break;
 	default:
 		drm->primary.fb_format = HAL_PIXEL_FORMAT_BGRA_8888;
-- 
1.7.12.1

