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