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 #ifndef IMAGE_FFI_H 16 #define IMAGE_FFI_H 17 18 #include "cj_ffi/cj_common_ffi.h" 19 #include "cj_image_utils.h" 20 #include "cj_lambda.h" 21 #include "image_type.h" 22 #include "napi/native_api.h" 23 #include "picture_impl.h" 24 #include "pixel_map.h" 25 26 extern "C" { 27 struct CImageInfo { 28 int32_t height; 29 int32_t width; 30 int32_t density; 31 }; 32 33 struct CImageInfoV2 { 34 int32_t height; 35 int32_t width; 36 int32_t density; 37 int32_t stride; 38 int32_t pixelFormat; 39 int32_t alphaType; 40 char* mimeType; 41 bool isHdr; 42 }; 43 44 struct CSourceOptions { 45 int32_t baseDensity; 46 int32_t pixelFormat; 47 int32_t height; 48 int32_t width; 49 }; 50 51 struct CInitializationOptions { 52 int32_t alphaType; 53 bool editable = false; 54 int32_t pixelFormat; 55 int32_t scaleMode; 56 int32_t width; 57 int32_t height; 58 }; 59 60 struct CInitializationOptionsV2 { 61 int32_t alphaType; 62 bool editable = false; 63 int32_t srcPixelFormat; 64 int32_t pixelFormat; 65 int32_t scaleMode; 66 int32_t width; 67 int32_t height; 68 }; 69 70 struct CDecodingOptions { 71 int32_t fitDensity; 72 CSize desiredSize; 73 CRegion desiredRegion; 74 float rotateDegrees; 75 uint32_t sampleSize; 76 int32_t desiredPixelFormat; 77 bool editable; 78 int64_t desiredColorSpace; 79 }; 80 81 struct CDecodingOptionsV2 { 82 int32_t fitDensity; 83 CSize desiredSize; 84 CRegion desiredRegion; 85 float rotateDegrees; 86 uint32_t sampleSize; 87 int32_t desiredPixelFormat; 88 bool editable; 89 int64_t desiredColorSpace; 90 int32_t desiredDynamicRange; 91 }; 92 93 struct CPackingOption { 94 const char* format; 95 uint8_t quality; 96 uint64_t bufferSize; 97 }; 98 99 struct CPackingOptionV2 { 100 const char* format; 101 uint8_t quality; 102 uint64_t bufferSize; 103 int32_t desiredDynamicRange; 104 bool needsPackProperties; 105 }; 106 107 struct CjProperties { 108 char** key; 109 char** value; 110 int64_t size; 111 }; 112 113 FFI_EXPORT napi_value FfiConvertPixelMap2Napi(napi_env env, uint64_t id); 114 FFI_EXPORT int64_t FfiCreatePixelMapFromNapi(napi_env env, napi_value pixelmap); 115 116 // ImageSource 117 FFI_EXPORT int64_t FfiOHOSCreateImageSourceByPath(char* uri, uint32_t* errCode); 118 FFI_EXPORT int64_t FfiOHOSCreateImageSourceByPathWithOption(char* uri, CSourceOptions opts, uint32_t* errCode); 119 FFI_EXPORT int64_t FfiOHOSCreateImageSourceByFd(int fd, uint32_t* errCode); 120 FFI_EXPORT int64_t FfiOHOSCreateImageSourceByFdWithOption(int fd, CSourceOptions opts, uint32_t* errCode); 121 FFI_EXPORT int64_t FfiOHOSCreateImageSourceByBuffer(uint8_t* data, uint32_t size, uint32_t* errCode); 122 FFI_EXPORT int64_t FfiOHOSCreateImageSourceByRawFile( 123 int fd, int32_t offset, int32_t length, CSourceOptions opts, uint32_t* errCode); 124 FFI_EXPORT int64_t FfiOHOSCreateImageSourceByBufferWithOption( 125 uint8_t* data, uint32_t size, CSourceOptions opts, uint32_t* errCode); 126 FFI_EXPORT int64_t FfiOHOSCreateIncrementalSource( 127 const uint8_t* data, uint32_t size, CSourceOptions opts, uint32_t* errCode); 128 FFI_EXPORT CImageInfo FfiOHOSImageSourceGetImageInfo(int64_t id, uint32_t index, uint32_t* errCode); 129 FFI_EXPORT CImageInfoV2 FfiOHOSImageSourceGetImageInfoV2(int64_t id, uint32_t index, uint32_t* errCode); 130 FFI_EXPORT CArrString FfiOHOSGetSupportedFormats(int64_t id, uint32_t* errCode); 131 FFI_EXPORT char* FfiOHOSGetImageProperty(int64_t id, char* key, uint32_t index, char* defaultValue, uint32_t* errCode); 132 FFI_EXPORT uint32_t FfiOHOSModifyImageProperty(int64_t id, char* key, char* value); 133 FFI_EXPORT RetDataUI32 FfiOHOSGetFrameCount(int64_t id); 134 FFI_EXPORT uint32_t FfiOHOSUpdateData(int64_t id, UpdateDataInfo info); 135 FFI_EXPORT uint32_t FfiOHOSRelease(int64_t id); 136 FFI_EXPORT RetDataI64U32 FfiOHOSImageSourceCreatePixelMap(int64_t id, uint32_t index, CDecodingOptions opts); 137 FFI_EXPORT RetDataI64U32 FfiOHOSImageSourceCreatePixelMapV2(int64_t id, uint32_t index, CDecodingOptionsV2 opts); 138 FFI_EXPORT CArrI64 FfiOHOSImageSourceCreatePixelMapList( 139 int64_t id, uint32_t index, CDecodingOptions opts, uint32_t* errorCode); 140 FFI_EXPORT CArrI64 FfiOHOSImageSourceCreatePixelMapListV2( 141 int64_t id, uint32_t index, CDecodingOptionsV2 opts, uint32_t* errorCode); 142 FFI_EXPORT CArrI32 FfiOHOSImageSourceGetDelayTime(int64_t id, uint32_t* errorCode); 143 FFI_EXPORT CArrI32 FfiImageImageSourceImplGetDisposalTypeList(int64_t id, uint32_t* errorCode); 144 FFI_EXPORT uint32_t FfiImageImageSourceImplModifyImageProperties(int64_t id, CArrString key, CArrString value); 145 FFI_EXPORT uint32_t FfiImageImageSourceImplGetImageProperties(int64_t id, CArrString key, char** value); 146 147 // PixelMap 148 FFI_EXPORT int64_t FfiOHOSCreatePixelMap(uint8_t* colors, uint32_t colorLength, CInitializationOptions opts); 149 FFI_EXPORT int64_t FfiOHOSCreatePixelMapV2(uint8_t* colors, uint32_t colorLength, CInitializationOptionsV2 opts); 150 FFI_EXPORT int64_t FfiImagePixelMapImplCreatePixelMap(CInitializationOptionsV2 opts); 151 FFI_EXPORT bool FfiOHOSGetIsEditable(int64_t id, uint32_t* errCode); 152 FFI_EXPORT bool FfiOHOSGetIsStrideAlignment(int64_t id, uint32_t* errCode); 153 FFI_EXPORT uint32_t FfiOHOSReadPixelsToBuffer(int64_t id, uint64_t bufferSize, uint8_t* dst); 154 FFI_EXPORT uint32_t FfiOHOSWriteBufferToPixels(int64_t id, uint8_t* source, uint64_t bufferSize); 155 FFI_EXPORT int32_t FfiOHOSGetDensity(int64_t id, uint32_t* errCode); 156 FFI_EXPORT uint32_t FfiOHOSOpacity(int64_t id, float percent); 157 FFI_EXPORT uint32_t FfiOHOSCrop(int64_t id, CRegion rect); 158 FFI_EXPORT uint32_t FfiOHOSGetPixelBytesNumber(int64_t id, uint32_t* errCode); 159 FFI_EXPORT uint32_t FfiOHOSGetBytesNumberPerRow(int64_t id, uint32_t* errCode); 160 FFI_EXPORT CImageInfo FfiOHOSGetImageInfo(int64_t id, uint32_t* errCode); 161 FFI_EXPORT CImageInfoV2 FfiOHOSGetImageInfoV2(int64_t id, uint32_t* errCode); 162 FFI_EXPORT uint32_t FfiOHOSScale(int64_t id, float xAxis, float yAxis); 163 FFI_EXPORT uint32_t FfiImagePixelMapImplScale(int64_t id, float xAxis, float yAxis, int32_t antiAliasing); 164 FFI_EXPORT uint32_t FfiOHOSFlip(int64_t id, bool xAxis, bool yAxis); 165 FFI_EXPORT uint32_t FfiOHOSRotate(int64_t id, float degrees); 166 FFI_EXPORT uint32_t FfiOHOSTranslate(int64_t id, float xAxis, float yAxis); 167 FFI_EXPORT uint32_t FfiOHOSReadPixels(int64_t id, CPositionArea area); 168 FFI_EXPORT uint32_t FfiOHOSWritePixels(int64_t id, CPositionArea area); 169 FFI_EXPORT int64_t FfiOHOSCreateAlphaPixelMap(int64_t id, uint32_t* errCode); 170 FFI_EXPORT uint32_t FfiOHOSPixelMapRelease(int64_t id); 171 FFI_EXPORT uint32_t FfiOHOSPixelMapSetColorSpace(int64_t id, int64_t colorSpaceId); 172 FFI_EXPORT int64_t FfiOHOSPixelMapGetColorSpace(int64_t id, int32_t* errCode); 173 FFI_EXPORT uint32_t FfiOHOSPixelMapApplyColorSpace(int64_t id, int64_t colorSpaceId); 174 FFI_EXPORT uint32_t FfiImagePixelMapImplCreatePremultipliedPixelMap(int64_t srcId, int64_t dstId); 175 FFI_EXPORT uint32_t FfiImagePixelMapImplCreateUnpremultipliedPixelMap(int64_t srcId, int64_t dstId); 176 FFI_EXPORT uint32_t FfiImagePixelMapImplSetTransferDetached(int64_t id, bool detached); 177 FFI_EXPORT uint32_t FfiImagePixelMapImplToSdr(int64_t id); 178 FFI_EXPORT uint32_t FfiImagePixelMapImplMarshalling(int64_t id, int64_t rpcId); 179 FFI_EXPORT int64_t FfiImagePixelMapImplUnmarshalling(int64_t id, int64_t rpcId, uint32_t* errCode); 180 FFI_EXPORT uint32_t FfiImagePixelMapImplConvertPixelMapFormat(int64_t id, int32_t targetFormat); 181 FFI_EXPORT int64_t FfiImagePixelMapImplCreatePixelMapFromSurface( 182 char* surfaceId, CRegion rect, size_t argc, uint32_t* errCode); 183 FFI_EXPORT int64_t FfiImagePixelMapImplCreatePixelMapFromParcel(int64_t rpcId, uint32_t* errCode); 184 185 // Image 186 FFI_EXPORT uint32_t FfiOHOSImageGetClipRect(int64_t id, CRegion* retVal); 187 FFI_EXPORT uint32_t FfiOHOSImageGetSize(int64_t id, CSize* retVal); 188 FFI_EXPORT uint32_t FfiOHOSImageGetFormat(int64_t id, int32_t* retVal); 189 FFI_EXPORT uint32_t FfiOHOSGetComponent(int64_t id, int32_t componentType, CRetComponent* ptr); 190 FFI_EXPORT int64_t FfiImageImageImplGetTimestamp(int64_t id); 191 FFI_EXPORT void FfiOHOSImageRelease(int64_t id); 192 193 // ImageReceiver 194 FFI_EXPORT uint32_t FfiOHOSReceiverGetSize(int64_t id, CSize* retVal); 195 FFI_EXPORT uint32_t FfiOHOSReceiverGetCapacity(int64_t id, int32_t* retVal); 196 FFI_EXPORT uint32_t FfiOHOSReceiverGetFormat(int64_t id, int32_t* retVal); 197 FFI_EXPORT int64_t FfiOHOSCreateImageReceiver(int32_t width, int32_t height, int32_t format, int32_t capacity); 198 FFI_EXPORT char* FfiOHOSGetReceivingSurfaceId(int64_t id); 199 FFI_EXPORT int64_t FfiOHOSReadNextImage(int64_t id); 200 FFI_EXPORT int64_t FfiOHOSReadLatestImage(int64_t id); 201 FFI_EXPORT void FfiOHOSReceiverRelease(int64_t id); 202 FFI_EXPORT uint32_t FfiImageReceiverImplOn(int64_t id, char* name, int64_t callbackId); 203 204 // ImagePacker 205 FFI_EXPORT int64_t FFiOHOSImagePackerConstructor(); 206 FFI_EXPORT uint64_t FfiOHOSGetPackOptionSize(); 207 FFI_EXPORT RetDataCArrUI8 FfiOHOSImagePackerPackingPixelMap(int64_t id, int64_t source, CPackingOption option); 208 FFI_EXPORT RetDataCArrUI8 FfiOHOSImagePackerPackingPixelMapV2(int64_t id, int64_t source, CPackingOptionV2 option); 209 FFI_EXPORT RetDataCArrUI8 FfiOHOSImagePackerPackingImageSource(int64_t id, int64_t source, CPackingOption option); 210 FFI_EXPORT RetDataCArrUI8 FfiOHOSImagePackerPackingImageSourceV2(int64_t id, int64_t source, CPackingOptionV2 option); 211 FFI_EXPORT RetDataCArrUI8 FfiImageImagePackerImplPackToDataPixelMap( 212 int64_t id, int64_t source, CPackingOptionV2 option); 213 FFI_EXPORT RetDataCArrUI8 FfiImageImagePackerImplPackToDataImageSource( 214 int64_t id, int64_t source, CPackingOptionV2 option); 215 FFI_EXPORT RetDataCArrUI8 FfiImageImagePackerImplPackingPicture(int64_t id, int64_t source, CPackingOptionV2 option); 216 FFI_EXPORT RetDataCArrString FfiOHOSImagePackerGetSupportedFormats(int64_t id); 217 FFI_EXPORT uint32_t FfiOHOSImagePackerPackPixelMapToFile(int64_t id, int64_t source, int fd, CPackingOption option); 218 FFI_EXPORT uint32_t FfiOHOSImagePackerPackPixelMapToFileV2(int64_t id, int64_t source, int fd, CPackingOptionV2 option); 219 FFI_EXPORT uint32_t FfiOHOSImagePackerImageSourcePackToFile(int64_t id, int64_t source, int fd, CPackingOption option); 220 FFI_EXPORT uint32_t FfiOHOSImagePackerImageSourcePackToFileV2( 221 int64_t id, int64_t source, int fd, CPackingOptionV2 option); 222 FFI_EXPORT uint32_t FfiImageImagePackerImplPackToFilePicture( 223 int64_t id, int64_t source, int fd, CPackingOptionV2 option); 224 FFI_EXPORT void FFiOHOSImagePackerRelease(int64_t id); 225 226 // ImageCreator 227 FFI_EXPORT int64_t FFiOHOSImageCreatorConstructor(int32_t width, int32_t height, int32_t format, int32_t capacity); 228 FFI_EXPORT RetDataI32 FFiOHOSImageCreatorGetCapacity(int64_t id); 229 FFI_EXPORT RetDataI32 FFiOHOSImageCreatorGetformat(int64_t id); 230 FFI_EXPORT int64_t FFiOHOSImageCreatorDequeueImage(int64_t id, uint32_t* errCode); 231 FFI_EXPORT void FFiOHOSImageCreatorQueueImage(int64_t id, int64_t imageId); 232 FFI_EXPORT void FFiOHOSImageCreatorRelease(int64_t id); 233 FFI_EXPORT uint32_t FfiImageImageCreatorImplOn(int64_t id, char* name, int64_t callbackId); 234 235 // Pictute 236 FFI_EXPORT int64_t FfiImagePictureImplCreatePicture(int64_t id, uint32_t* errCode); 237 FFI_EXPORT uint32_t FfiImagePictureImplSetMetadata(int64_t id, int32_t metadataType, int64_t metadataId); 238 FFI_EXPORT int64_t FfiImagePictureImplGetMetadata(int64_t id, int32_t metadataType, uint32_t* errCode); 239 240 // Metadata 241 FFI_EXPORT CjProperties FfiImageMetadataImplGetAllProperties(int64_t id, uint32_t* errCode); 242 FFI_EXPORT void FfiImageMetadataImplReleaseProperties(CjProperties* properties); 243 } 244 245 #endif