-/*
- * This function returns the stride for a given format, width and plane.
- */
-int drv_stride_from_format(uint32_t format, uint32_t width, size_t plane)
-{
- int stride = width * DIV_ROUND_UP(drv_bpp_from_format(format, plane),
- 8);
-
- /*
- * Only downsample for certain multiplanar formats which have horizontal
- * subsampling for chroma planes. Only formats supported by our drivers
- * are listed here -- add more as needed.
- */
- if (plane != 0) {
- switch (format) {
- case DRM_FORMAT_NV12:
- case DRM_FORMAT_YVU420:
- case DRM_FORMAT_YVU420_ANDROID:
- stride = DIV_ROUND_UP(stride, 2);
- break;
- }
- }
-
- /*
- * The stride of Android YV12 buffers is required to be aligned to 16 bytes
- * (see <system/graphics.h>).
- */
- if (format == DRM_FORMAT_YVU420_ANDROID)
- stride = ALIGN(stride, 16);
-
- return stride;
-}
-
-size_t drv_num_planes_from_format(uint32_t format)
-{
- switch (format) {
- case DRM_FORMAT_ABGR1555:
- case DRM_FORMAT_ABGR2101010:
- case DRM_FORMAT_ABGR4444:
- case DRM_FORMAT_ABGR8888:
- case DRM_FORMAT_ARGB1555:
- case DRM_FORMAT_ARGB2101010:
- case DRM_FORMAT_ARGB4444:
- case DRM_FORMAT_ARGB8888:
- case DRM_FORMAT_AYUV:
- case DRM_FORMAT_BGR233:
- case DRM_FORMAT_BGR565:
- case DRM_FORMAT_BGR888:
- case DRM_FORMAT_BGRA1010102:
- case DRM_FORMAT_BGRA4444:
- case DRM_FORMAT_BGRA5551:
- case DRM_FORMAT_BGRA8888:
- case DRM_FORMAT_BGRX1010102:
- case DRM_FORMAT_BGRX4444:
- case DRM_FORMAT_BGRX5551:
- case DRM_FORMAT_BGRX8888:
- case DRM_FORMAT_C8:
- case DRM_FORMAT_GR88:
- case DRM_FORMAT_R8:
- case DRM_FORMAT_RG88:
- case DRM_FORMAT_RGB332:
- case DRM_FORMAT_RGB565:
- case DRM_FORMAT_RGB888:
- case DRM_FORMAT_RGBA1010102:
- case DRM_FORMAT_RGBA4444:
- case DRM_FORMAT_RGBA5551:
- case DRM_FORMAT_RGBA8888:
- case DRM_FORMAT_RGBX1010102:
- case DRM_FORMAT_RGBX4444:
- case DRM_FORMAT_RGBX5551:
- case DRM_FORMAT_RGBX8888:
- case DRM_FORMAT_UYVY:
- case DRM_FORMAT_VYUY:
- case DRM_FORMAT_XBGR1555:
- case DRM_FORMAT_XBGR2101010:
- case DRM_FORMAT_XBGR4444:
- case DRM_FORMAT_XBGR8888:
- case DRM_FORMAT_XRGB1555:
- case DRM_FORMAT_XRGB2101010:
- case DRM_FORMAT_XRGB4444:
- case DRM_FORMAT_XRGB8888:
- case DRM_FORMAT_YUYV:
- case DRM_FORMAT_YVYU:
- return 1;
- case DRM_FORMAT_NV12:
- return 2;
- case DRM_FORMAT_YVU420:
- case DRM_FORMAT_YVU420_ANDROID:
- return 3;
- }
-
- fprintf(stderr, "drv: UNKNOWN FORMAT %d\n", format);
- return 0;
-}
-
-uint32_t drv_size_from_format(uint32_t format, uint32_t stride,
- uint32_t height, size_t plane)
-{
- assert(plane < drv_num_planes_from_format(format));
- uint32_t vertical_subsampling;
-
- switch (format) {
- case DRM_FORMAT_NV12:
- case DRM_FORMAT_YVU420:
- case DRM_FORMAT_YVU420_ANDROID:
- vertical_subsampling = (plane == 0) ? 1 : 2;
- break;
- default:
- vertical_subsampling = 1;
- }
-
- return stride * DIV_ROUND_UP(height, vertical_subsampling);
-}
-