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 "pixel_map.h"
20 #include "image_type.h"
21 #include "image_utils.h"
22 
23 extern "C" {
24     struct CImageInfo {
25         int32_t height;
26         int32_t width;
27         int32_t density;
28     };
29 
30     struct CSourceOptions {
31         int32_t baseDensity;
32         int32_t pixelFormat;
33         int32_t height;
34         int32_t width;
35     };
36 
37     struct  CInitializationOptions {
38         int32_t alphaType;
39         bool editable = false;
40         int32_t pixelFormat;
41         int32_t scaleMode;
42         int32_t width;
43         int32_t height;
44     };
45 
46     struct CDecodingOptions {
47         int32_t fitDensity;
48         CSize desiredSize;
49         CRegion desiredRegion;
50         float rotateDegrees;
51         uint32_t sampleSize;
52         int32_t desiredPixelFormat;
53         bool editable;
54         int64_t desiredColorSpace;
55     };
56 
57     struct CPackingOption {
58         const char* format;
59         uint8_t quality = 100;
60         uint64_t bufferSize = 10 * 1024 * 1024;
61     };
62 
63     // ImageSource
64     FFI_EXPORT int64_t FfiOHOSCreateImageSourceByPath(char* uri, uint32_t* errCode);
65     FFI_EXPORT int64_t FfiOHOSCreateImageSourceByPathWithOption(char* uri, CSourceOptions opts, uint32_t* errCode);
66     FFI_EXPORT int64_t FfiOHOSCreateImageSourceByFd(int fd, uint32_t* errCode);
67     FFI_EXPORT int64_t FfiOHOSCreateImageSourceByFdWithOption(int fd, CSourceOptions opts, uint32_t* errCode);
68     FFI_EXPORT int64_t FfiOHOSCreateImageSourceByBuffer(uint8_t *data, uint32_t size, uint32_t* errCode);
69     FFI_EXPORT int64_t FfiOHOSCreateImageSourceByRawFile(int fd, int32_t offset,
70         int32_t length, CSourceOptions opts, uint32_t* errCode);
71     FFI_EXPORT int64_t FfiOHOSCreateImageSourceByBufferWithOption(uint8_t *data, uint32_t size, CSourceOptions opts,
72         uint32_t* errCode);
73     FFI_EXPORT int64_t FfiOHOSCreateIncrementalSource(const uint8_t *data, uint32_t size,
74         CSourceOptions opts, uint32_t* errCode);
75     FFI_EXPORT CImageInfo FfiOHOSImageSourceGetImageInfo(int64_t id, uint32_t index, uint32_t* errCode);
76     FFI_EXPORT CArrString FfiOHOSGetSupportedFormats(int64_t id, uint32_t* errCode);
77     FFI_EXPORT char* FfiOHOSGetImageProperty(int64_t id, char* key, uint32_t index, char* defaultValue,
78         uint32_t* errCode);
79     FFI_EXPORT uint32_t FfiOHOSModifyImageProperty(int64_t id, char* key, char* value);
80     FFI_EXPORT RetDataUI32 FfiOHOSGetFrameCount(int64_t id);
81     FFI_EXPORT uint32_t FfiOHOSUpdateData(int64_t id, UpdateDataInfo info);
82     FFI_EXPORT uint32_t FfiOHOSRelease(int64_t id);
83     FFI_EXPORT RetDataI64U32 FfiOHOSImageSourceCreatePixelMap(int64_t id, uint32_t index, CDecodingOptions &opts);
84     FFI_EXPORT CArrI64 FfiOHOSImageSourceCreatePixelMapList(int64_t id, uint32_t index, CDecodingOptions opts,
85         uint32_t* errorCode);
86     FFI_EXPORT CArrI32 FfiOHOSImageSourceGetDelayTime(int64_t id, uint32_t* errorCode);
87 
88     // PixelMap
89     FFI_EXPORT int64_t FfiOHOSCreatePixelMap(uint8_t *colors, uint32_t colorLength, CInitializationOptions opts);
90     FFI_EXPORT bool FfiOHOSGetIsEditable(int64_t id, uint32_t* errCode);
91     FFI_EXPORT bool FfiOHOSGetIsStrideAlignment(int64_t id, uint32_t* errCode);
92     FFI_EXPORT uint32_t FfiOHOSReadPixelsToBuffer(int64_t id, uint64_t bufferSize, uint8_t *dst);
93     FFI_EXPORT uint32_t FfiOHOSWriteBufferToPixels(int64_t id, uint8_t *source, uint64_t bufferSize);
94     FFI_EXPORT int32_t FfiOHOSGetDensity(int64_t id, uint32_t* errCode);
95     FFI_EXPORT uint32_t FfiOHOSOpacity(int64_t id, float percent);
96     FFI_EXPORT uint32_t FfiOHOSCrop(int64_t id, CRegion rect);
97     FFI_EXPORT uint32_t FfiOHOSGetPixelBytesNumber(int64_t id, uint32_t* errCode);
98     FFI_EXPORT uint32_t FfiOHOSGetBytesNumberPerRow(int64_t id, uint32_t* errCode);
99     FFI_EXPORT CImageInfo FfiOHOSGetImageInfo(int64_t id, uint32_t* errCode);
100     FFI_EXPORT uint32_t FfiOHOSScale(int64_t id, float xAxis, float yAxis);
101     FFI_EXPORT uint32_t FfiOHOSFlip(int64_t id, bool xAxis, bool yAxis);
102     FFI_EXPORT uint32_t FfiOHOSRotate(int64_t id, float degrees);
103     FFI_EXPORT uint32_t FfiOHOSTranslate(int64_t id, float xAxis, float yAxis);
104     FFI_EXPORT uint32_t FfiOHOSReadPixels(int64_t id, CPositionArea area);
105     FFI_EXPORT uint32_t FfiOHOSWritePixels(int64_t id, CPositionArea area);
106     FFI_EXPORT int64_t FfiOHOSCreateAlphaPixelMap(int64_t id, uint32_t* errCode);
107     FFI_EXPORT uint32_t FfiOHOSPixelMapRelease(int64_t id);
108     FFI_EXPORT uint32_t FfiOHOSPixelMapSetColorSpace(int64_t id, int64_t colorSpaceId);
109     FFI_EXPORT int64_t FfiOHOSPixelMapGetColorSpace(int64_t id, int32_t* errCode);
110     FFI_EXPORT uint32_t FfiOHOSPixelMapApplyColorSpace(int64_t id, int64_t colorSpaceId);
111 
112     // Image
113     FFI_EXPORT uint32_t FfiOHOSImageGetClipRect(int64_t id, CRegion *retVal);
114     FFI_EXPORT uint32_t FfiOHOSImageGetSize(int64_t id, CSize *retVal);
115     FFI_EXPORT uint32_t FfiOHOSImageGetFormat(int64_t id, int32_t *retVal);
116     FFI_EXPORT uint32_t FfiOHOSGetComponent(int64_t id, int32_t componentType, CRetComponent *ptr);
117     FFI_EXPORT void FfiOHOSImageRelease(int64_t id);
118 
119     // ImageReceiver
120     FFI_EXPORT uint32_t FfiOHOSReceiverGetSize(int64_t id, CSize *retVal);
121     FFI_EXPORT uint32_t FfiOHOSReceiverGetCapacity(int64_t id, int32_t *retVal);
122     FFI_EXPORT uint32_t FfiOHOSReceiverGetFormat(int64_t id, int32_t *retVal);
123     FFI_EXPORT int64_t FfiOHOSCreateImageReceiver(int32_t width, int32_t height, int32_t format, int32_t capacity);
124     FFI_EXPORT char* FfiOHOSGetReceivingSurfaceId(int64_t id);
125     FFI_EXPORT int64_t FfiOHOSReadNextImage(int64_t id);
126     FFI_EXPORT int64_t FfiOHOSReadLatestImage(int64_t id);
127     FFI_EXPORT void FfiOHOSReceiverRelease(int64_t id);
128 
129     // ImagePacker
130     FFI_EXPORT int64_t FFiOHOSImagePackerConstructor();
131     FFI_EXPORT uint64_t FfiOHOSGetPackOptionSize();
132     FFI_EXPORT RetDataCArrUI8 FfiOHOSImagePackerPackingPixelMap(int64_t id, int64_t source, CPackingOption option);
133     FFI_EXPORT RetDataCArrUI8 FfiOHOSImagePackerPackingImageSource(int64_t id, int64_t source,
134         CPackingOption option);
135     FFI_EXPORT RetDataCArrString FfiOHOSImagePackerGetSupportedFormats(int64_t id);
136     FFI_EXPORT uint32_t FfiOHOSImagePackerPackPixelMapToFile(int64_t id, int64_t source, int fd,
137         CPackingOption option);
138     FFI_EXPORT uint32_t FfiOHOSImagePackerImageSourcePackToFile(int64_t id, int64_t source, int fd,
139         CPackingOption option);
140     FFI_EXPORT void FFiOHOSImagePackerRelease(int64_t id);
141 
142     // ImageCreator
143     FFI_EXPORT int64_t FFiOHOSImageCreatorConstructor(int32_t width, int32_t height, int32_t format, int32_t capacity);
144     FFI_EXPORT RetDataI32 FFiOHOSImageCreatorGetCapacity(int64_t id);
145     FFI_EXPORT RetDataI32 FFiOHOSImageCreatorGetformat(int64_t id);
146     FFI_EXPORT int64_t FFiOHOSImageCreatorDequeueImage(int64_t id, uint32_t* errCode);
147     FFI_EXPORT void FFiOHOSImageCreatorQueueImage(int64_t id, int64_t imageId);
148     FFI_EXPORT void FFiOHOSImageCreatorOn(int64_t id);
149     FFI_EXPORT void FFiOHOSImageCreatorRelease(int64_t id);
150 }
151 
152 #endif