1 /*
2 * Copyright (C) 2022 Rockchip Electronics Co., Ltd.
3 * Authors:
4 * Cerf Yu <cerf.yu@rock-chips.com>
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 #include <unordered_map>
20 #include <stdint.h>
21
22 #include "rga.h"
23
24 #ifdef ANDROID
25 #include <ui/PixelFormat.h>
26 #include <hardware/hardware.h>
27
28 #ifdef ANDROID_12
29 #include <hardware/hardware_rockchip.h>
30 #endif
31
32 const static std::unordered_map<uint32_t, uint32_t> android_hal_table = {
33 // { , RK_FORMAT_ABGR_8888 },
34 // { , RK_FORMAT_ARGB_8888 },
35 { HAL_PIXEL_FORMAT_BGRA_8888, RK_FORMAT_BGRA_8888 },
36 { HAL_PIXEL_FORMAT_RGBA_8888, RK_FORMAT_RGBA_8888 },
37 // { , RK_FORMAT_XBGR_8888 },
38 // { , RK_FORMAT_XRGB_8888 },
39 // { , RK_FORMAT_BGRX_8888 },
40 { HAL_PIXEL_FORMAT_RGBX_8888, RK_FORMAT_RGBX_8888 },
41
42 // { , RK_FORMAT_ABGR_5551 },
43 // { , RK_FORMAT_ARGB_5551 },
44 // { , RK_FORMAT_BGRA_5551 },
45 // { , RK_FORMAT_RGBA_5551 },
46 // { , RK_FORMAT_ABGR_4444 },
47 // { , RK_FORMAT_ARGB_4444 },
48 // { , RK_FORMAT_BGRA_4444 },
49 // { , RK_FORMAT_RGBA_4444 },
50
51 // { , RK_FORMAT_BGR_888 },
52 { HAL_PIXEL_FORMAT_RGB_888, RK_FORMAT_RGB_888 },
53 // { , RK_FORMAT_BGR_565 },
54 { HAL_PIXEL_FORMAT_RGB_565, RK_FORMAT_RGB_565 },
55
56 // { , RK_FORMAT_YCbCr_422_SP },
57 // { , RK_FORMAT_YCrCb_422_SP },
58 // { , RK_FORMAT_YCbCr_422_P },
59 // { , RK_FORMAT_YCrCb_422_P },
60 // { , RK_FORMAT_YCbCr_422_SP_10B },
61 // { , RK_FORMAT_YCrCb_422_SP_10B },
62 { HAL_PIXEL_FORMAT_YCrCb_NV12, RK_FORMAT_YCbCr_420_SP },
63 { HAL_PIXEL_FORMAT_YCrCb_420_SP, RK_FORMAT_YCrCb_420_SP },
64 // { , RK_FORMAT_YCbCr_420_P },
65 // { , RK_FORMAT_YCrCb_420_P },
66 { HAL_PIXEL_FORMAT_YCrCb_NV12_10, RK_FORMAT_YCbCr_420_SP_10B },
67 // { , RK_FORMAT_YCrCb_420_SP_10B },
68
69 // { , RK_FORMAT_YUYV_422 },
70 // { , RK_FORMAT_YVYU_422 },
71 // { , RK_FORMAT_UYVY_422 },
72 // { , RK_FORMAT_VYUY_422 },
73 // { , RK_FORMAT_YUYV_420 },
74 // { , RK_FORMAT_YVYU_420 },
75 // { , RK_FORMAT_UYVY_420 },
76 // { , RK_FORMAT_VYUY_420 },
77
78 // { , RK_FORMAT_Y4 },
79 // { , RK_FORMAT_YCbCr_400 },
80
81 // { , RK_FORMAT_BPP1 },
82 // { , RK_FORMAT_BPP2 },
83 // { , RK_FORMAT_BPP4 },
84 // { , RK_FORMAT_BPP8 },
85 // { , RK_FORMAT_RGBA2BPP },
86 // { , RK_FORMAT_UNKNOWN },
87 };
88 #else
89 const static std::unordered_map<uint32_t, uint32_t> android_hal_table;
90 #endif
91
get_format_from_android_hal(uint32_t android_hal_format)92 uint32_t get_format_from_android_hal(uint32_t android_hal_format) {
93 auto entry = android_hal_table.find(android_hal_format);
94 if (entry == android_hal_table.end())
95 return RK_FORMAT_UNKNOWN;
96
97 return entry->second;
98 }
99