xref: /OK3568_Linux_fs/external/linux-rga/core/utils/android_utils/src/android_utils.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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