diff options
| author | Yahan Zhou <yahan@google.com> | 2020-08-21 14:05:40 -0700 |
|---|---|---|
| committer | Yahan Zhou <yahan@google.com> | 2020-09-03 16:19:19 -0700 |
| commit | 5a16233de98eb9b9ee89d70c401251c3610d1f26 (patch) | |
| tree | aeed3ef830e0d1f2bc37234af4f67bad2a2520f0 | |
| parent | 183ce66d05854cf3d81a82783a4bcf7903cca487 (diff) | |
| download | device_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.cpp | 3 | ||||
| -rw-r--r-- | system/vulkan_enc/vk_format_info.h | 14 |
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: |
