• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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