• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FRAMEWORKS_INNERKITSIMPL_COMMON_INCLUDE_IMAGE_CONVERTER_H
17 #define FRAMEWORKS_INNERKITSIMPL_COMMON_INCLUDE_IMAGE_CONVERTER_H
18 
19 #include <stdint.h>
20 
21 namespace OHOS {
22 namespace OpenSourceLibyuv {
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 typedef enum FilterMode {
28     kFilterNone = 0,
29     kFilterLinear = 1,
30     kFilterBilinear = 2,
31     kFilterBox = 3
32 } FilterModeEnum;
33 
34 typedef enum RotationMode {
35     kRotate0 = 0,
36     kRotate90 = 90,
37     kRotate180 = 180,
38     kRotate270 = 270,
39 } RotationModeEnum;
40 
41 typedef enum ColorSpace {
42     UNKNOWN = 0,
43     DISPLAY_P3 = 1,
44     SRGB = 2,
45     LINEAR_SRGB = 3,
46     EXTENDED_SRGB = 4,
47     LINEAR_EXTENDED_SRGB = 5,
48     GENERIC_XYZ = 6,
49     GENERIC_LAB = 7,
50     ACES = 8,
51     ACES_CG = 9,
52     ADOBE_RGB_1998 = 10,
53     DCI_P3 = 11,
54     ITU_709 = 12,
55     ITU_2020 = 13,
56     ROMM_RGB = 14,
57     NTSC_1953 = 15,
58     SMPTE_C = 16,
59 } ColorSpaceEnum;
60 
61 typedef enum YuvConstants {
62     YuvI601 = 1,
63     YuvJPEG = 2,
64     YuvH709 = 3,
65     YuvF709 = 4,
66     Yuv2020 = 5,
67     YuvV2020 = 6,
68     YvuI601 = 7,
69     YvuJPEG = 8,
70     YvuH709 = 9,
71     YvuF709 = 10,
72     Yvu2020 = 11,
73     YvuV2020 = 12,
74 } YuvConstantsEnum;
75 
76 struct ImageYuvConverter {
77     int32_t (*NV12ToI420)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_uv, int src_stride_uv,
78         uint8_t *dst_y, int dst_stride_y, uint8_t *dst_u, int dst_stride_u, uint8_t *dst_v, int dst_stride_v, int width,
79         int height);
80     int32_t (*I420ToNV21)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_u, int src_stride_u,
81         const uint8_t *src_v, int src_stride_v, uint8_t *dst_y, int dst_stride_y, uint8_t *dst_vu, int dst_stride_vu,
82         int width, int height);
83     int32_t (*ARGBToNV12)(const uint8_t *src_argb, int src_stride_argb, uint8_t *dst_y, int dst_stride_y,
84         uint8_t *dst_uv, int dst_stride_uv, int width, int height);
85     int32_t (*ARGBToNV21)(const uint8_t *src_argb, int src_stride_argb, uint8_t *dst_y, int dst_stride_y,
86         uint8_t *dst_vu, int dst_stride_vu, int width, int height);
87     int32_t (*ScalePlane)(const uint8_t *src, int src_stride, int src_width, int src_height,
88         uint8_t *dst, int dst_stride, int dst_width, int dst_height, enum FilterMode filtering);
89     void (*SplitUVPlane)(const uint8_t *src_uv, int src_stride_uv, uint8_t *dst_u, int dst_stride_u, uint8_t *dst_v,
90         int dst_stride_v, int width, int height);
91     void (*MergeUVPlane)(const uint8_t *src_u, int src_stride_u, const uint8_t *src_v, int src_stride_v,
92         uint8_t *dst_uv, int dst_stride_uv, int width, int height);
93     int32_t (*I420ToNV12)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_u, int src_stride_u,
94         const uint8_t *src_v, int src_stride_v, uint8_t *dst_y, int dst_stride_y, uint8_t *dst_uv, int dst_stride_uv,
95         int width, int height);
96     int32_t (*I420Mirror)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_u, int src_stride_u,
97         const uint8_t *src_v, int src_stride_v, uint8_t *dst_y, int dst_stride_y, uint8_t *dst_u, int dst_stride_u,
98         uint8_t *dst_v, int dst_stride_v, int width, int height);
99     int32_t (*NV12ToI420Rotate)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_uv, int src_stride_uv,
100         uint8_t *dst_y, int dst_stride_y, uint8_t *dst_u, int dst_stride_u, uint8_t *dst_v, int dst_stride_v, int width,
101         int height, enum RotationMode mode);
102     int32_t (*ABGRToI420)(const uint8_t *src_abgr, int src_stride_abgr, uint8_t *dst_y, int dst_stride_y,
103         uint8_t *dst_u, int dst_stride_u, uint8_t *dst_v, int dst_stride_v, int width, int height);
104     int32_t (*NV12ToARGB)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_uv, int src_stride_uv,
105         uint8_t *dst_argb, int dst_stride_argb, int width, int height);
106     int32_t (*NV21ToARGB)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_vu, int src_stride_vu,
107         uint8_t *dst_argb, int dst_stride_argb, int width, int height);
108     int32_t (*I420Copy)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_u, int src_stride_u,
109         const uint8_t *src_v, int src_stride_v, uint8_t *dst_y, int dst_stride_y, uint8_t *dst_u, int dst_stride_u,
110         uint8_t *dst_v, int dst_stride_v, int width, int height);
111     int32_t (*NV12ToRGB565)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv,
112         uint8_t* dst_rgb565, int dst_stride_rgb565, int width, int height);
113     int32_t (*NV21ToNV12)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_vu, int src_stride_vu,
114         uint8_t* dst_y, int dst_stride_y, uint8_t* dst_uv, int dst_stride_uv, int width, int height);
115     int32_t (*RGB565ToI420)(const uint8_t* src_rgb565, int src_stride_rgb565, uint8_t* dst_y, int dst_stride_y,
116         uint8_t* dst_u, int dst_stride_u, uint8_t* dst_v, int dst_stride_v, int width, int height);
117     int32_t (*ARGBToBGRA)(const uint8_t* src_argb, int src_stride_argb, uint8_t* dst_bgra, int dst_stride_bgra,
118         int width, int height);
119     int32_t (*RGB24ToI420)(const uint8_t* src_rgb24, int src_stride_rgb24, uint8_t* dst_y, int dst_stride_y,
120         uint8_t* dst_u, int dst_stride_u, uint8_t* dst_v, int dst_stride_v, int width, int height);
121     int32_t (*NV21ToI420)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_vu, int src_stride_vu,
122         uint8_t* dst_y, int dst_stride_y, uint8_t* dst_u, int dst_stride_u, uint8_t* dst_v, int dst_stride_v,
123         int width, int height);
124     int32_t (*I420ToRGB565Matrix)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u,
125         const uint8_t* src_v, int src_stride_v, uint8_t* dst_rgb565, int dst_stride_rgb565,
126         enum ColorSpace colorSpace, int width, int height);
127     int32_t (*I420ToARGBMatrix)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u,
128         const uint8_t* src_v, int src_stride_v, uint8_t* dst_argb, int dst_stride_argb,
129         enum YuvConstants yuvConstants, int width, int height);
130     int32_t (*I420ToABGR)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u,
131         const uint8_t* src_v, int src_stride_v, uint8_t* dst_abgr, int dst_stride_abgr,
132         int width, int height);
133     int32_t (*NV21ToRAW)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_vu, int src_stride_vu,
134         uint8_t* dst_raw, int dst_stride_raw,
135         int width, int height);
136     int32_t (*NV12ToRAW)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv,
137         uint8_t* dst_raw, int dst_stride_raw,
138         int width, int height);
139     int32_t (*I420ToI010)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u,
140         const uint8_t* src_v, int src_stride_v, uint16_t* dst_y, int dst_stride_y, uint16_t* dst_u, int dst_stride_u,
141         uint16_t* dst_v, int dst_stride_v, int width, int height);
142     int32_t (*I010ToP010)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u,
143         const uint16_t* src_v, int src_stride_v, uint16_t* dst_y, int dst_stride_y, uint16_t* dst_uv,
144         int dst_stride_uv, int width, int height);
145     int32_t (*ARGBToI420)(const uint8_t* src_argb, int src_stride_argb, uint8_t* dst_y, int dst_stride_y,
146         uint8_t* dst_u, int dst_stride_u, uint8_t* dst_v, int dst_stride_v, int width, int height);
147     int32_t (*AR30ToARGB)(const uint8_t* src_ar30, int src_stride_ar30, uint8_t* dst_argb, int dst_stride_argb,
148         int width, int height);
149     int32_t (*P010ToI010)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_uv, int src_stride_uv,
150         uint16_t* dst_y, int dst_stride_y, uint16_t* dst_u, int dst_stride_u, uint16_t* dst_v, int dst_stride_v,
151         int width, int height);
152     int32_t (*I010ToAB30)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u,
153         const uint16_t* src_v, int src_stride_v, uint8_t* dst_ab30, int dst_stride_ab30, int width, int height);
154     int32_t (*I010ToI420)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u,
155         const uint16_t* src_v, int src_stride_v, uint8_t* dst_y, int dst_stride_y, uint8_t* dst_u, int dst_stride_u,
156         uint8_t* dst_v, int dst_stride_v, int width, int height);
157     int32_t (*I420ToRGB565)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u,
158         const uint8_t* src_v, int src_stride_v, uint8_t* dst_rgb565, int dst_stride_rgb565, int width, int height);
159     int32_t (*I420ToARGB)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u,
160         const uint8_t* src_v, int src_stride_v, uint8_t* dst_argb, int dst_stride_argb, int width, int height);
161     int32_t (*I420ToRAW)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u,
162         const uint8_t* src_v, int src_stride_v, uint8_t* dst_raw, int dst_stride_raw, int width, int height);
163     int32_t (*I010Rotate)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u,
164         const uint16_t* src_v, int src_stride_v, uint16_t* dst_y, int dst_stride_y, uint16_t* dst_u, int dst_stride_u,
165         uint16_t* dst_v, int dst_stride_v, int width, int height, enum RotationMode mode);
166     int32_t (*I420Scale_16)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u,
167         const uint16_t* src_v, int src_stride_v, int src_width, int src_height, uint16_t* dst_y, int dst_stride_y,
168         uint16_t* dst_u, int dst_stride_u, uint16_t* dst_v, int dst_stride_v, int dst_width, int dst_height,
169         enum FilterMode filtering);
170     int32_t (*NV12Mirror)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv,
171         uint8_t* dst_y, int dst_stride_y, uint8_t* dst_uv, int dst_stride_uv,
172         int width, int height);
173     int32_t (*NV12Copy)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv,
174         uint8_t* dst_y, int dst_stride_y, uint8_t* dst_uv, int dst_stride_uv,
175         int width, int height);
176     int32_t (*NV12Scale)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv,
177         int src_width, int src_height, uint8_t* dst_y, int dst_stride_y, uint8_t* dst_uv, int dst_stride_uv,
178         int dst_width, int dst_height, enum FilterMode filtering);
179     int32_t (*ABGRToJ420)(const uint8_t *src_abgr, int src_stride_abgr, uint8_t *dst_yj, int dst_stride_yj,
180         uint8_t *dst_uj, int dst_stride_uj, uint8_t *dst_vj, int dst_stride_vj, int width, int height);
181     int32_t (*U010VUToAB30)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u,
182         const uint16_t* src_v, int src_stride_v, uint8_t* dst_ab30, int dst_stride_ab30, int width, int height);
183 };
184 struct ImageYuvConverter GetImageYuvConverter(void);
185 
186 #ifdef __cplusplus
187 }
188 #endif
189 } // namespace OpenSourceLibyuv
190 } // namespace OHOS
191 #endif // FRAMEWORKS_INNERKITSIMPL_COMMON_INCLUDE_IMAGE_CONVERTER_H