• 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_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