1 /*
2 * Copyright (C) 2022 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
16 #include "image_pixel_map_mdk.h"
17 #include "image_pixel_map_napi_kits.h"
18 #include "native_pixel_map.h"
19 #include "common_utils.h"
20
21 using namespace OHOS::Media;
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 struct NativePixelMap_ {
27 PixelMapNapi* napi = nullptr;
28 };
29
30 MIDK_EXPORT
OH_PixelMap_InitNativePixelMap(napi_env env,napi_value source)31 NativePixelMap* OH_PixelMap_InitNativePixelMap(napi_env env, napi_value source)
32 {
33 PixelMapNapi* napi = PixelMapNapi_Unwrap(env, source);
34 if (napi == nullptr) {
35 return nullptr;
36 }
37 std::unique_ptr<NativePixelMap> result = std::make_unique<NativePixelMap>();
38 result->napi = napi;
39 return result.release();
40 }
41
42 MIDK_EXPORT
OH_PixelMap_CreatePixelMap(napi_env env,OhosPixelMapCreateOps info,void * buf,size_t len,napi_value * res)43 int32_t OH_PixelMap_CreatePixelMap(napi_env env, OhosPixelMapCreateOps info,
44 void* buf, size_t len, napi_value* res)
45 {
46 PixelMapNapiArgs args;
47 args.createOptions.width = info.width;
48 args.createOptions.height = info.height;
49 args.createOptions.pixelFormat = info.pixelFormat;
50 args.createOptions.editable = info.editable;
51 args.createOptions.alphaType = info.alphaType;
52 args.createOptions.scaleMode = info.scaleMode;
53 args.rowStride = 0;
54 args.inBuffer = buf;
55 args.bufferLen = len;
56 args.outValue = res;
57 args.useDMA = false;
58 return PixelMapNapiNativeEnvCall(ENV_FUNC_CREATE, env, &args);
59 }
60
61 MIDK_EXPORT
OH_PixelMap_CreatePixelMapWithStride(napi_env env,OhosPixelMapCreateOps info,void * buf,size_t len,int32_t rowStride,napi_value * res)62 int32_t OH_PixelMap_CreatePixelMapWithStride(napi_env env, OhosPixelMapCreateOps info,
63 void* buf, size_t len, int32_t rowStride, napi_value* res)
64 {
65 PixelMapNapiArgs args;
66 args.createOptions.width = info.width;
67 args.createOptions.height = info.height;
68 args.createOptions.pixelFormat = info.pixelFormat;
69 args.createOptions.editable = info.editable;
70 args.createOptions.alphaType = info.alphaType;
71 args.createOptions.scaleMode = info.scaleMode;
72 args.rowStride = rowStride;
73 args.inBuffer = buf;
74 args.bufferLen = len;
75 args.outValue = res;
76 args.useDMA = true;
77 return PixelMapNapiNativeEnvCall(ENV_FUNC_CREATE, env, &args);
78 }
79
80 MIDK_EXPORT
OH_PixelMap_CreateAlphaPixelMap(napi_env env,napi_value source,napi_value * alpha)81 int32_t OH_PixelMap_CreateAlphaPixelMap(napi_env env, napi_value source, napi_value* alpha)
82 {
83 PixelMapNapiArgs args;
84 args.inValue = source;
85 args.outValue = alpha;
86 return PixelMapNapiNativeEnvCall(ENV_FUNC_CREATE_ALPHA, env, &args);
87 }
88
89
90 MIDK_EXPORT
OH_PixelMap_GetBytesNumberPerRow(const NativePixelMap * native,int32_t * num)91 int32_t OH_PixelMap_GetBytesNumberPerRow(const NativePixelMap* native, int32_t* num)
92 {
93 if (native == nullptr || native->napi == nullptr) {
94 return IMAGE_RESULT_BAD_PARAMETER;
95 }
96 PixelMapNapiArgs args;
97 args.outNum = num;
98 return PixelMapNapiNativeCtxCall(CTX_FUNC_GET_ROW_BYTES, native->napi, &args);
99 }
100
101 MIDK_EXPORT
OH_PixelMap_GetIsEditable(const NativePixelMap * native,int32_t * editable)102 int32_t OH_PixelMap_GetIsEditable(const NativePixelMap* native, int32_t* editable)
103 {
104 if (native == nullptr || native->napi == nullptr) {
105 return IMAGE_RESULT_BAD_PARAMETER;
106 }
107 PixelMapNapiArgs args;
108 args.outNum = editable;
109 return PixelMapNapiNativeCtxCall(CTX_FUNC_IS_EDITABLE, native->napi, &args);
110 }
111
112 MIDK_EXPORT
OH_PixelMap_IsSupportAlpha(const NativePixelMap * native,int32_t * alpha)113 int32_t OH_PixelMap_IsSupportAlpha(const NativePixelMap* native, int32_t* alpha)
114 {
115 if (native == nullptr || native->napi == nullptr) {
116 return IMAGE_RESULT_BAD_PARAMETER;
117 }
118 PixelMapNapiArgs args;
119 args.outNum = alpha;
120 return PixelMapNapiNativeCtxCall(CTX_FUNC_IS_SUPPORT_ALPHA, native->napi, &args);
121 }
122
123 MIDK_EXPORT
OH_PixelMap_SetAlphaAble(const NativePixelMap * native,int32_t alpha)124 int32_t OH_PixelMap_SetAlphaAble(const NativePixelMap* native, int32_t alpha)
125 {
126 if (native == nullptr || native->napi == nullptr) {
127 return IMAGE_RESULT_BAD_PARAMETER;
128 }
129 PixelMapNapiArgs args;
130 args.inNum0 = alpha;
131 return PixelMapNapiNativeCtxCall(CTX_FUNC_SET_ALPHAABLE, native->napi, &args);
132 }
133
134 MIDK_EXPORT
OH_PixelMap_GetDensity(const NativePixelMap * native,int32_t * density)135 int32_t OH_PixelMap_GetDensity(const NativePixelMap* native, int32_t* density)
136 {
137 if (native == nullptr || native->napi == nullptr) {
138 return IMAGE_RESULT_BAD_PARAMETER;
139 }
140 PixelMapNapiArgs args;
141 args.outNum = density;
142 return PixelMapNapiNativeCtxCall(CTX_FUNC_GET_DENSITY, native->napi, &args);
143 }
144
145 MIDK_EXPORT
OH_PixelMap_SetDensity(const NativePixelMap * native,int32_t density)146 int32_t OH_PixelMap_SetDensity(const NativePixelMap* native, int32_t density)
147 {
148 if (native == nullptr || native->napi == nullptr) {
149 return IMAGE_RESULT_BAD_PARAMETER;
150 }
151 PixelMapNapiArgs args;
152 args.inNum0 = density;
153 return PixelMapNapiNativeCtxCall(CTX_FUNC_SET_DENSITY, native->napi, &args);
154 }
155
156 MIDK_EXPORT
OH_PixelMap_SetOpacity(const NativePixelMap * native,float opacity)157 int32_t OH_PixelMap_SetOpacity(const NativePixelMap* native, float opacity)
158 {
159 if (native == nullptr || native->napi == nullptr) {
160 return IMAGE_RESULT_BAD_PARAMETER;
161 }
162 PixelMapNapiArgs args;
163 args.inFloat0 = opacity;
164 return PixelMapNapiNativeCtxCall(CTX_FUNC_SET_OPACITY, native->napi, &args);
165 }
166
167 MIDK_EXPORT
OH_PixelMap_Scale(const NativePixelMap * native,float x,float y)168 int32_t OH_PixelMap_Scale(const NativePixelMap* native, float x, float y)
169 {
170 if (native == nullptr || native->napi == nullptr) {
171 return IMAGE_RESULT_BAD_PARAMETER;
172 }
173 PixelMapNapiArgs args;
174 args.inFloat0 = x;
175 args.inFloat1 = y;
176 args.inNum0 = OH_PixelMap_AntiAliasingLevel::OH_PixelMap_AntiAliasing_NONE;
177 return PixelMapNapiNativeCtxCall(CTX_FUNC_SCALE, native->napi, &args);
178 }
179
180 MIDK_EXPORT
OH_PixelMap_ScaleWithAntiAliasing(const NativePixelMap * native,float x,float y,OH_PixelMap_AntiAliasingLevel level)181 int32_t OH_PixelMap_ScaleWithAntiAliasing(const NativePixelMap* native, float x, float y,
182 OH_PixelMap_AntiAliasingLevel level)
183 {
184 if (native == nullptr || native->napi == nullptr) {
185 return IMAGE_RESULT_BAD_PARAMETER;
186 }
187 PixelMapNapiArgs args;
188 args.inFloat0 = x;
189 args.inFloat1 = y;
190 args.inNum0 = level;
191 return PixelMapNapiNativeCtxCall(CTX_FUNC_SCALE, native->napi, &args);
192 }
193
194 MIDK_EXPORT
OH_PixelMap_Translate(const NativePixelMap * native,float x,float y)195 int32_t OH_PixelMap_Translate(const NativePixelMap* native, float x, float y)
196 {
197 if (native == nullptr || native->napi == nullptr) {
198 return IMAGE_RESULT_BAD_PARAMETER;
199 }
200 PixelMapNapiArgs args;
201 args.inFloat0 = x;
202 args.inFloat1 = y;
203 return PixelMapNapiNativeCtxCall(CTX_FUNC_TRANSLATE, native->napi, &args);
204 }
205
206 MIDK_EXPORT
OH_PixelMap_Rotate(const NativePixelMap * native,float angle)207 int32_t OH_PixelMap_Rotate(const NativePixelMap* native, float angle)
208 {
209 if (native == nullptr || native->napi == nullptr) {
210 return IMAGE_RESULT_BAD_PARAMETER;
211 }
212 PixelMapNapiArgs args;
213 args.inFloat0 = angle;
214 return PixelMapNapiNativeCtxCall(CTX_FUNC_ROTATE, native->napi, &args);
215 }
216
217 MIDK_EXPORT
OH_PixelMap_Flip(const NativePixelMap * native,int32_t x,int32_t y)218 int32_t OH_PixelMap_Flip(const NativePixelMap* native, int32_t x, int32_t y)
219 {
220 if (native == nullptr || native->napi == nullptr) {
221 return IMAGE_RESULT_BAD_PARAMETER;
222 }
223 PixelMapNapiArgs args;
224 args.inNum0 = x;
225 args.inNum1 = y;
226 return PixelMapNapiNativeCtxCall(CTX_FUNC_FLIP, native->napi, &args);
227 }
228
229 MIDK_EXPORT
OH_PixelMap_Crop(const NativePixelMap * native,int32_t x,int32_t y,int32_t width,int32_t height)230 int32_t OH_PixelMap_Crop(const NativePixelMap* native, int32_t x, int32_t y, int32_t width, int32_t height)
231 {
232 if (native == nullptr || native->napi == nullptr) {
233 return IMAGE_RESULT_BAD_PARAMETER;
234 }
235 PixelMapNapiArgs args;
236 args.inNum0 = x;
237 args.inNum1 = y;
238 args.inNum2 = width;
239 args.inNum3 = height;
240 return PixelMapNapiNativeCtxCall(CTX_FUNC_CROP, native->napi, &args);
241 }
242
243 MIDK_EXPORT
OH_PixelMap_GetImageInfo(const NativePixelMap * native,OhosPixelMapInfos * info)244 int32_t OH_PixelMap_GetImageInfo(const NativePixelMap* native, OhosPixelMapInfos *info)
245 {
246 if (native == nullptr || native->napi == nullptr) {
247 return IMAGE_RESULT_BAD_PARAMETER;
248 }
249 PixelMapNapiArgs args;
250 args.outInfo = info;
251 return PixelMapNapiNativeCtxCall(CTX_FUNC_GET_IMAGE_INFO, native->napi, &args);
252 }
253
254 MIDK_EXPORT
OH_PixelMap_AccessPixels(const NativePixelMap * native,void ** addr)255 int32_t OH_PixelMap_AccessPixels(const NativePixelMap* native, void** addr)
256 {
257 if (native == nullptr || native->napi == nullptr) {
258 return IMAGE_RESULT_BAD_PARAMETER;
259 }
260 PixelMapNapiArgs args;
261 args.outAddr = addr;
262 return PixelMapNapiNativeCtxCall(CTX_FUNC_ACCESS_PIXELS, native->napi, &args);
263 }
264
265 MIDK_EXPORT
OH_PixelMap_UnAccessPixels(const NativePixelMap * native)266 int32_t OH_PixelMap_UnAccessPixels(const NativePixelMap* native)
267 {
268 if (native == nullptr || native->napi == nullptr) {
269 return IMAGE_RESULT_BAD_PARAMETER;
270 }
271 PixelMapNapiArgs args;
272 return PixelMapNapiNativeCtxCall(CTX_FUNC_UNACCESS_PIXELS, native->napi, &args);
273 }
274
275 #ifdef __cplusplus
276 };
277 #endif
278
279 namespace OHOS {
280 namespace Media {
OH_PixelMapNative_GetPixelMapNapi(struct NativePixelMap_ * nativePixelMap)281 PixelMapNapi *OH_PixelMapNative_GetPixelMapNapi(struct NativePixelMap_ *nativePixelMap)
282 {
283 return nativePixelMap == nullptr ? nullptr : nativePixelMap->napi;
284 }
285 }
286 }