aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYahan Zhou <yahan@google.com>2020-08-21 14:05:40 -0700
committerYahan Zhou <yahan@google.com>2020-09-03 16:19:19 -0700
commit5a16233de98eb9b9ee89d70c401251c3610d1f26 (patch)
treeaeed3ef830e0d1f2bc37234af4f67bad2a2520f0
parent183ce66d05854cf3d81a82783a4bcf7903cca487 (diff)
downloaddevice_generic_goldfish-opengl-5a16233de98eb9b9ee89d70c401251c3610d1f26.tar.gz
device_generic_goldfish-opengl-5a16233de98eb9b9ee89d70c401251c3610d1f26.tar.bz2
device_generic_goldfish-opengl-5a16233de98eb9b9ee89d70c401251c3610d1f26.zip
Support YUV conversion in vulkan with Android hardware buffer
Bug: 134773396 Test: android.graphics.cts.MediaVulkanGpuTest#testMediaImportAndRendering Change-Id: I4665c1fb5cd4706adb8684347804e43055c7d0a4
-rw-r--r--system/OpenglSystemCommon/FormatConversions.cpp3
-rw-r--r--system/vulkan_enc/vk_format_info.h14
2 files changed, 14 insertions, 3 deletions
diff --git a/system/OpenglSystemCommon/FormatConversions.cpp b/system/OpenglSystemCommon/FormatConversions.cpp
index cc976ed0..aae6bb98 100644
--- a/system/OpenglSystemCommon/FormatConversions.cpp
+++ b/system/OpenglSystemCommon/FormatConversions.cpp
@@ -35,11 +35,14 @@ static int get_rgb_offset(int row, int width, int rgbStride) {
return row * width * rgbStride;
}
+#define OMX_COLOR_FormatYUV420Planar 0x13
+
bool gralloc_is_yuv_format(const int format) {
switch (format) {
case HAL_PIXEL_FORMAT_YV12:
case HAL_PIXEL_FORMAT_YCbCr_420_888:
case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case OMX_COLOR_FormatYUV420Planar:
return true;
default:
diff --git a/system/vulkan_enc/vk_format_info.h b/system/vulkan_enc/vk_format_info.h
index 3701a2bf..80f69d91 100644
--- a/system/vulkan_enc/vk_format_info.h
+++ b/system/vulkan_enc/vk_format_info.h
@@ -36,6 +36,11 @@
/* See i915_private_android_types.h in minigbm. */
#define HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL 0x100
+// TODO(b/167698976): We should not use OMX_COLOR_FormatYUV420Planar
+// but we seem to miss a format translation somewhere.
+
+#define OMX_COLOR_FormatYUV420Planar 0x13
+
static inline VkFormat
vk_format_from_android(unsigned android_format)
{
@@ -58,9 +63,8 @@ vk_format_from_android(unsigned android_format)
return VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM;
#ifdef VK_USE_PLATFORM_ANDROID_KHR
case HAL_PIXEL_FORMAT_YV12:
- // YUV converter will convert this format to R8G8B8A8
- // TODO: should we use R8G8B8A8 for other YUV format as well?
- return VK_FORMAT_R8G8B8A8_UNORM;
+ case OMX_COLOR_FormatYUV420Planar:
+ return VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM;
case AHARDWAREBUFFER_FORMAT_BLOB:
#endif
default:
@@ -84,6 +88,8 @@ android_format_from_vk(VkFormat vk_format)
return AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM;
case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
return HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL;
+ case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
+ return HAL_PIXEL_FORMAT_YV12;
default:
return AHARDWAREBUFFER_FORMAT_BLOB;
}
@@ -94,6 +100,8 @@ android_format_is_yuv(unsigned android_format)
{
switch (android_format) {
case HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL:
+ case OMX_COLOR_FormatYUV420Planar:
+ case HAL_PIXEL_FORMAT_YV12:
return true;
default: