| /* |
| * Copyright (C) 2022 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include "Drm.h" |
| |
| #include <drm_fourcc.h> |
| #include <log/log.h> |
| #include <system/graphics.h> |
| |
| namespace aidl::android::hardware::graphics::composer3::impl { |
| |
| const char* GetDrmFormatString(uint32_t drm_format) { |
| switch (drm_format) { |
| case DRM_FORMAT_ABGR1555: |
| return "DRM_FORMAT_ABGR1555"; |
| case DRM_FORMAT_ABGR2101010: |
| return "DRM_FORMAT_ABGR2101010"; |
| case DRM_FORMAT_ABGR4444: |
| return "DRM_FORMAT_ABGR4444"; |
| case DRM_FORMAT_ABGR8888: |
| return "DRM_FORMAT_ABGR8888"; |
| case DRM_FORMAT_ARGB1555: |
| return "DRM_FORMAT_ARGB1555"; |
| case DRM_FORMAT_ARGB2101010: |
| return "DRM_FORMAT_ARGB2101010"; |
| case DRM_FORMAT_ARGB4444: |
| return "DRM_FORMAT_ARGB4444"; |
| case DRM_FORMAT_ARGB8888: |
| return "DRM_FORMAT_ARGB8888"; |
| case DRM_FORMAT_AYUV: |
| return "DRM_FORMAT_AYUV"; |
| case DRM_FORMAT_BGR233: |
| return "DRM_FORMAT_BGR233"; |
| case DRM_FORMAT_BGR565: |
| return "DRM_FORMAT_BGR565"; |
| case DRM_FORMAT_BGR888: |
| return "DRM_FORMAT_BGR888"; |
| case DRM_FORMAT_BGRA1010102: |
| return "DRM_FORMAT_BGRA1010102"; |
| case DRM_FORMAT_BGRA4444: |
| return "DRM_FORMAT_BGRA4444"; |
| case DRM_FORMAT_BGRA5551: |
| return "DRM_FORMAT_BGRA5551"; |
| case DRM_FORMAT_BGRA8888: |
| return "DRM_FORMAT_BGRA8888"; |
| case DRM_FORMAT_BGRX1010102: |
| return "DRM_FORMAT_BGRX1010102"; |
| case DRM_FORMAT_BGRX4444: |
| return "DRM_FORMAT_BGRX4444"; |
| case DRM_FORMAT_BGRX5551: |
| return "DRM_FORMAT_BGRX5551"; |
| case DRM_FORMAT_BGRX8888: |
| return "DRM_FORMAT_BGRX8888"; |
| case DRM_FORMAT_C8: |
| return "DRM_FORMAT_C8"; |
| case DRM_FORMAT_GR88: |
| return "DRM_FORMAT_GR88"; |
| case DRM_FORMAT_NV12: |
| return "DRM_FORMAT_NV12"; |
| case DRM_FORMAT_NV21: |
| return "DRM_FORMAT_NV21"; |
| case DRM_FORMAT_R8: |
| return "DRM_FORMAT_R8"; |
| case DRM_FORMAT_RG88: |
| return "DRM_FORMAT_RG88"; |
| case DRM_FORMAT_RGB332: |
| return "DRM_FORMAT_RGB332"; |
| case DRM_FORMAT_RGB565: |
| return "DRM_FORMAT_RGB565"; |
| case DRM_FORMAT_RGB888: |
| return "DRM_FORMAT_RGB888"; |
| case DRM_FORMAT_RGBA1010102: |
| return "DRM_FORMAT_RGBA1010102"; |
| case DRM_FORMAT_RGBA4444: |
| return "DRM_FORMAT_RGBA4444"; |
| case DRM_FORMAT_RGBA5551: |
| return "DRM_FORMAT_RGBA5551"; |
| case DRM_FORMAT_RGBA8888: |
| return "DRM_FORMAT_RGBA8888"; |
| case DRM_FORMAT_RGBX1010102: |
| return "DRM_FORMAT_RGBX1010102"; |
| case DRM_FORMAT_RGBX4444: |
| return "DRM_FORMAT_RGBX4444"; |
| case DRM_FORMAT_RGBX5551: |
| return "DRM_FORMAT_RGBX5551"; |
| case DRM_FORMAT_RGBX8888: |
| return "DRM_FORMAT_RGBX8888"; |
| case DRM_FORMAT_UYVY: |
| return "DRM_FORMAT_UYVY"; |
| case DRM_FORMAT_VYUY: |
| return "DRM_FORMAT_VYUY"; |
| case DRM_FORMAT_XBGR1555: |
| return "DRM_FORMAT_XBGR1555"; |
| case DRM_FORMAT_XBGR2101010: |
| return "DRM_FORMAT_XBGR2101010"; |
| case DRM_FORMAT_XBGR4444: |
| return "DRM_FORMAT_XBGR4444"; |
| case DRM_FORMAT_XBGR8888: |
| return "DRM_FORMAT_XBGR8888"; |
| case DRM_FORMAT_XRGB1555: |
| return "DRM_FORMAT_XRGB1555"; |
| case DRM_FORMAT_XRGB2101010: |
| return "DRM_FORMAT_XRGB2101010"; |
| case DRM_FORMAT_XRGB4444: |
| return "DRM_FORMAT_XRGB4444"; |
| case DRM_FORMAT_XRGB8888: |
| return "DRM_FORMAT_XRGB8888"; |
| case DRM_FORMAT_YUYV: |
| return "DRM_FORMAT_YUYV"; |
| case DRM_FORMAT_YVU420: |
| return "DRM_FORMAT_YVU420"; |
| case DRM_FORMAT_YVYU: |
| return "DRM_FORMAT_YVYU"; |
| } |
| return "Unknown"; |
| } |
| |
| int GetDrmFormatBytesPerPixel(uint32_t drm_format) { |
| switch (drm_format) { |
| case DRM_FORMAT_ABGR8888: |
| case DRM_FORMAT_ARGB8888: |
| case DRM_FORMAT_XBGR8888: |
| return 4; |
| case DRM_FORMAT_BGR888: |
| return 3; |
| case DRM_FORMAT_RGB565: |
| case DRM_FORMAT_YVU420: |
| #ifdef GRALLOC_MODULE_API_VERSION_0_2 |
| case DRM_FORMAT_FLEX_YCbCr_420_888: |
| #endif |
| return 2; |
| case DRM_FORMAT_R8: |
| return 1; |
| } |
| ALOGE("%s: format size unknown %d(%s)", __FUNCTION__, drm_format, |
| GetDrmFormatString(drm_format)); |
| return 8; |
| } |
| |
| int GetDrmFormatFromHalFormat(int hal_format) { |
| switch (hal_format) { |
| case HAL_PIXEL_FORMAT_RGBA_FP16: |
| return DRM_FORMAT_ABGR16161616F; |
| case HAL_PIXEL_FORMAT_RGBA_8888: |
| return DRM_FORMAT_ABGR8888; |
| case HAL_PIXEL_FORMAT_RGBX_8888: |
| return DRM_FORMAT_XBGR8888; |
| case HAL_PIXEL_FORMAT_BGRA_8888: |
| return DRM_FORMAT_ARGB8888; |
| case HAL_PIXEL_FORMAT_RGB_888: |
| return DRM_FORMAT_BGR888; |
| case HAL_PIXEL_FORMAT_RGB_565: |
| return DRM_FORMAT_BGR565; |
| case HAL_PIXEL_FORMAT_YV12: |
| return DRM_FORMAT_YVU420; |
| case HAL_PIXEL_FORMAT_YCbCr_420_888: |
| return DRM_FORMAT_YVU420; |
| case HAL_PIXEL_FORMAT_BLOB: |
| return DRM_FORMAT_R8; |
| default: |
| break; |
| } |
| ALOGE("%s unhandled hal format: %d", __FUNCTION__, hal_format); |
| return 0; |
| } |
| |
| } // namespace aidl::android::hardware::graphics::composer3::impl |