1 /* 2 * Copyright (C) 2023 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 /** 17 * @addtogroup image 18 * @{ 19 * 20 * @brief Provides APIs for access to the image interface. 21 * 22 * @Syscap SystemCapability.Multimedia.Image 23 * @since 10 24 * @version 2.0 25 */ 26 27 /** 28 * @file image_mdk.h 29 * 30 * @brief Declares functions that access the image rectangle, size, format, and component data. 31 * Need link <b>libimagendk.z.so</b> 32 * 33 * @kit ImageKit 34 * @since 10 35 * @version 2.0 36 */ 37 38 #ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_MDK_H_ 39 #define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_MDK_H_ 40 #include "napi/native_api.h" 41 #include "image_mdk_common.h" 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 struct ImageNative_; 48 49 /** 50 * @brief Defines an image object at the native layer for the image interface. 51 * 52 * @since 10 53 * @version 2.0 54 */ 55 typedef struct ImageNative_ ImageNative; 56 57 /** 58 * @brief Enumerates the image formats. 59 * 60 * @since 10 61 * @version 2.0 62 */ 63 enum { 64 /** YCbCr422 semi-planar format. */ 65 OHOS_IMAGE_FORMAT_YCBCR_422_SP = 1000, 66 /** JPEG encoding format. */ 67 OHOS_IMAGE_FORMAT_JPEG = 2000 68 }; 69 70 /** 71 * @brief Enumerates the image components. 72 * 73 * @since 10 74 * @version 2.0 75 */ 76 enum { 77 /** Luminance component. */ 78 OHOS_IMAGE_COMPONENT_FORMAT_YUV_Y = 1, 79 /** Chrominance component - blue projection. */ 80 OHOS_IMAGE_COMPONENT_FORMAT_YUV_U = 2, 81 /** Chrominance component - red projection. */ 82 OHOS_IMAGE_COMPONENT_FORMAT_YUV_V = 3, 83 /** JPEG format. */ 84 OHOS_IMAGE_COMPONENT_FORMAT_JPEG = 4, 85 }; 86 87 /** 88 * @brief Defines the information about an image rectangle. 89 * 90 * @since 10 91 * @version 2.0 92 */ 93 struct OhosImageRect { 94 /** X coordinate of the rectangle. */ 95 int32_t x; 96 /** Y coordinate of the rectangle. */ 97 int32_t y; 98 /** Width of the rectangle, in pixels. */ 99 int32_t width; 100 /** Height of the rectangle, in pixels. */ 101 int32_t height; 102 }; 103 104 /** 105 * @brief Defines the image composition information. 106 * 107 * @since 10 108 * @version 2.0 109 */ 110 struct OhosImageComponent { 111 /** Buffer that stores the pixel data. */ 112 uint8_t* byteBuffer; 113 /** Size of the pixel data in the memory. */ 114 size_t size; 115 /** Type of the pixel data. */ 116 int32_t componentType; 117 /** Row stride of the pixel data. */ 118 int32_t rowStride; 119 /** Pixel stride of the pixel data */ 120 int32_t pixelStride; 121 }; 122 123 /** 124 * @brief Parses an {@link ImageNative} object at the native layer from a JavaScript native API <b>image </b> object. 125 * 126 * @param env Indicates the pointer to the Java Native Interface (JNI) environment. 127 * @param source Indicates a JavaScript native API <b>image </b> object. 128 * @return Returns an {@link ImageNative} pointer object if the operation is successful 129 * returns a null pointer otherwise. 130 * @see ImageNative, OH_Image_Release 131 * @since 10 132 * @version 2.0 133 */ 134 ImageNative* OH_Image_InitImageNative(napi_env env, napi_value source); 135 136 /** 137 * @brief Obtains {@link OhosImageRect} of an {@link ImageNative} at the native layer. 138 * 139 * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. 140 * @param rect Indicates the pointer to the {@link OhosImageRect} object obtained. 141 * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. 142 * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. 143 * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. 144 * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. 145 * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. 146 * @see ImageNative, OhosImageRect 147 * @since 10 148 * @version 2.0 149 */ 150 int32_t OH_Image_ClipRect(const ImageNative* native, struct OhosImageRect* rect); 151 152 /** 153 * @brief Obtains {@link OhosImageSize} of an {@link ImageNative} object at the native layer. 154 * 155 * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. 156 * @param size Indicates the pointer to the {@link OhosImageSize} object obtained. 157 * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. 158 * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. 159 * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. 160 * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. 161 * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. 162 * @see ImageNative, OhosImageSize 163 * @since 10 164 * @version 2.0 165 */ 166 int32_t OH_Image_Size(const ImageNative* native, struct OhosImageSize* size); 167 168 /** 169 * @brief Obtains the image format of an {@link ImageNative} object at the native layer. 170 * 171 * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. 172 * @param format Indicates the pointer to the image format obtained. 173 * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. 174 * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. 175 * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. 176 * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. 177 * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. 178 * @see ImageNative 179 * @since 10 180 * @version 2.0 181 */ 182 int32_t OH_Image_Format(const ImageNative* native, int32_t* format); 183 184 /** 185 * @brief Obtains {@link OhosImageComponent} of an {@link ImageNative} object at the native layer. 186 * 187 * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. 188 * @param componentType Indicates the type of the required component. 189 * @param componentNative Indicates the pointer to the {@link OhosImageComponent} object obtained. 190 * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. 191 * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. 192 * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. 193 * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. 194 * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. 195 * @see ImageNative, OhosImageComponent 196 * @since 10 197 * @version 2.0 198 */ 199 int32_t OH_Image_GetComponent(const ImageNative* native, 200 int32_t componentType, struct OhosImageComponent* componentNative); 201 202 /** 203 * @brief Releases an {@link ImageNative} object at the native layer. 204 * Note: This API is not used to release a JavaScript native API <b>Image</b> object. 205 * It is used to release the object {@link ImageNative} at the native layer 206 * parsed by calling {@link OH_Image_InitImageNative}. 207 * 208 * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. 209 * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. 210 * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. 211 * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. 212 * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. 213 * @see ImageNative, OH_Image_InitImageNative 214 * @since 10 215 * @version 2.0 216 */ 217 int32_t OH_Image_Release(ImageNative* native); 218 #ifdef __cplusplus 219 }; 220 #endif 221 /** @} */ 222 #endif // INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_MDK_H_ 223