diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2020-06-22 02:02:32 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2020-06-22 02:02:32 -0700 |
commit | 072ccf579182603ace8585fa1e3877a4f67f0ee5 (patch) | |
tree | 45af16ac5d19a964f68c43da4013d8b52427e6b5 /gralloc/gr_utils.cpp | |
parent | 5cb873b898548610e26cb6ab237d219321830b2f (diff) | |
parent | 682b9c031d4ad3c6bdca30e7c68465c0b2f727ef (diff) |
Merge 682b9c031d4ad3c6bdca30e7c68465c0b2f727ef on remote branch
Change-Id: I2ecf504b81e348b19f393445faac0d83fa8c7d4d
Diffstat (limited to 'gralloc/gr_utils.cpp')
-rw-r--r-- | gralloc/gr_utils.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp index 05a63628..3dc91d5b 100644 --- a/gralloc/gr_utils.cpp +++ b/gralloc/gr_utils.cpp @@ -28,6 +28,9 @@ */ #include <media/msm_media_info.h> + +#include <drm/drm_fourcc.h> + #include <algorithm> #include "gr_adreno_info.h" @@ -1640,4 +1643,124 @@ void GetRGBPlaneInfo(const BufferInfo &info, int32_t format, int32_t width, int3 plane_info->scanlines = height; } +// TODO(tbalacha): tile vs ubwc -- may need to find a diff way to differentiate +void GetDRMFormat(uint32_t format, uint32_t flags, uint32_t *drm_format, + uint64_t *drm_format_modifier) { + bool compressed = (flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED) ? true : false; + switch (format) { + case HAL_PIXEL_FORMAT_RGBA_8888: + *drm_format = DRM_FORMAT_ABGR8888; + break; + case HAL_PIXEL_FORMAT_RGBA_5551: + *drm_format = DRM_FORMAT_ABGR1555; + break; + case HAL_PIXEL_FORMAT_RGBA_4444: + *drm_format = DRM_FORMAT_ABGR4444; + break; + case HAL_PIXEL_FORMAT_BGRA_8888: + *drm_format = DRM_FORMAT_ARGB8888; + break; + case HAL_PIXEL_FORMAT_RGBX_8888: + *drm_format = DRM_FORMAT_XBGR8888; + if (compressed) + *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED; + break; + case HAL_PIXEL_FORMAT_BGRX_8888: + *drm_format = DRM_FORMAT_XRGB8888; + break; + case HAL_PIXEL_FORMAT_RGB_888: + *drm_format = DRM_FORMAT_BGR888; + break; + case HAL_PIXEL_FORMAT_RGB_565: + *drm_format = DRM_FORMAT_BGR565; + break; + case HAL_PIXEL_FORMAT_BGR_565: + *drm_format = DRM_FORMAT_BGR565; + if (compressed) + *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED; + break; + case HAL_PIXEL_FORMAT_RGBA_1010102: + *drm_format = DRM_FORMAT_ABGR2101010; + if (compressed) + *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED; + break; + case HAL_PIXEL_FORMAT_ARGB_2101010: + *drm_format = DRM_FORMAT_BGRA1010102; + break; + case HAL_PIXEL_FORMAT_RGBX_1010102: + *drm_format = DRM_FORMAT_XBGR2101010; + if (compressed) + *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED; + break; + case HAL_PIXEL_FORMAT_XRGB_2101010: + *drm_format = DRM_FORMAT_BGRX1010102; + break; + case HAL_PIXEL_FORMAT_BGRA_1010102: + *drm_format = DRM_FORMAT_ARGB2101010; + break; + case HAL_PIXEL_FORMAT_ABGR_2101010: + *drm_format = DRM_FORMAT_RGBA1010102; + break; + case HAL_PIXEL_FORMAT_BGRX_1010102: + *drm_format = DRM_FORMAT_XRGB2101010; + break; + case HAL_PIXEL_FORMAT_XBGR_2101010: + *drm_format = DRM_FORMAT_RGBX1010102; + break; + case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS: + *drm_format = DRM_FORMAT_NV12; + break; + case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC: + *drm_format = DRM_FORMAT_NV12; + if (compressed) { + *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED; + } else { + *drm_format_modifier = DRM_FORMAT_MOD_QCOM_TILE; + } + break; + case HAL_PIXEL_FORMAT_YCrCb_420_SP: + *drm_format = DRM_FORMAT_NV21; + break; + case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS: + *drm_format = DRM_FORMAT_NV21; + break; + case HAL_PIXEL_FORMAT_YCbCr_420_P010: + case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS: + *drm_format = DRM_FORMAT_NV12; + *drm_format_modifier = DRM_FORMAT_MOD_QCOM_DX; + break; + case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC: + *drm_format = DRM_FORMAT_NV12; + if (compressed) { + *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED | DRM_FORMAT_MOD_QCOM_DX; + } else { + *drm_format_modifier = DRM_FORMAT_MOD_QCOM_TILE | DRM_FORMAT_MOD_QCOM_DX; + } + break; + case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC: + *drm_format = DRM_FORMAT_NV12; + if (compressed) { + *drm_format_modifier = + DRM_FORMAT_MOD_QCOM_COMPRESSED | DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT; + } else { + *drm_format_modifier = + DRM_FORMAT_MOD_QCOM_TILE | DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT; + } + break; + case HAL_PIXEL_FORMAT_YCbCr_422_SP: + *drm_format = DRM_FORMAT_NV16; + break; + /* + TODO: No HAL_PIXEL_FORMAT equivalent? + case kFormatYCrCb422H2V1SemiPlanar: + *drm_format = DRM_FORMAT_NV61; + break;*/ + case HAL_PIXEL_FORMAT_YV12: + *drm_format = DRM_FORMAT_YVU420; + break; + default: + ALOGE("Unsupported format %d", format); + } +} + } // namespace gralloc |