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
18 #include "common_utils.h"
19 #include "image_pixel_map_napi_kits.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.inBuffer = buf;
54 args.bufferLen = len;
55 args.outValue = res;
56 return PixelMapNapiNativeEnvCall(ENV_FUNC_CREATE, env, &args);
57 }
58
59 MIDK_EXPORT
OH_PixelMap_CreateAlphaPixelMap(napi_env env,napi_value source,napi_value * alpha)60 int32_t OH_PixelMap_CreateAlphaPixelMap(napi_env env, napi_value source, napi_value* alpha)
61 {
62 PixelMapNapiArgs args;
63 args.inValue = source;
64 args.outValue = alpha;
65 return PixelMapNapiNativeEnvCall(ENV_FUNC_CREATE_ALPHA, env, &args);
66 }
67
68
69 MIDK_EXPORT
OH_PixelMap_GetBytesNumberPerRow(const NativePixelMap * native,int32_t * num)70 int32_t OH_PixelMap_GetBytesNumberPerRow(const NativePixelMap* native, int32_t* num)
71 {
72 if (native == nullptr || native->napi == nullptr) {
73 return IMAGE_RESULT_BAD_PARAMETER;
74 }
75 PixelMapNapiArgs args;
76 args.outNum = num;
77 return PixelMapNapiNativeCtxCall(CTX_FUNC_GET_ROW_BYTES, native->napi, &args);
78 }
79
80 MIDK_EXPORT
OH_PixelMap_GetIsEditable(const NativePixelMap * native,int32_t * editable)81 int32_t OH_PixelMap_GetIsEditable(const NativePixelMap* native, int32_t* editable)
82 {
83 if (native == nullptr || native->napi == nullptr) {
84 return IMAGE_RESULT_BAD_PARAMETER;
85 }
86 PixelMapNapiArgs args;
87 args.outNum = editable;
88 return PixelMapNapiNativeCtxCall(CTX_FUNC_IS_EDITABLE, native->napi, &args);
89 }
90
91 MIDK_EXPORT
OH_PixelMap_IsSupportAlpha(const NativePixelMap * native,int32_t * alpha)92 int32_t OH_PixelMap_IsSupportAlpha(const NativePixelMap* native, int32_t* alpha)
93 {
94 if (native == nullptr || native->napi == nullptr) {
95 return IMAGE_RESULT_BAD_PARAMETER;
96 }
97 PixelMapNapiArgs args;
98 args.outNum = alpha;
99 return PixelMapNapiNativeCtxCall(CTX_FUNC_IS_SUPPORT_ALPHA, native->napi, &args);
100 }
101
102 MIDK_EXPORT
OH_PixelMap_SetAlphaAble(const NativePixelMap * native,int32_t alpha)103 int32_t OH_PixelMap_SetAlphaAble(const NativePixelMap* native, int32_t alpha)
104 {
105 if (native == nullptr || native->napi == nullptr) {
106 return IMAGE_RESULT_BAD_PARAMETER;
107 }
108 PixelMapNapiArgs args;
109 args.inNum0 = alpha;
110 return PixelMapNapiNativeCtxCall(CTX_FUNC_SET_ALPHAABLE, native->napi, &args);
111 }
112
113 MIDK_EXPORT
OH_PixelMap_GetDensity(const NativePixelMap * native,int32_t * density)114 int32_t OH_PixelMap_GetDensity(const NativePixelMap* native, int32_t* density)
115 {
116 if (native == nullptr || native->napi == nullptr) {
117 return IMAGE_RESULT_BAD_PARAMETER;
118 }
119 PixelMapNapiArgs args;
120 args.outNum = density;
121 return PixelMapNapiNativeCtxCall(CTX_FUNC_GET_DENSITY, native->napi, &args);
122 }
123
124 MIDK_EXPORT
OH_PixelMap_SetDensity(const NativePixelMap * native,int32_t density)125 int32_t OH_PixelMap_SetDensity(const NativePixelMap* native, int32_t density)
126 {
127 if (native == nullptr || native->napi == nullptr) {
128 return IMAGE_RESULT_BAD_PARAMETER;
129 }
130 PixelMapNapiArgs args;
131 args.inNum0 = density;
132 return PixelMapNapiNativeCtxCall(CTX_FUNC_SET_DENSITY, native->napi, &args);
133 }
134
135 MIDK_EXPORT
OH_PixelMap_SetOpacity(const NativePixelMap * native,float opacity)136 int32_t OH_PixelMap_SetOpacity(const NativePixelMap* native, float opacity)
137 {
138 if (native == nullptr || native->napi == nullptr) {
139 return IMAGE_RESULT_BAD_PARAMETER;
140 }
141 PixelMapNapiArgs args;
142 args.inFloat0 = opacity;
143 return PixelMapNapiNativeCtxCall(CTX_FUNC_SET_OPACITY, native->napi, &args);
144 }
145
146 MIDK_EXPORT
OH_PixelMap_Scale(const NativePixelMap * native,float x,float y)147 int32_t OH_PixelMap_Scale(const NativePixelMap* native, float x, float y)
148 {
149 if (native == nullptr || native->napi == nullptr) {
150 return IMAGE_RESULT_BAD_PARAMETER;
151 }
152 PixelMapNapiArgs args;
153 args.inFloat0 = x;
154 args.inFloat1 = y;
155 return PixelMapNapiNativeCtxCall(CTX_FUNC_SCALE, native->napi, &args);
156 }
157
158 MIDK_EXPORT
OH_PixelMap_Translate(const NativePixelMap * native,float x,float y)159 int32_t OH_PixelMap_Translate(const NativePixelMap* native, float x, float y)
160 {
161 if (native == nullptr || native->napi == nullptr) {
162 return IMAGE_RESULT_BAD_PARAMETER;
163 }
164 PixelMapNapiArgs args;
165 args.inFloat0 = x;
166 args.inFloat1 = y;
167 return PixelMapNapiNativeCtxCall(CTX_FUNC_TRANSLATE, native->napi, &args);
168 }
169
170 MIDK_EXPORT
OH_PixelMap_Rotate(const NativePixelMap * native,float angle)171 int32_t OH_PixelMap_Rotate(const NativePixelMap* native, float angle)
172 {
173 if (native == nullptr || native->napi == nullptr) {
174 return IMAGE_RESULT_BAD_PARAMETER;
175 }
176 PixelMapNapiArgs args;
177 args.inFloat0 = angle;
178 return PixelMapNapiNativeCtxCall(CTX_FUNC_ROTATE, native->napi, &args);
179 }
180
181 MIDK_EXPORT
OH_PixelMap_Flip(const NativePixelMap * native,int32_t x,int32_t y)182 int32_t OH_PixelMap_Flip(const NativePixelMap* native, int32_t x, int32_t y)
183 {
184 if (native == nullptr || native->napi == nullptr) {
185 return IMAGE_RESULT_BAD_PARAMETER;
186 }
187 PixelMapNapiArgs args;
188 args.inNum0 = x;
189 args.inNum1 = y;
190 return PixelMapNapiNativeCtxCall(CTX_FUNC_FLIP, native->napi, &args);
191 }
192
193 MIDK_EXPORT
OH_PixelMap_Crop(const NativePixelMap * native,int32_t x,int32_t y,int32_t width,int32_t height)194 int32_t OH_PixelMap_Crop(const NativePixelMap* native, int32_t x, int32_t y, int32_t width, int32_t height)
195 {
196 if (native == nullptr || native->napi == nullptr) {
197 return IMAGE_RESULT_BAD_PARAMETER;
198 }
199 PixelMapNapiArgs args;
200 args.inNum0 = x;
201 args.inNum1 = y;
202 args.inNum2 = width;
203 args.inNum3 = height;
204 return PixelMapNapiNativeCtxCall(CTX_FUNC_CROP, native->napi, &args);
205 }
206
207 MIDK_EXPORT
OH_PixelMap_GetImageInfo(const NativePixelMap * native,OhosPixelMapInfos * info)208 int32_t OH_PixelMap_GetImageInfo(const NativePixelMap* native, OhosPixelMapInfos *info)
209 {
210 if (native == nullptr || native->napi == nullptr) {
211 return IMAGE_RESULT_BAD_PARAMETER;
212 }
213 PixelMapNapiArgs args;
214 args.outInfo = info;
215 return PixelMapNapiNativeCtxCall(CTX_FUNC_GET_IMAGE_INFO, native->napi, &args);
216 }
217
218 MIDK_EXPORT
OH_PixelMap_AccessPixels(const NativePixelMap * native,void ** addr)219 int32_t OH_PixelMap_AccessPixels(const NativePixelMap* native, void** addr)
220 {
221 if (native == nullptr || native->napi == nullptr) {
222 return IMAGE_RESULT_BAD_PARAMETER;
223 }
224 PixelMapNapiArgs args;
225 args.outAddr = addr;
226 return PixelMapNapiNativeCtxCall(CTX_FUNC_ACCESS_PIXELS, native->napi, &args);
227 }
228
229 MIDK_EXPORT
OH_PixelMap_UnAccessPixels(const NativePixelMap * native)230 int32_t OH_PixelMap_UnAccessPixels(const NativePixelMap* native)
231 {
232 if (native == nullptr || native->napi == nullptr) {
233 return IMAGE_RESULT_BAD_PARAMETER;
234 }
235 PixelMapNapiArgs args;
236 return PixelMapNapiNativeCtxCall(CTX_FUNC_UNACCESS_PIXELS, native->napi, &args);
237 }
238
239 #ifdef __cplusplus
240 };
241 #endif
242