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