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 struct ImageYuvConverter { 62 int32_t (*NV12ToI420)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_uv, int src_stride_uv, 63 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, 64 int height); 65 int32_t (*I420ToNV21)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_u, int src_stride_u, 66 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, 67 int width, int height); 68 int32_t (*ARGBToNV12)(const uint8_t *src_argb, int src_stride_argb, uint8_t *dst_y, int dst_stride_y, 69 uint8_t *dst_uv, int dst_stride_uv, int width, int height); 70 int32_t (*ARGBToNV21)(const uint8_t *src_argb, int src_stride_argb, uint8_t *dst_y, int dst_stride_y, 71 uint8_t *dst_vu, int dst_stride_vu, int width, int height); 72 int32_t (*ScalePlane)(const uint8_t *src, int src_stride, int src_width, int src_height, 73 uint8_t *dst, int dst_stride, int dst_width, int dst_height, enum FilterMode filtering); 74 void (*SplitUVPlane)(const uint8_t *src_uv, int src_stride_uv, uint8_t *dst_u, int dst_stride_u, uint8_t *dst_v, 75 int dst_stride_v, int width, int height); 76 void (*MergeUVPlane)(const uint8_t *src_u, int src_stride_u, const uint8_t *src_v, int src_stride_v, 77 uint8_t *dst_uv, int dst_stride_uv, int width, int height); 78 int32_t (*I420ToNV12)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_u, int src_stride_u, 79 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, 80 int width, int height); 81 int32_t (*I420Mirror)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_u, int src_stride_u, 82 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, 83 uint8_t *dst_v, int dst_stride_v, int width, int height); 84 int32_t (*NV12ToI420Rotate)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_uv, int src_stride_uv, 85 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, 86 int height, enum RotationMode mode); 87 int32_t (*ABGRToI420)(const uint8_t *src_abgr, int src_stride_abgr, uint8_t *dst_y, int dst_stride_y, 88 uint8_t *dst_u, int dst_stride_u, uint8_t *dst_v, int dst_stride_v, int width, int height); 89 int32_t (*NV12ToARGB)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_uv, int src_stride_uv, 90 uint8_t *dst_argb, int dst_stride_argb, int width, int height); 91 int32_t (*NV21ToARGB)(const uint8_t *src_y, int src_stride_y, const uint8_t *src_vu, int src_stride_vu, 92 uint8_t *dst_argb, int dst_stride_argb, int width, int height); 93 int32_t (*I420Copy)(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_u, int dst_stride_u, 95 uint8_t *dst_v, int dst_stride_v, int width, int height); 96 int32_t (*NV12ToRGB565)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv, 97 uint8_t* dst_rgb565, int dst_stride_rgb565, int width, int height); 98 int32_t (*NV21ToNV12)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_vu, int src_stride_vu, 99 uint8_t* dst_y, int dst_stride_y, uint8_t* dst_uv, int dst_stride_uv, int width, int height); 100 int32_t (*RGB565ToI420)(const uint8_t* src_rgb565, int src_stride_rgb565, uint8_t* dst_y, int dst_stride_y, 101 uint8_t* dst_u, int dst_stride_u, uint8_t* dst_v, int dst_stride_v, int width, int height); 102 int32_t (*ARGBToBGRA)(const uint8_t* src_argb, int src_stride_argb, uint8_t* dst_bgra, int dst_stride_bgra, 103 int width, int height); 104 int32_t (*RGB24ToI420)(const uint8_t* src_rgb24, int src_stride_rgb24, uint8_t* dst_y, int dst_stride_y, 105 uint8_t* dst_u, int dst_stride_u, uint8_t* dst_v, int dst_stride_v, int width, int height); 106 int32_t (*NV21ToI420)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_vu, int src_stride_vu, 107 uint8_t* dst_y, int dst_stride_y, uint8_t* dst_u, int dst_stride_u, uint8_t* dst_v, int dst_stride_v, 108 int width, int height); 109 int32_t (*I420ToRGB565Matrix)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u, 110 const uint8_t* src_v, int src_stride_v, uint8_t* dst_rgb565, int dst_stride_rgb565, 111 enum ColorSpace colorSpace, int width, int height); 112 int32_t (*I420ToABGR)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u, 113 const uint8_t* src_v, int src_stride_v, uint8_t* dst_abgr, int dst_stride_abgr, 114 int width, int height); 115 int32_t (*NV21ToRAW)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_vu, int src_stride_vu, 116 uint8_t* dst_raw, int dst_stride_raw, 117 int width, int height); 118 int32_t (*NV12ToRAW)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv, 119 uint8_t* dst_raw, int dst_stride_raw, 120 int width, int height); 121 int32_t (*I420ToI010)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u, 122 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, 123 uint16_t* dst_v, int dst_stride_v, int width, int height); 124 int32_t (*I010ToP010)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u, 125 const uint16_t* src_v, int src_stride_v, uint16_t* dst_y, int dst_stride_y, uint16_t* dst_uv, 126 int dst_stride_uv, int width, int height); 127 int32_t (*ARGBToI420)(const uint8_t* src_argb, int src_stride_argb, uint8_t* dst_y, int dst_stride_y, 128 uint8_t* dst_u, int dst_stride_u, uint8_t* dst_v, int dst_stride_v, int width, int height); 129 int32_t (*AR30ToARGB)(const uint8_t* src_ar30, int src_stride_ar30, uint8_t* dst_argb, int dst_stride_argb, 130 int width, int height); 131 int32_t (*P010ToI010)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_uv, int src_stride_uv, 132 uint16_t* dst_y, int dst_stride_y, uint16_t* dst_u, int dst_stride_u, uint16_t* dst_v, int dst_stride_v, 133 int width, int height); 134 int32_t (*I010ToAB30)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u, 135 const uint16_t* src_v, int src_stride_v, uint8_t* dst_ab30, int dst_stride_ab30, int width, int height); 136 int32_t (*I010ToI420)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u, 137 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, 138 uint8_t* dst_v, int dst_stride_v, int width, int height); 139 int32_t (*I420ToRGB565)(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, uint8_t* dst_rgb565, int dst_stride_rgb565, int width, int height); 141 int32_t (*I420ToARGB)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u, 142 const uint8_t* src_v, int src_stride_v, uint8_t* dst_argb, int dst_stride_argb, int width, int height); 143 int32_t (*I420ToRAW)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u, 144 const uint8_t* src_v, int src_stride_v, uint8_t* dst_raw, int dst_stride_raw, int width, int height); 145 int32_t (*I010Rotate)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u, 146 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, 147 uint16_t* dst_v, int dst_stride_v, int width, int height, enum RotationMode mode); 148 int32_t (*I420Scale_16)(const uint16_t* src_y, int src_stride_y, const uint16_t* src_u, int src_stride_u, 149 const uint16_t* src_v, int src_stride_v, int src_width, int src_height, uint16_t* dst_y, int dst_stride_y, 150 uint16_t* dst_u, int dst_stride_u, uint16_t* dst_v, int dst_stride_v, int dst_width, int dst_height, 151 enum FilterMode filtering); 152 int32_t (*NV12Mirror)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv, 153 uint8_t* dst_y, int dst_stride_y, uint8_t* dst_uv, int dst_stride_uv, 154 int width, int height); 155 int32_t (*NV12Copy)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv, 156 uint8_t* dst_y, int dst_stride_y, uint8_t* dst_uv, int dst_stride_uv, 157 int width, int height); 158 int32_t (*NV12Scale)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv, int src_stride_uv, 159 int src_width, int src_height, uint8_t* dst_y, int dst_stride_y, uint8_t* dst_uv, int dst_stride_uv, 160 int dst_width, int dst_height, enum FilterMode filtering); 161 }; 162 struct ImageYuvConverter GetImageYuvConverter(void); 163 164 #ifdef __cplusplus 165 } 166 #endif 167 } // namespace OpenSourceLibyuv 168 } // namespace OHOS 169 #endif // FRAMEWORKS_INNERKITSIMPL_COMMON_INCLUDE_IMAGE_CONVERTER_H