• 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 
16 #include "napi/native_api.h"
17 #include "camera_manager_ndk.h"
18 #include "image_receiver_module_test.h"
19 #include "image_receiver_mdk_test.h"
20 #include "image_receiver_test.h"
21 #include <js_native_api.h>
22 #include "ohcamera/camera.h"
23 #include <cstring>
24 #include "hilog/log.h"
25 
26 static constexpr uint32_t NUM_0 = 0;
27 static constexpr uint32_t NUM_1 = 1;
28 static constexpr uint32_t NUM_2 = 2;
29 static constexpr uint32_t NUM_4 = 4;
30 
31 static NDKCamera* ndkCamera_ = nullptr;
32 static ImageReceiverModuleTest* imageReceiverTest_ = nullptr;
33 
34 struct Capture_Setting {
35     int32_t quality;
36     int32_t rotation;
37     int32_t location;
38     bool mirror;
39     int32_t latitude;
40     int32_t longitude;
41     int32_t altitude;
42 };
43 
InitCamera(napi_env env,napi_callback_info info)44 static napi_value InitCamera(napi_env env, napi_callback_info info)
45 {
46     size_t argc = 2;
47     napi_value args[2] = {nullptr};
48     napi_value result;
49 
50     size_t typeLen = 0;
51     char* surfaceId = nullptr;
52 
53     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
54 
55     napi_get_value_string_utf8(env, args[0], nullptr, 0, &typeLen);
56     surfaceId = new char[typeLen + 1];
57     napi_get_value_string_utf8(env, args[0], surfaceId, typeLen + 1, &typeLen);
58 
59     int32_t  cameraDeviceIndex;
60     napi_get_value_int32(env, args[1], &cameraDeviceIndex);
61 
62     ndkCamera_ = new NDKCamera(surfaceId);
63     imageReceiverTest_ = new ImageReceiverModuleTest();
64     napi_create_int32(env, CAMERA_OK, &result);
65     return result;
66 }
67 
VideoOutputStart(napi_env env,napi_callback_info info)68 static napi_value VideoOutputStart(napi_env env, napi_callback_info info)
69 {
70     napi_value result;
71 
72     Camera_ErrorCode ret = ndkCamera_->VideoOutputStart();
73     napi_create_int32(env, ret, &result);
74     return result;
75 }
76 
GetSupportedCameras(napi_env env,napi_callback_info info)77 static napi_value GetSupportedCameras(napi_env env, napi_callback_info info)
78 {
79     ndkCamera_->GetSupportedCameras();
80 
81     napi_value cameraInfo = nullptr;
82     napi_create_object(env, &cameraInfo);
83 
84     napi_value jsValue = nullptr;
85 
86     napi_create_int32(env, ndkCamera_->cameras_->cameraPosition, &jsValue);
87     napi_set_named_property(env, cameraInfo, "cameraPosition", jsValue);
88 
89     napi_create_int32(env, ndkCamera_->cameras_->cameraType, &jsValue);
90     napi_set_named_property(env, cameraInfo, "cameraType", jsValue);
91 
92     napi_create_int32(env, ndkCamera_->cameras_->connectionType, &jsValue);
93     napi_set_named_property(env, cameraInfo, "connectionType", jsValue);
94 
95     napi_create_string_utf8(env, ndkCamera_->cameras_->cameraId, sizeof(ndkCamera_->cameras_->cameraId) + 1, &jsValue);
96     napi_set_named_property(env, cameraInfo, "cameraId", jsValue);
97 
98     return cameraInfo;
99 }
100 
101 
CreateCameraInput(napi_env env,napi_callback_info info)102 static napi_value CreateCameraInput(napi_env env, napi_callback_info info)
103 {
104     napi_value result;
105     Camera_ErrorCode ret = ndkCamera_->CreateCameraInput();
106     napi_create_int32(env, ret, &result);
107     return result;
108 }
109 
GetPosition(int position)110 static Camera_Position GetPosition(int position)
111 {
112     switch (position) {
113         case 1:
114             return Camera_Position::CAMERA_POSITION_BACK;
115         case 2: // 2:Camera_Position::CAMERA_POSITION_FRONT
116             return Camera_Position::CAMERA_POSITION_FRONT;
117         default:
118             return Camera_Position::CAMERA_POSITION_UNSPECIFIED;
119     }
120 }
121 
GetType(int type)122 static Camera_Type GetType(int type)
123 {
124     switch (type) {
125         case 1:
126             return Camera_Type::CAMERA_TYPE_WIDE_ANGLE;
127         case 2: // 2:Camera_Type::CAMERA_TYPE_ULTRA_WIDE
128             return Camera_Type::CAMERA_TYPE_ULTRA_WIDE;
129         case 3: // 3:Camera_Type::CAMERA_TYPE_TELEPHOTO
130             return Camera_Type::CAMERA_TYPE_TELEPHOTO;
131         case 4: // 4:Camera_Type::CAMERA_TYPE_TRUE_DEPTH
132             return Camera_Type::CAMERA_TYPE_TRUE_DEPTH;
133         default:
134             return Camera_Type::CAMERA_TYPE_DEFAULT;
135     }
136 }
137 
CreateCameraInputWithPositionAndType(napi_env env,napi_callback_info info)138 static napi_value CreateCameraInputWithPositionAndType(napi_env env, napi_callback_info info)
139 {
140     size_t argc = 2;
141     napi_value args[2] = {nullptr};
142     napi_value result;
143 
144     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
145 
146     napi_valuetype valuetype0;
147     napi_typeof(env, args[0], &valuetype0);
148     int x;
149     napi_get_value_int32(env, args[0], &x);
150 
151     napi_valuetype valuetype1;
152     napi_typeof(env, args[0], &valuetype1);
153     int y;
154     napi_get_value_int32(env, args[1], &y);
155 
156     Camera_Position position = GetPosition(x);
157     Camera_Type type = GetType(y);
158     Camera_ErrorCode ret = ndkCamera_->CreateCameraInputWithPositionAndType(position, type);
159     napi_create_int32(env, ret, &result);
160     return result;
161 }
162 
GetSupportedOutputCapability(napi_env env,napi_callback_info info)163 static napi_value GetSupportedOutputCapability(napi_env env, napi_callback_info info)
164 {
165     ndkCamera_->GetSupportedOutputCapability();
166 
167     napi_value cameraOutputCapability = nullptr;
168     napi_create_object(env, &cameraOutputCapability);
169 
170     napi_value jsValue = nullptr;
171 
172     napi_create_int32(env, ndkCamera_->cameraOutputCapability_->previewProfilesSize, &jsValue);
173     napi_set_named_property(env, cameraOutputCapability, "previewProfilesSize", jsValue);
174 
175     napi_create_int32(env, ndkCamera_->cameraOutputCapability_->photoProfilesSize, &jsValue);
176     napi_set_named_property(env, cameraOutputCapability, "photoProfilesSize", jsValue);
177 
178     napi_create_int32(env, ndkCamera_->cameraOutputCapability_->videoProfilesSize, &jsValue);
179     napi_set_named_property(env, cameraOutputCapability, "videoProfilesSize", jsValue);
180 
181     napi_create_int32(env, ndkCamera_->cameraOutputCapability_->metadataProfilesSize, &jsValue);
182     napi_set_named_property(env, cameraOutputCapability, "metadataProfilesSize", jsValue);
183 
184     return cameraOutputCapability;
185 }
186 
CreatePreviewOutput(napi_env env,napi_callback_info info)187 static napi_value CreatePreviewOutput(napi_env env, napi_callback_info info)
188 {
189     napi_value result;
190 
191     Camera_ErrorCode ret = ndkCamera_->CreatePreviewOutput();
192     napi_create_int32(env, ret, &result);
193     return result;
194 }
195 
OnBufferAvaliable(OH_ImageReceiverNative *)196 static void OnBufferAvaliable(OH_ImageReceiverNative*)
197 {
198     OH_ImageNative *image = nullptr;
199     imageReceiverTest_->GetImageReceiverLatestImage(&image);
200     if (image != nullptr) {
201         imageReceiverTest_->DumpImageInfo(image);
202         imageReceiverTest_->ReleaseImage(image);
203     }
204     return;
205 }
206 
CreatePhotoOutput(napi_env env,napi_callback_info info)207 static napi_value CreatePhotoOutput(napi_env env, napi_callback_info info)
208 {
209     napi_value result;
210 
211     size_t argc = 4;
212     napi_value args[NUM_4] = {nullptr};
213 
214     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
215 
216     int32_t width = 0;
217     int32_t height = 0;
218     int32_t capacity = 0;
219     napi_get_value_int32(env, args[NUM_0], &width);
220     napi_get_value_int32(env, args[NUM_1], &height);
221     napi_get_value_int32(env, args[NUM_2], &capacity);
222 
223     Image_ErrorCode res = imageReceiverTest_->CreateImageReceiver(width, height, capacity);
224     if (res != IMAGE_SUCCESS) {
225         napi_create_int32(env, res, &result);
226         return result;
227     }
228     res = imageReceiverTest_->RegisterImageReceiverListener(OnBufferAvaliable);
229     if (res != IMAGE_SUCCESS) {
230         napi_create_int32(env, res, &result);
231         return result;
232     }
233     res = imageReceiverTest_->VerifyImageReceiver();
234     if (res != IMAGE_SUCCESS) {
235         napi_create_int32(env, res, &result);
236         return result;
237     }
238     uint64_t id = 0;
239     res = imageReceiverTest_->GetImageReceiverSurfaceId(&id);
240     if (res != IMAGE_SUCCESS) {
241         napi_create_int32(env, res, &result);
242         return result;
243     }
244     std::string surfaceId = std::to_string(id);
245 
246     Camera_ErrorCode ret = ndkCamera_->CreatePhotoOutput(surfaceId.c_str());
247     napi_create_int32(env, ret, &result);
248     return result;
249 }
CreateVideoOutput(napi_env env,napi_callback_info info)250 static napi_value CreateVideoOutput(napi_env env, napi_callback_info info)
251 {
252     size_t argc = 2;
253     napi_value args[2] = {nullptr};
254     napi_value result;
255 
256     size_t videoIdLen = 0;
257     char* videoId = nullptr;
258     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
259     napi_get_value_string_utf8(env, args[0], nullptr, 0, &videoIdLen);
260     videoId = new char[videoIdLen + 1];
261     napi_get_value_string_utf8(env, args[0], videoId, videoIdLen + 1, &videoIdLen);
262     Camera_ErrorCode ret = ndkCamera_->CreateVideoOutput(videoId);
263     napi_create_int32(env, ret, &result);
264     return result;
265 }
266 
CreateMetadataOutput(napi_env env,napi_callback_info info)267 static napi_value CreateMetadataOutput(napi_env env, napi_callback_info info)
268 {
269     napi_value result;
270 
271     Camera_ErrorCode ret = ndkCamera_->CreateMetadataOutput();
272     napi_create_int32(env, ret, &result);
273     return result;
274 }
275 
IsCameraMuted(napi_env env,napi_callback_info info)276 static napi_value IsCameraMuted(napi_env env, napi_callback_info info)
277 {
278     napi_value result;
279 
280     Camera_ErrorCode ret = ndkCamera_->IsCameraMuted();
281     napi_create_int32(env, ret, &result);
282     return result;
283 }
284 
CameraInputOpen(napi_env env,napi_callback_info info)285 static napi_value CameraInputOpen(napi_env env, napi_callback_info info)
286 {
287     napi_value result;
288 
289     Camera_ErrorCode ret = ndkCamera_->CameraInputOpen();
290     napi_create_int32(env, ret, &result);
291     return result;
292 }
293 
CameraInputClose(napi_env env,napi_callback_info info)294 static napi_value CameraInputClose(napi_env env, napi_callback_info info)
295 {
296     napi_value result;
297 
298     Camera_ErrorCode ret = ndkCamera_->CameraInputClose();
299     napi_create_int32(env, ret, &result);
300     return result;
301 }
302 
CameraInputRelease(napi_env env,napi_callback_info info)303 static napi_value CameraInputRelease(napi_env env, napi_callback_info info)
304 {
305     napi_value result;
306 
307     Camera_ErrorCode ret = ndkCamera_->CameraInputRelease();
308     napi_create_int32(env, ret, &result);
309     return result;
310 }
311 
PreviewOutputStart(napi_env env,napi_callback_info info)312 static napi_value PreviewOutputStart(napi_env env, napi_callback_info info)
313 {
314     napi_value result;
315 
316     Camera_ErrorCode ret = ndkCamera_->PreviewOutputStart();
317     napi_create_int32(env, ret, &result);
318     return result;
319 }
320 
PreviewOutputStop(napi_env env,napi_callback_info info)321 static napi_value PreviewOutputStop(napi_env env, napi_callback_info info)
322 {
323     napi_value result;
324 
325     Camera_ErrorCode ret = ndkCamera_->PreviewOutputStop();
326     napi_create_int32(env, ret, &result);
327     return result;
328 }
329 
PreviewOutputRelease(napi_env env,napi_callback_info info)330 static napi_value PreviewOutputRelease(napi_env env, napi_callback_info info)
331 {
332     napi_value result;
333 
334     Camera_ErrorCode ret = ndkCamera_->PreviewOutputRelease();
335     napi_create_int32(env, ret, &result);
336     return result;
337 }
338 
PhotoOutputCapture(napi_env env,napi_callback_info info)339 static napi_value PhotoOutputCapture(napi_env env, napi_callback_info info)
340 {
341     napi_value result;
342 
343     Camera_ErrorCode ret = ndkCamera_->PhotoOutputCapture();
344     napi_create_int32(env, ret, &result);
345     return result;
346 }
347 
PhotoOutputRelease(napi_env env,napi_callback_info info)348 static napi_value PhotoOutputRelease(napi_env env, napi_callback_info info)
349 {
350     napi_value result;
351 
352     Camera_ErrorCode ret = ndkCamera_->PhotoOutputRelease();
353     napi_create_int32(env, ret, &result);
354     return result;
355 }
356 
IsMirrorSupported(napi_env env,napi_callback_info info)357 static napi_value IsMirrorSupported(napi_env env, napi_callback_info info)
358 {
359     napi_value result;
360 
361     ndkCamera_->IsMirrorSupported();
362     napi_get_boolean(env, ndkCamera_->IsMirror_, &result);
363     return result;
364 }
365 
VideoOutputStop(napi_env env,napi_callback_info info)366 static napi_value VideoOutputStop(napi_env env, napi_callback_info info)
367 {
368     napi_value result;
369 
370     Camera_ErrorCode ret = ndkCamera_->VideoOutputStop();
371     napi_create_int32(env, ret, &result);
372     return result;
373 }
374 
VideoOutputRelease(napi_env env,napi_callback_info info)375 static napi_value VideoOutputRelease(napi_env env, napi_callback_info info)
376 {
377     napi_value result;
378 
379     Camera_ErrorCode ret = ndkCamera_->VideoOutputRelease();
380     napi_create_int32(env, ret, &result);
381     return result;
382 }
383 
MetadataOutputStart(napi_env env,napi_callback_info info)384 static napi_value MetadataOutputStart(napi_env env, napi_callback_info info)
385 {
386     napi_value result;
387 
388     Camera_ErrorCode ret = ndkCamera_->MetadataOutputStart();
389     napi_create_int32(env, ret, &result);
390     return result;
391 }
392 
MetadataOutputStop(napi_env env,napi_callback_info info)393 static napi_value MetadataOutputStop(napi_env env, napi_callback_info info)
394 {
395     napi_value result;
396 
397     Camera_ErrorCode ret = ndkCamera_->MetadataOutputStop();
398     napi_create_int32(env, ret, &result);
399     return result;
400 }
401 
MetadataOutputRelease(napi_env env,napi_callback_info info)402 static napi_value MetadataOutputRelease(napi_env env, napi_callback_info info)
403 {
404     napi_value result;
405 
406     Camera_ErrorCode ret = ndkCamera_->MetadataOutputRelease();
407     napi_create_int32(env, ret, &result);
408     return result;
409 }
410 
SessionAddInput(napi_env env,napi_callback_info info)411 static napi_value SessionAddInput(napi_env env, napi_callback_info info)
412 {
413     napi_value result;
414 
415     Camera_ErrorCode ret = ndkCamera_->SessionAddInput();
416     napi_create_int32(env, ret, &result);
417     return result;
418 }
419 
SessionRemoveInput(napi_env env,napi_callback_info info)420 static napi_value SessionRemoveInput(napi_env env, napi_callback_info info)
421 {
422     napi_value result;
423 
424     Camera_ErrorCode ret = ndkCamera_->SessionRemoveInput();
425     napi_create_int32(env, ret, &result);
426     return result;
427 }
428 
SessionAddPreviewOutput(napi_env env,napi_callback_info info)429 static napi_value SessionAddPreviewOutput(napi_env env, napi_callback_info info)
430 {
431     napi_value result;
432 
433     Camera_ErrorCode ret = ndkCamera_->SessionAddPreviewOutput();
434     napi_create_int32(env, ret, &result);
435     return result;
436 }
437 
SessionAddPhotoOutput(napi_env env,napi_callback_info info)438 static napi_value SessionAddPhotoOutput(napi_env env, napi_callback_info info)
439 {
440     napi_value result;
441 
442     Camera_ErrorCode ret = ndkCamera_->SessionAddPhotoOutput();
443     napi_create_int32(env, ret, &result);
444     return result;
445 }
446 
SessionAddVideoOutput(napi_env env,napi_callback_info info)447 static napi_value SessionAddVideoOutput(napi_env env, napi_callback_info info)
448 {
449     napi_value result;
450 
451     Camera_ErrorCode ret = ndkCamera_->SessionAddVideoOutput();
452     napi_create_int32(env, ret, &result);
453     return result;
454 }
455 
SessionAddMetadataOutput(napi_env env,napi_callback_info info)456 static napi_value SessionAddMetadataOutput(napi_env env, napi_callback_info info)
457 {
458     napi_value result;
459 
460     Camera_ErrorCode ret = ndkCamera_->SessionAddMetadataOutput();
461     napi_create_int32(env, ret, &result);
462     return result;
463 }
464 
SessionRemovePreviewOutput(napi_env env,napi_callback_info info)465 static napi_value SessionRemovePreviewOutput(napi_env env, napi_callback_info info)
466 {
467     napi_value result;
468 
469     Camera_ErrorCode ret = ndkCamera_->SessionRemovePreviewOutput();
470     napi_create_int32(env, ret, &result);
471     return result;
472 }
473 
SessionRemovePhotoOutput(napi_env env,napi_callback_info info)474 static napi_value SessionRemovePhotoOutput(napi_env env, napi_callback_info info)
475 {
476     napi_value result;
477 
478     Camera_ErrorCode ret = ndkCamera_->SessionRemovePhotoOutput();
479     napi_create_int32(env, ret, &result);
480     return result;
481 }
482 
SessionRemoveVideoOutput(napi_env env,napi_callback_info info)483 static napi_value SessionRemoveVideoOutput(napi_env env, napi_callback_info info)
484 {
485     napi_value result;
486 
487     Camera_ErrorCode ret = ndkCamera_->SessionRemoveVideoOutput();
488     napi_create_int32(env, ret, &result);
489     return result;
490 }
491 
SessionRemoveMetadataOutput(napi_env env,napi_callback_info info)492 static napi_value SessionRemoveMetadataOutput(napi_env env, napi_callback_info info)
493 {
494     napi_value result;
495 
496     Camera_ErrorCode ret = ndkCamera_->SessionRemoveMetadataOutput();
497     napi_create_int32(env, ret, &result);
498     return result;
499 }
500 
SessionStart(napi_env env,napi_callback_info info)501 static napi_value SessionStart(napi_env env, napi_callback_info info)
502 {
503     napi_value result;
504 
505     Camera_ErrorCode ret = ndkCamera_->SessionStart();
506     napi_create_int32(env, ret, &result);
507     return result;
508 }
509 
SessionStop(napi_env env,napi_callback_info info)510 static napi_value SessionStop(napi_env env, napi_callback_info info)
511 {
512     napi_value result;
513 
514     Camera_ErrorCode ret = ndkCamera_->SessionStop();
515     napi_create_int32(env, ret, &result);
516     return result;
517 }
518 
SessionBegin(napi_env env,napi_callback_info info)519 static napi_value SessionBegin(napi_env env, napi_callback_info info)
520 {
521     napi_value result;
522 
523     Camera_ErrorCode ret = ndkCamera_->SessionBegin();
524     napi_create_int32(env, ret, &result);
525     return result;
526 }
527 
SessionCommitConfig(napi_env env,napi_callback_info info)528 static napi_value SessionCommitConfig(napi_env env, napi_callback_info info)
529 {
530     napi_value result;
531 
532     Camera_ErrorCode ret = ndkCamera_->SessionCommitConfig();
533     napi_create_int32(env, ret, &result);
534     return result;
535 }
536 
SessionRelease(napi_env env,napi_callback_info info)537 static napi_value SessionRelease(napi_env env, napi_callback_info info)
538 {
539     napi_value result;
540 
541     Camera_ErrorCode ret = ndkCamera_->SessionRelease();
542     napi_create_int32(env, ret, &result);
543     return result;
544 }
545 
CreateSession(napi_env env,napi_callback_info info)546 static napi_value CreateSession(napi_env env, napi_callback_info info)
547 {
548     napi_value result;
549 
550     Camera_ErrorCode ret = ndkCamera_->CreateSession();
551     napi_create_int32(env, ret, &result);
552     return result;
553 }
554 
SessionHasFlash(napi_env env,napi_callback_info info)555 static napi_value SessionHasFlash(napi_env env, napi_callback_info info)
556 {
557     napi_value result;
558 
559     ndkCamera_->SessionHasFlash();
560     napi_get_boolean(env, ndkCamera_->HasFlash_, &result);
561     return result;
562 }
563 
SessionIsFlashModeSupported(napi_env env,napi_callback_info info)564 static napi_value SessionIsFlashModeSupported(napi_env env, napi_callback_info info)
565 {
566     size_t argc = 2;
567     napi_value args[2] = {nullptr};
568     napi_value result;
569 
570     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
571 
572     int32_t flashMode;
573     napi_get_value_int32(env, args[0], &flashMode);
574 
575     ndkCamera_->SessionIsFlashModeSupported(flashMode);
576     napi_get_boolean(env, ndkCamera_->IsFlashMode_, &result);
577     return result;
578 }
579 
SessionGetFlashMode(napi_env env,napi_callback_info info)580 static napi_value SessionGetFlashMode(napi_env env, napi_callback_info info)
581 {
582     napi_value result;
583 
584     ndkCamera_->SessionGetFlashMode();
585     Camera_FlashMode flashMode = ndkCamera_->flashMode_;
586     napi_create_int32(env, flashMode, &result);
587     return result;
588 }
589 
SessionSetFlashMode(napi_env env,napi_callback_info info)590 static napi_value SessionSetFlashMode(napi_env env, napi_callback_info info)
591 {
592     size_t argc = 2;
593     napi_value args[2] = {nullptr};
594     napi_value result;
595 
596     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
597 
598     int32_t flashMode;
599     napi_get_value_int32(env, args[0], &flashMode);
600     Camera_ErrorCode ret = ndkCamera_->SessionSetFlashMode(flashMode);
601     napi_create_int32(env, ret, &result);
602     return result;
603 }
604 
SessionIsExposureModeSupported(napi_env env,napi_callback_info info)605 static napi_value SessionIsExposureModeSupported(napi_env env, napi_callback_info info)
606 {
607     size_t argc = 2;
608     napi_value args[2] = {nullptr};
609     napi_value result;
610 
611     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
612 
613     int32_t exposureMode;
614     napi_get_value_int32(env, args[0], &exposureMode);
615 
616     ndkCamera_->SessionIsExposureModeSupported(exposureMode);
617     napi_get_boolean(env, ndkCamera_->IsExposureMode_, &result);
618     return result;
619 }
620 
SessionGetExposureMode(napi_env env,napi_callback_info info)621 static napi_value SessionGetExposureMode(napi_env env, napi_callback_info info)
622 {
623     napi_value result;
624 
625     ndkCamera_->SessionGetExposureMode();
626     Camera_ExposureMode exposureMode = ndkCamera_->exposureMode_;
627     napi_create_int32(env, exposureMode, &result);
628     return result;
629 }
630 
SessionSetExposureMode(napi_env env,napi_callback_info info)631 static napi_value SessionSetExposureMode(napi_env env, napi_callback_info info)
632 {
633     size_t argc = 2;
634     napi_value args[2] = {nullptr};
635     napi_value result;
636     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
637     int32_t exposureMode;
638     napi_get_value_int32(env, args[0], &exposureMode);
639     Camera_ErrorCode ret = ndkCamera_->SessionSetExposureMode(exposureMode);
640     napi_create_int32(env, ret, &result);
641     return result;
642 }
643 
SessionGetMeteringPoint(napi_env env,napi_callback_info info)644 static napi_value SessionGetMeteringPoint(napi_env env, napi_callback_info info)
645 {
646     ndkCamera_->SessionGetMeteringPoint();
647     Camera_Point point = ndkCamera_->point_;
648     napi_value Point = nullptr;
649     napi_create_object(env, &Point);
650 
651     napi_value jsValue = nullptr;
652     napi_create_double(env, point.x, &jsValue);
653     napi_set_named_property(env, Point, "x", jsValue);
654 
655     napi_create_double(env, point.y, &jsValue);
656     napi_set_named_property(env, Point, "y", jsValue);
657 
658     return Point;
659 }
660 
SessionSetMeteringPoint(napi_env env,napi_callback_info info)661 static napi_value SessionSetMeteringPoint(napi_env env, napi_callback_info info)
662 {
663     size_t argc = 2;
664     napi_value args[2] = {nullptr};
665     napi_value result;
666 
667     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
668 
669     napi_value value = nullptr;
670     napi_get_named_property(env, args[0], "x", &value);
671     double x;
672     napi_get_value_double(env, value, &x);
673 
674     napi_get_named_property(env, args[0], "y", &value);
675     double y;
676     napi_get_value_double(env, value, &y);
677 
678     Camera_ErrorCode ret = ndkCamera_->SessionSetMeteringPoint(x, y);
679     napi_create_int32(env, ret, &result);
680     return result;
681 }
682 
SessionGetExposureBiasRange(napi_env env,napi_callback_info info)683 static napi_value SessionGetExposureBiasRange(napi_env env, napi_callback_info info)
684 {
685     ndkCamera_->SessionGetExposureBiasRange();
686     napi_value exposureBias = nullptr;
687     napi_create_object(env, &exposureBias);
688 
689     napi_value jsValue = nullptr;
690 
691     napi_create_double(env, ndkCamera_->minExposureBias_, &jsValue);
692     napi_set_named_property(env, exposureBias, "minExposureBias", jsValue);
693 
694     napi_create_double(env, ndkCamera_->maxExposureBias_, &jsValue);
695     napi_set_named_property(env, exposureBias, "maxExposureBias", jsValue);
696 
697     return exposureBias;
698 }
699 
SessionSetExposureBias(napi_env env,napi_callback_info info)700 static napi_value SessionSetExposureBias(napi_env env, napi_callback_info info)
701 {
702     size_t argc = 2;
703     napi_value args[2] = {nullptr};
704     napi_value result;
705 
706     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
707 
708     double exposureBias;
709     napi_get_value_double(env, args[0], &exposureBias);
710     Camera_ErrorCode ret = ndkCamera_->SessionSetExposureBias(exposureBias);
711     napi_create_int32(env, ret, &result);
712     return result;
713 }
714 
SessionGetExposureBias(napi_env env,napi_callback_info info)715 static napi_value SessionGetExposureBias(napi_env env, napi_callback_info info)
716 {
717     napi_value result;
718 
719     ndkCamera_->SessionGetExposureBias();
720     double exposureBias = ndkCamera_->exposureBias_;
721     napi_create_double(env, exposureBias, &result);
722     return result;
723 }
724 
SessionIsFocusModeSupported(napi_env env,napi_callback_info info)725 static napi_value SessionIsFocusModeSupported(napi_env env, napi_callback_info info)
726 {
727     size_t argc = 2;
728     napi_value args[2] = {nullptr};
729     napi_value result;
730 
731     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
732 
733     int32_t focusMode;
734     napi_get_value_int32(env, args[0], &focusMode);
735 
736     ndkCamera_->SessionIsFocusModeSupported(focusMode);
737     napi_get_boolean(env, ndkCamera_->isFocusSupported_, &result);
738     return result;
739 }
740 
SessionGetFocusMode(napi_env env,napi_callback_info info)741 static napi_value SessionGetFocusMode(napi_env env, napi_callback_info info)
742 {
743     napi_value result;
744 
745     ndkCamera_->SessionGetFocusMode();
746     Camera_FocusMode focusMode = ndkCamera_->focusMode_;
747     napi_create_int32(env, focusMode, &result);
748     return result;
749 }
750 
SessionSetFocusMode(napi_env env,napi_callback_info info)751 static napi_value SessionSetFocusMode(napi_env env, napi_callback_info info)
752 {
753     size_t argc = 2;
754     napi_value args[2] = {nullptr};
755     napi_value result;
756 
757     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
758 
759     int32_t focusMode;
760     napi_get_value_int32(env, args[0], &focusMode);
761     Camera_ErrorCode ret = ndkCamera_->SessionSetFocusMode(focusMode);
762     napi_create_int32(env, ret, &result);
763     return result;
764 }
765 
SessionSetFocusPoint(napi_env env,napi_callback_info info)766 static napi_value SessionSetFocusPoint(napi_env env, napi_callback_info info)
767 {
768     size_t argc = 2;
769     napi_value args[2] = {nullptr};
770     napi_value result;
771 
772     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
773 
774     napi_value value = nullptr;
775     napi_get_named_property(env, args[0], "x", &value);
776     double x;
777     napi_get_value_double(env, value, &x);
778 
779     napi_get_named_property(env, args[0], "y", &value);
780     double y;
781     napi_get_value_double(env, value, &y);
782 
783     Camera_ErrorCode ret = ndkCamera_->SessionSetFocusPoint(x, y);
784     napi_create_int32(env, ret, &result);
785     return result;
786 }
787 
SessionGetFocusPoint(napi_env env,napi_callback_info info)788 static napi_value SessionGetFocusPoint(napi_env env, napi_callback_info info)
789 {
790     ndkCamera_->SessionGetFocusPoint();
791     Camera_Point point = ndkCamera_->focusPoint_;
792     napi_value Point = nullptr;
793     napi_create_object(env, &Point);
794 
795     napi_value jsValue = nullptr;
796     napi_create_double(env, point.x, &jsValue);
797     napi_set_named_property(env, Point, "x", jsValue);
798 
799     napi_create_double(env, point.y, &jsValue);
800     napi_set_named_property(env, Point, "y", jsValue);
801 
802     return Point;
803 }
804 
SessionGetZoomRatioRange(napi_env env,napi_callback_info info)805 static napi_value SessionGetZoomRatioRange(napi_env env, napi_callback_info info)
806 {
807     ndkCamera_->SessionGetZoomRatioRange();
808 
809     napi_value zoomRatio = nullptr;
810     napi_create_object(env, &zoomRatio);
811 
812     napi_value jsValue = nullptr;
813 
814     napi_create_double(env, ndkCamera_->minZoom_, &jsValue);
815     napi_set_named_property(env, zoomRatio, "minZoom", jsValue);
816 
817     napi_create_double(env, ndkCamera_->maxZoom_, &jsValue);
818     napi_set_named_property(env, zoomRatio, "maxZoom", jsValue);
819 
820     return zoomRatio;
821 }
822 
SessionGetZoomRatio(napi_env env,napi_callback_info info)823 static napi_value SessionGetZoomRatio(napi_env env, napi_callback_info info)
824 {
825     napi_value result;
826 
827     ndkCamera_->SessionGetZoomRatio();
828     napi_create_double(env, ndkCamera_->zoom_, &result);
829     return result;
830 }
831 
SessionSetZoomRatio(napi_env env,napi_callback_info info)832 static napi_value SessionSetZoomRatio(napi_env env, napi_callback_info info)
833 {
834     size_t argc = 2;
835     napi_value args[2] = {nullptr};
836     napi_value result;
837 
838     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
839 
840     double zoomRatio;
841     napi_get_value_double(env, args[0], &zoomRatio);
842     Camera_ErrorCode ret = ndkCamera_->SessionSetZoomRatio(zoomRatio);
843     napi_create_int32(env, ret, &result);
844     return result;
845 }
846 
SessionIsVideoStabilizationModeSupported(napi_env env,napi_callback_info info)847 static napi_value SessionIsVideoStabilizationModeSupported(napi_env env, napi_callback_info info)
848 {
849     size_t argc = 2;
850     napi_value args[2] = {nullptr};
851     napi_value result;
852 
853     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
854     int32_t videoStabilizationMode;
855     napi_get_value_int32(env, args[0], &videoStabilizationMode);
856     ndkCamera_->SessionIsVideoStabilizationModeSupported(videoStabilizationMode);
857     napi_get_boolean(env, ndkCamera_->isVideoSupported_, &result);
858     return result;
859 }
860 
SessionGetVideoStabilizationMode(napi_env env,napi_callback_info info)861 static napi_value SessionGetVideoStabilizationMode(napi_env env, napi_callback_info info)
862 {
863     napi_value result;
864 
865     ndkCamera_->SessionGetVideoStabilizationMode();
866     Camera_VideoStabilizationMode videoMode = ndkCamera_->videoMode_;
867     napi_create_int32(env, videoMode, &result);
868     return result;
869 }
870 
SessionSetVideoStabilizationMode(napi_env env,napi_callback_info info)871 static napi_value SessionSetVideoStabilizationMode(napi_env env, napi_callback_info info)
872 {
873     size_t argc = 2;
874     napi_value args[2] = {nullptr};
875     napi_value result;
876 
877     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
878 
879     int32_t videoStabilizationMode;
880     napi_get_value_int32(env, args[0], &videoStabilizationMode);
881     Camera_ErrorCode ret = ndkCamera_->SessionSetVideoStabilizationMode(videoStabilizationMode);
882     napi_create_int32(env, ret, &result);
883     return result;
884 }
885 
GetCameraCallbackCode(napi_env env,napi_callback_info info)886 static napi_value GetCameraCallbackCode(napi_env env, napi_callback_info info)
887 {
888     napi_value result;
889 
890     CameraCallbackCode status  = ndkCamera_->cameraCallbackCode_;
891     napi_create_int32(env, status, &result);
892     return result;
893 }
894 
GetCaptureParam(napi_env env,napi_value captureConfigValue,Capture_Setting * config)895 static napi_value GetCaptureParam(napi_env env, napi_value captureConfigValue, Capture_Setting *config)
896 {
897     napi_value value = nullptr;
898     napi_get_named_property(env, captureConfigValue, "quality", &value);
899     napi_get_value_int32(env, value, &config->quality);
900 
901     napi_get_named_property(env, captureConfigValue, "rotation", &value);
902     napi_get_value_int32(env, value, &config->rotation);
903 
904     napi_get_named_property(env, captureConfigValue, "mirror", &value);
905     napi_get_value_bool(env, value, &config->mirror);
906 
907     napi_get_named_property(env, captureConfigValue, "latitude", &value);
908     napi_get_value_int32(env, value, &config->latitude);
909 
910     napi_get_named_property(env, captureConfigValue, "longitude", &value);
911     napi_get_value_int32(env, value, &config->longitude);
912 
913     napi_get_named_property(env, captureConfigValue, "altitude", &value);
914     napi_get_value_int32(env, value, &config->altitude);
915 
916     return 0;
917 }
918 
SetConfig(Capture_Setting settings,Camera_PhotoCaptureSetting * photoSetting,Camera_Location * location)919 static void SetConfig(Capture_Setting settings, Camera_PhotoCaptureSetting* photoSetting, Camera_Location* location)
920 {
921     if (photoSetting == nullptr || location == nullptr) {
922         return;
923     }
924     photoSetting->quality = static_cast<Camera_QualityLevel>(settings.quality);
925     photoSetting->rotation = static_cast<Camera_ImageRotation>(settings.rotation);
926     photoSetting->mirror = settings.mirror;
927     location->altitude = settings.altitude;
928     location->latitude = settings.latitude;
929     location->longitude = settings.longitude;
930     photoSetting->location = location;
931 }
932 
TakePictureWithSettings(napi_env env,napi_callback_info info)933 static napi_value TakePictureWithSettings(napi_env env, napi_callback_info info)
934 {
935     size_t argc = 1;
936     napi_value args[1] = {nullptr};
937     Camera_PhotoCaptureSetting photoSetting;
938     Capture_Setting setting_inner;
939     Camera_Location* location = new Camera_Location;
940 
941     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
942     GetCaptureParam(env, args[0], &setting_inner);
943     SetConfig(setting_inner, &photoSetting, location);
944 
945     napi_value result;
946     Camera_ErrorCode ret = ndkCamera_->TakePictureWithPhotoSettings(photoSetting);
947     napi_create_int32(env, ret, &result);
948     return result;
949 }
950 
951 EXTERN_C_START
Init(napi_env env,napi_value exports)952 static napi_value Init(napi_env env, napi_value exports)
953 {
954     napi_property_descriptor desc[] = {
955         { "initCamera", nullptr, InitCamera, nullptr, nullptr, nullptr, napi_default, nullptr },
956         { "getSupportedCameras", nullptr, GetSupportedCameras, nullptr, nullptr, nullptr, napi_default, nullptr },
957         { "createCameraInput", nullptr, CreateCameraInput, nullptr, nullptr, nullptr, napi_default, nullptr },
958         { "createCameraInputWithPositionAndType", nullptr, CreateCameraInputWithPositionAndType, nullptr, nullptr,
959             nullptr, napi_default, nullptr },
960         { "getSupportedOutputCapability", nullptr, GetSupportedOutputCapability, nullptr, nullptr, nullptr,
961             napi_default, nullptr },
962         { "createPreviewOutput", nullptr, CreatePreviewOutput, nullptr, nullptr, nullptr, napi_default, nullptr },
963         { "createPhotoOutput", nullptr, CreatePhotoOutput, nullptr, nullptr, nullptr, napi_default, nullptr },
964         { "createVideoOutput", nullptr, CreateVideoOutput, nullptr, nullptr, nullptr, napi_default, nullptr },
965         { "createMetadataOutput", nullptr, CreateMetadataOutput, nullptr, nullptr, nullptr, napi_default, nullptr },
966         { "createSession", nullptr, CreateSession, nullptr, nullptr, nullptr, napi_default, nullptr },
967         { "isCameraMuted", nullptr, IsCameraMuted, nullptr, nullptr, nullptr, napi_default, nullptr },
968         { "cameraInputOpen", nullptr, CameraInputOpen, nullptr, nullptr, nullptr, napi_default, nullptr },
969         { "cameraInputClose", nullptr, CameraInputClose, nullptr, nullptr, nullptr, napi_default, nullptr },
970         { "cameraInputRelease", nullptr, CameraInputRelease, nullptr, nullptr, nullptr, napi_default, nullptr },
971         { "previewOutputStart", nullptr, PreviewOutputStart, nullptr, nullptr, nullptr, napi_default, nullptr },
972         { "previewOutputStop", nullptr, PreviewOutputStop, nullptr, nullptr, nullptr, napi_default, nullptr },
973         { "previewOutputRelease", nullptr, PreviewOutputRelease, nullptr, nullptr, nullptr, napi_default, nullptr },
974         { "photoOutputCapture", nullptr, PhotoOutputCapture, nullptr, nullptr, nullptr, napi_default, nullptr },
975         { "photoOutputRelease", nullptr, PhotoOutputRelease, nullptr, nullptr, nullptr, napi_default, nullptr },
976         { "isMirrorSupported", nullptr, IsMirrorSupported, nullptr, nullptr, nullptr, napi_default, nullptr },
977         { "videoOutputStart", nullptr, VideoOutputStart, nullptr, nullptr, nullptr, napi_default, nullptr },
978         { "videoOutputStop", nullptr, VideoOutputStop, nullptr, nullptr, nullptr, napi_default, nullptr },
979         { "videoOutputRelease", nullptr, VideoOutputRelease, nullptr, nullptr, nullptr, napi_default, nullptr },
980         { "metadataOutputStart", nullptr, MetadataOutputStart, nullptr, nullptr, nullptr, napi_default, nullptr },
981         { "metadataOutputStop", nullptr, MetadataOutputStop, nullptr, nullptr, nullptr, napi_default, nullptr },
982         { "metadataOutputRelease", nullptr, MetadataOutputRelease, nullptr, nullptr, nullptr, napi_default, nullptr },
983         { "sessionAddInput", nullptr, SessionAddInput, nullptr, nullptr, nullptr, napi_default, nullptr },
984         { "sessionRemoveInput", nullptr, SessionRemoveInput, nullptr, nullptr, nullptr, napi_default, nullptr },
985         { "sessionAddPreviewOutput", nullptr, SessionAddPreviewOutput, nullptr, nullptr, nullptr,
986             napi_default, nullptr },
987         { "sessionAddPhotoOutput", nullptr, SessionAddPhotoOutput, nullptr, nullptr, nullptr, napi_default, nullptr },
988         { "sessionAddVideoOutput", nullptr, SessionAddVideoOutput, nullptr, nullptr, nullptr, napi_default, nullptr },
989         { "sessionAddMetadataOutput", nullptr, SessionAddMetadataOutput, nullptr, nullptr, nullptr,
990             napi_default, nullptr },
991         { "sessionRemovePreviewOutput", nullptr, SessionRemovePreviewOutput, nullptr, nullptr, nullptr,
992             napi_default, nullptr },
993         { "sessionRemovePhotoOutput", nullptr, SessionRemovePhotoOutput, nullptr, nullptr, nullptr,
994             napi_default, nullptr },
995         { "sessionRemoveVideoOutput", nullptr, SessionRemoveVideoOutput, nullptr, nullptr, nullptr,
996             napi_default, nullptr },
997         { "sessionRemoveMetadataOutput", nullptr, SessionRemoveMetadataOutput, nullptr, nullptr, nullptr,
998             napi_default, nullptr },
999         { "sessionStart", nullptr, SessionStart, nullptr, nullptr, nullptr, napi_default, nullptr },
1000         { "sessionStop", nullptr, SessionStop, nullptr, nullptr, nullptr, napi_default, nullptr },
1001         { "sessionBegin", nullptr, SessionBegin, nullptr, nullptr, nullptr, napi_default, nullptr },
1002         { "sessionCommitConfig", nullptr, SessionCommitConfig, nullptr, nullptr, nullptr,
1003             napi_default, nullptr },
1004         { "sessionRelease", nullptr, SessionRelease, nullptr, nullptr, nullptr, napi_default, nullptr },
1005         { "sessionHasFlash", nullptr, SessionHasFlash, nullptr, nullptr, nullptr, napi_default, nullptr },
1006         { "sessionIsFlashModeSupported", nullptr, SessionIsFlashModeSupported, nullptr, nullptr, nullptr,
1007             napi_default, nullptr },
1008         { "sessionGetFlashMode", nullptr, SessionGetFlashMode, nullptr, nullptr, nullptr, napi_default, nullptr },
1009         { "sessionSetFlashMode", nullptr, SessionSetFlashMode, nullptr, nullptr, nullptr, napi_default, nullptr },
1010         { "sessionIsExposureModeSupported", nullptr, SessionIsExposureModeSupported, nullptr, nullptr, nullptr,
1011             napi_default, nullptr },
1012         { "sessionGetExposureMode", nullptr, SessionGetExposureMode, nullptr, nullptr, nullptr,
1013             napi_default, nullptr },
1014         { "sessionSetExposureMode", nullptr, SessionSetExposureMode, nullptr, nullptr, nullptr,
1015             napi_default, nullptr },
1016         { "sessionGetMeteringPoint", nullptr, SessionGetMeteringPoint, nullptr, nullptr, nullptr,
1017             napi_default, nullptr },
1018         { "sessionSetMeteringPoint", nullptr, SessionSetMeteringPoint, nullptr, nullptr, nullptr,
1019             napi_default, nullptr },
1020         { "sessionGetExposureBiasRange", nullptr, SessionGetExposureBiasRange, nullptr, nullptr, nullptr,
1021             napi_default, nullptr },
1022         { "sessionSetExposureBias", nullptr, SessionSetExposureBias, nullptr, nullptr, nullptr, napi_default, nullptr },
1023         { "sessionGetExposureBias", nullptr, SessionGetExposureBias, nullptr, nullptr, nullptr, napi_default, nullptr },
1024         { "sessionIsFocusModeSupported", nullptr, SessionIsFocusModeSupported, nullptr, nullptr, nullptr,
1025             napi_default, nullptr },
1026         { "sessionGetFocusMode", nullptr, SessionGetFocusMode, nullptr, nullptr, nullptr, napi_default, nullptr },
1027         { "sessionSetFocusMode", nullptr, SessionSetFocusMode, nullptr, nullptr, nullptr, napi_default, nullptr },
1028         { "sessionSetFocusPoint", nullptr, SessionSetFocusPoint, nullptr, nullptr, nullptr, napi_default, nullptr },
1029         { "sessionGetFocusPoint", nullptr, SessionGetFocusPoint, nullptr, nullptr, nullptr, napi_default, nullptr },
1030         { "sessionGetZoomRatioRange", nullptr, SessionGetZoomRatioRange, nullptr, nullptr, nullptr,
1031             napi_default, nullptr },
1032         { "sessionGetZoomRatio", nullptr, SessionGetZoomRatio, nullptr, nullptr, nullptr, napi_default, nullptr },
1033         { "sessionSetZoomRatio", nullptr, SessionSetZoomRatio, nullptr, nullptr, nullptr, napi_default, nullptr },
1034         { "sessionIsVideoStabilizationModeSupported", nullptr, SessionIsVideoStabilizationModeSupported,
1035             nullptr, nullptr, nullptr, napi_default, nullptr },
1036         { "sessionGetVideoStabilizationMode", nullptr, SessionGetVideoStabilizationMode, nullptr, nullptr, nullptr,
1037             napi_default, nullptr },
1038         { "sessionSetVideoStabilizationMode", nullptr, SessionSetVideoStabilizationMode, nullptr, nullptr, nullptr,
1039             napi_default, nullptr },
1040         { "getCameraCallbackCode", nullptr, GetCameraCallbackCode, nullptr, nullptr, nullptr, napi_default, nullptr },
1041         { "takePictureWithSettings", nullptr, TakePictureWithSettings, nullptr, nullptr, nullptr,
1042             napi_default, nullptr },
1043         { "JsCreateImageReceiverOptions", nullptr, OHOS::Media::ImageReceiverTest::JsCreateImageReceiverOptions,
1044             nullptr, nullptr, nullptr, napi_static, nullptr },
1045         { "JsImageReceiverOptionsGetSize", nullptr, OHOS::Media::ImageReceiverTest::JsImageReceiverOptionsGetSize,
1046             nullptr, nullptr, nullptr, napi_static, nullptr },
1047         { "JsImageReceiverOptionsSetSize", nullptr, OHOS::Media::ImageReceiverTest::JsImageReceiverOptionsSetSize,
1048             nullptr, nullptr, nullptr, napi_static, nullptr },
1049         {
1050             "JsImageReceiverOptionsGetCapacity", nullptr,
1051             OHOS::Media::ImageReceiverTest::JsImageReceiverOptionsGetCapacity,
1052             nullptr, nullptr, nullptr, napi_static, nullptr
1053         },
1054         {
1055             "JsImageReceiverOptionsSetCapacity", nullptr,
1056             OHOS::Media::ImageReceiverTest::JsImageReceiverOptionsSetCapacity,
1057             nullptr, nullptr, nullptr, napi_static, nullptr
1058         },
1059         { "JsReleaseImageReceiverOptions", nullptr, OHOS::Media::ImageReceiverTest::JsReleaseImageReceiverOptions,
1060             nullptr, nullptr, nullptr, napi_static, nullptr },
1061         { "JsCreateImageReceiver", nullptr, OHOS::Media::ImageReceiverTest::JsCreateImageReceiver,
1062             nullptr, nullptr, nullptr, napi_static, nullptr },
1063         { "JsGetReceivingSurfaceId", nullptr, OHOS::Media::ImageReceiverTest::JsGetReceivingSurfaceId,
1064             nullptr, nullptr, nullptr, napi_static, nullptr },
1065         { "JsReadLatestImage", nullptr, OHOS::Media::ImageReceiverTest::JsReadLatestImage,
1066             nullptr, nullptr, nullptr, napi_static, nullptr },
1067         { "JsReadNextImage", nullptr, OHOS::Media::ImageReceiverTest::JsReadNextImage,
1068             nullptr, nullptr, nullptr, napi_static, nullptr },
1069         { "JsOn", nullptr, OHOS::Media::ImageReceiverTest::JsOn,
1070             nullptr, nullptr, nullptr, napi_static, nullptr },
1071         { "JsOff", nullptr, OHOS::Media::ImageReceiverTest::JsOff,
1072             nullptr, nullptr, nullptr, napi_static, nullptr },
1073         { "JsGetSize", nullptr, OHOS::Media::ImageReceiverTest::JsGetSize,
1074             nullptr, nullptr, nullptr, napi_static, nullptr },
1075         { "JsGetCapacity", nullptr, OHOS::Media::ImageReceiverTest::JsGetCapacity,
1076             nullptr, nullptr, nullptr, napi_static, nullptr },
1077         { "JsReleaseImageReceiver", nullptr, OHOS::Media::ImageReceiverTest::JsReleaseImageReceiver,
1078             nullptr, nullptr, nullptr, napi_static, nullptr },
1079         { "JsGetImageSize", nullptr, OHOS::Media::ImageReceiverTest::JsGetImageSize,
1080             nullptr, nullptr, nullptr, napi_static, nullptr },
1081         { "JsGetImageComponentTypes", nullptr, OHOS::Media::ImageReceiverTest::JsGetImageComponentTypes,
1082             nullptr, nullptr, nullptr, napi_static, nullptr },
1083         { "JsGetImageByteBuffer", nullptr, OHOS::Media::ImageReceiverTest::JsGetImageByteBuffer,
1084             nullptr, nullptr, nullptr, napi_static, nullptr },
1085         { "JsGetImageBufferSize", nullptr, OHOS::Media::ImageReceiverTest::JsGetImageBufferSize,
1086             nullptr, nullptr, nullptr, napi_static, nullptr },
1087         { "JsGetImageRowStride", nullptr, OHOS::Media::ImageReceiverTest::JsGetImageRowStride,
1088             nullptr, nullptr, nullptr, napi_static, nullptr },
1089         { "JsGetImagePixelStride", nullptr, OHOS::Media::ImageReceiverTest::JsGetImagePixelStride,
1090             nullptr, nullptr, nullptr, napi_static, nullptr },
1091         { "JsReleaseImage", nullptr, OHOS::Media::ImageReceiverTest::JsReleaseImage,
1092             nullptr, nullptr, nullptr, napi_static, nullptr },
1093         { "createImageReceiver", nullptr, OHOS::Media::ImageReceiverNDKTest::JsCreateImageReceiver,
1094             nullptr, nullptr, nullptr, napi_static, nullptr },
1095         { "getReceivingSurfaceId", nullptr, OHOS::Media::ImageReceiverNDKTest::JsGetReceivingSurfaceId,
1096             nullptr, nullptr, nullptr, napi_static, nullptr },
1097         { "readLatestImage", nullptr, OHOS::Media::ImageReceiverNDKTest::JsReadLatestImage,
1098             nullptr, nullptr, nullptr, napi_static, nullptr },
1099         { "readNextImage", nullptr, OHOS::Media::ImageReceiverNDKTest::JsReadNextImage,
1100             nullptr, nullptr, nullptr, napi_static, nullptr },
1101         { "on", nullptr, OHOS::Media::ImageReceiverNDKTest::JsOn,
1102             nullptr, nullptr, nullptr, napi_static, nullptr },
1103         { "getSize", nullptr, OHOS::Media::ImageReceiverNDKTest::JsGetSize,
1104             nullptr, nullptr, nullptr, napi_static, nullptr },
1105         { "getCapacity", nullptr, OHOS::Media::ImageReceiverNDKTest::JsGetCapacity,
1106             nullptr, nullptr, nullptr, napi_static, nullptr },
1107         { "getFormat", nullptr, OHOS::Media::ImageReceiverNDKTest::JsGetFormat,
1108             nullptr, nullptr, nullptr, napi_static, nullptr },
1109         { "getOnEventCount", nullptr, OHOS::Media::ImageReceiverNDKTest::JsGetOnEventCount,
1110             nullptr, nullptr, nullptr, napi_static, nullptr },
1111         { "imageClipRect", nullptr, OHOS::Media::ImageReceiverNDKTest::JsImageClipRect,
1112             nullptr, nullptr, nullptr, napi_static, nullptr },
1113         { "imageSize", nullptr, OHOS::Media::ImageReceiverNDKTest::JsImageSize,
1114             nullptr, nullptr, nullptr, napi_static, nullptr },
1115         { "imageFormat", nullptr, OHOS::Media::ImageReceiverNDKTest::JsImageFormat,
1116             nullptr, nullptr, nullptr, napi_static, nullptr },
1117         { "imageGetComponent", nullptr, OHOS::Media::ImageReceiverNDKTest::JsImageGetComponent,
1118             nullptr, nullptr, nullptr, napi_static, nullptr },
1119         { "receiverRelease", nullptr, OHOS::Media::ImageReceiverNDKTest::JsReceiverRelease,
1120             nullptr, nullptr, nullptr, napi_static, nullptr },
1121         { "imageRelease", nullptr, OHOS::Media::ImageReceiverNDKTest::JsImageRelease,
1122             nullptr, nullptr, nullptr, napi_static, nullptr }
1123     };
1124     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
1125     return exports;
1126 }
1127 EXTERN_C_END
1128 
1129 static napi_module demoModule = {
1130     .nm_version =1,
1131     .nm_flags = 0,
1132     .nm_filename = nullptr,
1133     .nm_register_func = Init,
1134     .nm_modname = "entry",
1135     .nm_priv = ((void*)0),
1136     .reserved = { 0 },
1137 };
1138 
RegisterEntryModule(void)1139 extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
1140 {
1141     napi_module_register(&demoModule);
1142 }
1143