1 /*
2 * Copyright (c) 2023 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 <EGL/egl.h>
18 #include <EGL/eglext.h>
19 #include <GLES3/gl32.h>
20 #include <bits/alltypes.h>
21 #include <cstring>
22 #include <native_buffer/native_buffer.h>
23 #include <native_image/native_image.h>
24 #include <native_window/external_window.h>
25 #include <sys/mman.h>
26 #include <chrono>
27
28 #define SUCCESS 0
29 #define PARAM_0 0
30 #define PARAM_8 8
31 #define PARAM_1 1
32 #define PARAM_16 16
33 #define PARAM_800 800
34 #define PARAM_600 600
35 #define FAIL (-1)
36 #define ONEVAL 1
37 #define NUMMAX 16
38 #define TWOVAL 2
39 #define ARR_NUMBER_0 0
40 #define ARR_NUMBER_1 1
41 #define ARR_NUMBER_2 2
42 #define ARR_NUMBER_3 3
43 #define ARR_NUMBER_4 4
44 #define ARR_NUMBER_5 5
45 #define ARR_NUMBER_6 6
46 #define NUMBER_99999 99999
47 #define NUMBER_500 500
48 #define NUMBER_1000 1000
49 #define NUMBER_100000 100000
50
51 using GetPlatformDisplayExt = PFNEGLGETPLATFORMDISPLAYEXTPROC;
52 constexpr const char *EGL_EXT_PLATFORM_WAYLAND = "EGL_EXT_platform_wayland";
53 constexpr const char *EGL_KHR_PLATFORM_WAYLAND = "EGL_KHR_platform_wayland";
54 constexpr int32_t EGL_CONTEXT_CLIENT_VERSION_NUM = 2;
55 constexpr char CHARACTER_WHITESPACE = ' ';
56 constexpr const char *CHARACTER_STRING_WHITESPACE = " ";
57 constexpr const char *EGL_GET_PLATFORM_DISPLAY_EXT = "eglGetPlatformDisplayEXT";
58 EGLContext eglContext_ = EGL_NO_CONTEXT;
59 EGLDisplay eglDisplay_ = EGL_NO_DISPLAY;
60 static inline EGLConfig config_;
61
62 class InitNativeWindow {
63 private:
64 int32_t width_ = 0x100;
65 int32_t height_ = 0x100;
66 int32_t usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA;
67 OH_NativeImage *_image = nullptr;
68 OHNativeWindow *_nativeWindow = nullptr;
69 GLuint textureId = 0;
70 public:
InitNativeWindow()71 InitNativeWindow()
72 {
73 _image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
74 if (_image != nullptr) {
75 _nativeWindow = OH_NativeImage_AcquireNativeWindow(_image);
76 if (_nativeWindow != nullptr) {
77 OH_NativeWindow_NativeWindowHandleOpt(_nativeWindow, SET_BUFFER_GEOMETRY, width_, height_);
78 OH_NativeWindow_NativeWindowHandleOpt(_nativeWindow, SET_USAGE, usage);
79 } else {
80 _nativeWindow = nullptr;
81 }
82 } else {
83 _image = nullptr;
84 _nativeWindow = nullptr;
85 }
86 }
~InitNativeWindow()87 ~InitNativeWindow()
88 {
89 _image = nullptr;
90 _nativeWindow = nullptr;
91 }
returnNativeWindow()92 OHNativeWindow *returnNativeWindow()
93 {
94 if (_nativeWindow == nullptr) {
95 return nullptr;
96 } else {
97 return _nativeWindow;
98 }
99 };
returnNativeImage()100 OH_NativeImage *returnNativeImage()
101 {
102 if (_image == nullptr) {
103 return nullptr;
104 } else {
105 return _image;
106 }
107 }
OH_FlushBuffer()108 int32_t OH_FlushBuffer()
109 {
110 OHNativeWindowBuffer *Buffer = nullptr;
111 int fenceFd = -1;
112 struct Region *region = new Region();
113 struct Region::Rect *rect = new Region::Rect();
114 rect->x = 0x100;
115 rect->y = 0x100;
116 rect->w = 0x100;
117 rect->h = 0x100;
118 region->rects = rect;
119 int32_t ret = OH_NativeWindow_NativeWindowRequestBuffer(_nativeWindow, &Buffer, &fenceFd);
120 ret = OH_NativeWindow_NativeWindowFlushBuffer(_nativeWindow, Buffer, fenceFd, *region);
121 return ret;
122 }
123 };
124
CheckEglExtension(const char * extensions,const char * extension)125 static bool CheckEglExtension(const char *extensions, const char *extension)
126 {
127 size_t extlen = strlen(extension);
128 const char *end = extensions + strlen(extensions);
129
130 while (extensions < end) {
131 size_t n = PARAM_0;
132 if (*extensions == CHARACTER_WHITESPACE) {
133 extensions++;
134 continue;
135 }
136 n = strcspn(extensions, CHARACTER_STRING_WHITESPACE);
137 if (n == extlen && strncmp(extension, extensions, n) == PARAM_0) {
138 return true;
139 }
140 extensions += n;
141 }
142 return false;
143 }
144
GetPlatformEglDisplay(EGLenum platform,void * native_display,const EGLint * attrib_list)145 static EGLDisplay GetPlatformEglDisplay(EGLenum platform, void *native_display, const EGLint *attrib_list)
146 {
147 static GetPlatformDisplayExt eglGetPlatformDisplayExt = nullptr;
148
149 if (!eglGetPlatformDisplayExt) {
150 const char *extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
151 if (extensions && (CheckEglExtension(extensions, EGL_EXT_PLATFORM_WAYLAND) ||
152 CheckEglExtension(extensions, EGL_KHR_PLATFORM_WAYLAND))) {
153 eglGetPlatformDisplayExt = (GetPlatformDisplayExt)eglGetProcAddress(EGL_GET_PLATFORM_DISPLAY_EXT);
154 }
155 }
156
157 if (eglGetPlatformDisplayExt) {
158 return eglGetPlatformDisplayExt(platform, native_display, attrib_list);
159 }
160
161 return eglGetDisplay((EGLNativeDisplayType)native_display);
162 }
163
InitEGLEnv()164 static void InitEGLEnv()
165 {
166 eglDisplay_ = GetPlatformEglDisplay(EGL_PLATFORM_OHOS_KHR, EGL_DEFAULT_DISPLAY, nullptr);
167 EGLint major, minor;
168 eglInitialize(eglDisplay_, &major, &minor);
169 eglBindAPI(EGL_OPENGL_ES_API);
170 unsigned int ret;
171 EGLint count;
172 EGLint config_attribs[] = {EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RED_SIZE, PARAM_8,
173 EGL_GREEN_SIZE, PARAM_8, EGL_BLUE_SIZE, PARAM_8,
174 EGL_ALPHA_SIZE, PARAM_8, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT,
175 EGL_NONE};
176
177 ret = eglChooseConfig(eglDisplay_, config_attribs, &config_, PARAM_1, &count);
178 static const EGLint context_attribs[] = {EGL_CONTEXT_CLIENT_VERSION, EGL_CONTEXT_CLIENT_VERSION_NUM, EGL_NONE};
179 eglContext_ = eglCreateContext(eglDisplay_, config_, EGL_NO_CONTEXT, context_attribs);
180 eglMakeCurrent(eglDisplay_, EGL_NO_SURFACE, EGL_NO_SURFACE, eglContext_);
181 }
182
183 int32_t g_callBack = 0;
184
DealCallback(void * context)185 void DealCallback(void * context)
186 {
187 g_callBack++;
188 return;
189 }
190
OnFrameAvailable(void * context)191 static void OnFrameAvailable(void *context)
192 {
193 DealCallback(context);
194 return;
195 }
196
getNativeImage()197 static OH_NativeImage *getNativeImage()
198 {
199 GLuint textureId = SUCCESS;
200 glGenTextures(ONEVAL, &textureId);
201 OH_NativeImage *image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
202 return image;
203 }
204
OHNativeImageCreate(napi_env env,napi_callback_info info)205 static napi_value OHNativeImageCreate(napi_env env, napi_callback_info info)
206 {
207 napi_value result = nullptr;
208 OH_NativeImage *image = getNativeImage();
209 int backInfo = FAIL;
210 if (image != nullptr) {
211 backInfo = SUCCESS;
212 OH_NativeImage_Destroy(&image);
213 }
214
215 napi_create_int32(env, backInfo, &result);
216 return result;
217 }
218
OHNativeImageAcquireNativeWindow(napi_env env,napi_callback_info info)219 static napi_value OHNativeImageAcquireNativeWindow(napi_env env, napi_callback_info info)
220 {
221 napi_value result = nullptr;
222 int backInfo = FAIL;
223 OH_NativeImage *image = getNativeImage();
224
225 if (image != nullptr) {
226 OHNativeWindow *nativeWindow = OH_NativeImage_AcquireNativeWindow(image);
227 if (nativeWindow != nullptr) {
228 backInfo = SUCCESS;
229 }
230 OH_NativeImage_Destroy(&image);
231 }
232 napi_create_int32(env, backInfo, &result);
233 return result;
234 }
235
OHNativeImageAcquireNativeWindowAbnormal(napi_env env,napi_callback_info info)236 static napi_value OHNativeImageAcquireNativeWindowAbnormal(napi_env env, napi_callback_info info)
237 {
238 napi_value result = nullptr;
239 int backInfo = FAIL;
240 OHNativeWindow *nativeWindow = OH_NativeImage_AcquireNativeWindow(nullptr);
241 if (nativeWindow != nullptr) {
242 backInfo = SUCCESS;
243 }
244 napi_create_int32(env, backInfo, &result);
245 return result;
246 }
247
OHNativeImageAttachContext(napi_env env,napi_callback_info info)248 static napi_value OHNativeImageAttachContext(napi_env env, napi_callback_info info)
249 {
250 int backInfo = FAIL;
251 InitEGLEnv();
252 GLuint textureId;
253 glGenTextures(PARAM_1, &textureId);
254 OH_NativeImage *image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
255 OHNativeWindow *nativeWindow = OH_NativeImage_AcquireNativeWindow(image);
256 int code = SET_BUFFER_GEOMETRY;
257 int32_t width = PARAM_800;
258 int32_t height = PARAM_600;
259 OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, width, height);
260 OHNativeWindowBuffer *buffer = nullptr;
261 int fenceFd;
262 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &buffer, &fenceFd);
263 BufferHandle *handle = OH_NativeWindow_GetBufferHandleFromNative(buffer);
264 void *mappedAddr = mmap(handle->virAddr, handle->size, PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd, PARAM_0);
265 static uint32_t value = 0x00;
266 value++;
267 uint32_t *pixel = static_cast<uint32_t *>(mappedAddr);
268 for (uint32_t x = PARAM_0; x < width; x++) {
269 for (uint32_t y = PARAM_0; y < height; y++) {
270 *pixel++ = value;
271 }
272 }
273 munmap(mappedAddr, handle->size);
274
275 Region region{nullptr, PARAM_0};
276 OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, buffer, fenceFd, region);
277 OH_NativeImage_UpdateSurfaceImage(image);
278 OH_NativeImage_GetTimestamp(image);
279 float matrix[16];
280 OH_NativeImage_GetTransformMatrix(image, matrix);
281 OH_NativeWindow_DestroyNativeWindow(nativeWindow);
282 OH_NativeImage_DetachContext(image);
283 GLuint textureId2;
284 glGenTextures(PARAM_1, &textureId2);
285 backInfo = OH_NativeImage_AttachContext(image, textureId2);
286 napi_value result = nullptr;
287 napi_create_int32(env, backInfo, &result);
288 OH_NativeImage_Destroy(&image);
289 return result;
290 }
291
OHNativeImageAttachContextAbnormal(napi_env env,napi_callback_info info)292 static napi_value OHNativeImageAttachContextAbnormal(napi_env env, napi_callback_info info)
293 {
294 GLuint textureId2;
295 glGenTextures(ONEVAL, &textureId2);
296 int backInfo = OH_NativeImage_AttachContext(nullptr, textureId2);
297 if (backInfo != SUCCESS) {
298 backInfo = FAIL;
299 }
300 napi_value result = nullptr;
301 napi_create_int32(env, backInfo, &result);
302 return result;
303 }
304
OHNativeImageDetachContext(napi_env env,napi_callback_info info)305 static napi_value OHNativeImageDetachContext(napi_env env, napi_callback_info info)
306 {
307 int backInfo = FAIL;
308 InitEGLEnv();
309 GLuint textureId;
310 glGenTextures(PARAM_1, &textureId);
311 OH_NativeImage *image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
312 OHNativeWindow *nativeWindow = OH_NativeImage_AcquireNativeWindow(image);
313 int code = SET_BUFFER_GEOMETRY;
314 int32_t width = PARAM_800;
315 int32_t height = PARAM_600;
316 OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, width, height);
317 OHNativeWindowBuffer *buffer = nullptr;
318 int fenceFd;
319 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &buffer, &fenceFd);
320 BufferHandle *handle = OH_NativeWindow_GetBufferHandleFromNative(buffer);
321 void *mappedAddr = mmap(handle->virAddr, handle->size, PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd, PARAM_0);
322 static uint32_t value = 0x00;
323 value++;
324 uint32_t *pixel = static_cast<uint32_t *>(mappedAddr);
325 for (uint32_t x = PARAM_0; x < width; x++) {
326 for (uint32_t y = PARAM_0; y < height; y++) {
327 *pixel++ = value;
328 }
329 }
330 munmap(mappedAddr, handle->size);
331
332 Region region{nullptr, PARAM_0};
333 OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, buffer, fenceFd, region);
334 OH_NativeImage_UpdateSurfaceImage(image);
335 OH_NativeImage_GetTimestamp(image);
336 float matrix[16];
337 OH_NativeImage_GetTransformMatrix(image, matrix);
338 OH_NativeWindow_DestroyNativeWindow(nativeWindow);
339 backInfo = OH_NativeImage_DetachContext(image);
340 GLuint textureId2;
341 glGenTextures(PARAM_1, &textureId2);
342 OH_NativeImage_AttachContext(image, textureId2);
343 OH_NativeImage_Destroy(&image);
344 napi_value result = nullptr;
345 napi_create_int32(env, backInfo, &result);
346 return result;
347 }
348
OHNativeImageDetachContextAbnormal(napi_env env,napi_callback_info info)349 static napi_value OHNativeImageDetachContextAbnormal(napi_env env, napi_callback_info info)
350 {
351 int backInfo = OH_NativeImage_DetachContext(nullptr);
352 if (backInfo != SUCCESS) {
353 backInfo = FAIL;
354 }
355 napi_value result = nullptr;
356 napi_create_int32(env, backInfo, &result);
357 return result;
358 }
359
OHNativeImageUpdateSurfaceImage(napi_env env,napi_callback_info info)360 static napi_value OHNativeImageUpdateSurfaceImage(napi_env env, napi_callback_info info)
361 {
362 InitEGLEnv();
363 GLuint textureId;
364 glGenTextures(PARAM_1, &textureId);
365 OH_NativeImage *image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
366 OHNativeWindow *nativeWindow = OH_NativeImage_AcquireNativeWindow(image);
367 int code = SET_BUFFER_GEOMETRY;
368 int32_t width = PARAM_800;
369 int32_t height = PARAM_600;
370 OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, width, height);
371 OHNativeWindowBuffer *buffer = nullptr;
372 int fenceFd;
373 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &buffer, &fenceFd);
374 BufferHandle *handle = OH_NativeWindow_GetBufferHandleFromNative(buffer);
375 void *mappedAddr = mmap(handle->virAddr, handle->size, PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd, PARAM_0);
376 static uint32_t value = 0x00;
377 value++;
378 uint32_t *pixel = static_cast<uint32_t *>(mappedAddr);
379 for (uint32_t x = PARAM_0; x < width; x++) {
380 for (uint32_t y = PARAM_0; y < height; y++) {
381 *pixel++ = value;
382 }
383 }
384 munmap(mappedAddr, handle->size);
385 Region region{nullptr, PARAM_0};
386 OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, buffer, fenceFd, region);
387 int backInfo = OH_NativeImage_UpdateSurfaceImage(image);
388 OH_NativeImage_GetTimestamp(image);
389 float matrix[16];
390 OH_NativeImage_GetTransformMatrix(image, matrix);
391 OH_NativeWindow_DestroyNativeWindow(nativeWindow);
392 OH_NativeImage_DetachContext(image);
393 GLuint textureId2;
394 glGenTextures(PARAM_1, &textureId2);
395 OH_NativeImage_AttachContext(image, textureId2);
396 OH_NativeImage_Destroy(&image);
397 napi_value result = nullptr;
398 napi_create_int32(env, backInfo, &result);
399 return result;
400 }
401
OHNativeImageUpdateSurfaceImageBoundary(napi_env env,napi_callback_info info)402 static napi_value OHNativeImageUpdateSurfaceImageBoundary(napi_env env, napi_callback_info info)
403 {
404 InitEGLEnv();
405 GLuint textureId;
406 glGenTextures(PARAM_1, &textureId);
407 OH_NativeImage *image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
408 OHNativeWindow *nativeWindow = OH_NativeImage_AcquireNativeWindow(image);
409 int code = SET_BUFFER_GEOMETRY;
410 int32_t width = 4096;
411 int32_t height = 2160;
412 OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, width, height);
413 OHNativeWindowBuffer *buffer = nullptr;
414 int fenceFd;
415 OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &buffer, &fenceFd);
416 BufferHandle *handle = OH_NativeWindow_GetBufferHandleFromNative(buffer);
417 void *mappedAddr = mmap(handle->virAddr, handle->size, PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd, PARAM_0);
418 static uint32_t value = 0x00;
419 value++;
420 uint32_t *pixel = static_cast<uint32_t *>(mappedAddr);
421 for (uint32_t x = PARAM_0; x < width; x++) {
422 for (uint32_t y = PARAM_0; y < height; y++) {
423 *pixel++ = value;
424 }
425 }
426 munmap(mappedAddr, handle->size);
427 Region region{nullptr, PARAM_0};
428 OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, buffer, fenceFd, region);
429 int backInfo = OH_NativeImage_UpdateSurfaceImage(image);
430 OH_NativeImage_GetTimestamp(image);
431 float matrix[16];
432 OH_NativeImage_GetTransformMatrix(image, matrix);
433 OH_NativeWindow_DestroyNativeWindow(nativeWindow);
434 OH_NativeImage_DetachContext(image);
435 GLuint textureId2;
436 glGenTextures(PARAM_1, &textureId2);
437 OH_NativeImage_AttachContext(image, textureId2);
438 OH_NativeImage_Destroy(&image);
439 napi_value result = nullptr;
440 napi_create_int32(env, backInfo, &result);
441 return result;
442 }
443
OHNativeImageUpdateSurfaceImageAbnormal(napi_env env,napi_callback_info info)444 static napi_value OHNativeImageUpdateSurfaceImageAbnormal(napi_env env, napi_callback_info info)
445 {
446 int backInfo = OH_NativeImage_UpdateSurfaceImage(nullptr);
447 if (backInfo != SUCCESS) {
448 backInfo = FAIL;
449 }
450 napi_value result = nullptr;
451 napi_create_int32(env, backInfo, &result);
452 return result;
453 }
454
OHNativeImageGetTimestamp(napi_env env,napi_callback_info info)455 static napi_value OHNativeImageGetTimestamp(napi_env env, napi_callback_info info)
456 {
457 int backInfo = FAIL;
458 OH_NativeImage *image = getNativeImage();
459 if (image != nullptr) {
460 backInfo = OH_NativeImage_GetTimestamp(image);
461 OH_NativeImage_Destroy(&image);
462 }
463 napi_value result = nullptr;
464 napi_create_int32(env, backInfo, &result);
465 return result;
466 }
467
OHNativeImageGetTransformMatrix(napi_env env,napi_callback_info info)468 static napi_value OHNativeImageGetTransformMatrix(napi_env env, napi_callback_info info)
469 {
470 int backInfo = FAIL;
471 OH_NativeImage *image = getNativeImage();
472 if (image != nullptr) {
473 float matrix[NUMMAX];
474 backInfo = OH_NativeImage_GetTransformMatrix(image, matrix);
475 OH_NativeImage_Destroy(&image);
476 }
477 napi_value result = nullptr;
478 napi_create_int32(env, backInfo, &result);
479 return result;
480 }
481
OHNativeImageGetTransformMatrixAbnormal(napi_env env,napi_callback_info info)482 static napi_value OHNativeImageGetTransformMatrixAbnormal(napi_env env, napi_callback_info info)
483 {
484 int backInfo = FAIL;
485 float matrix[NUMMAX];
486 int ret = OH_NativeImage_GetTransformMatrix(nullptr, matrix);
487 if (ret != SUCCESS) {
488 backInfo = FAIL;
489 }
490
491 napi_value result = nullptr;
492 napi_create_int32(env, backInfo, &result);
493 return result;
494 }
495
OHNativeImageDestroy(napi_env env,napi_callback_info info)496 static napi_value OHNativeImageDestroy(napi_env env, napi_callback_info info)
497 {
498 int backInfo = FAIL;
499 OH_NativeImage *image = getNativeImage();
500 OH_NativeImage_Destroy(&image);
501 if (image == nullptr) {
502 backInfo = SUCCESS;
503 }
504
505 napi_value result = nullptr;
506 napi_create_int32(env, backInfo, &result);
507 return result;
508 }
509
OHNativeImageCreateNormal(napi_env env,napi_callback_info info)510 static napi_value OHNativeImageCreateNormal(napi_env env, napi_callback_info info)
511 {
512 int backInfo = FAIL;
513 OH_NativeImage *image = nullptr;
514 InitEGLEnv();
515 GLuint textureId;
516 glGenTextures(PARAM_1, &textureId);
517 GLuint textureTarget = GL_TEXTURE_2D;
518 image = OH_NativeImage_Create(textureId, textureTarget);
519 if (image != nullptr) {
520 backInfo = SUCCESS;
521 }
522 napi_value result = nullptr;
523 napi_create_int32(env, backInfo, &result);
524 OH_NativeImage_Destroy(&image);
525 return result;
526 }
527
OHNativeImageCreateAbnormal(napi_env env,napi_callback_info info)528 static napi_value OHNativeImageCreateAbnormal(napi_env env, napi_callback_info info)
529 {
530 int backInfo = FAIL;
531
532 OH_NativeImage *image = OH_NativeImage_Create(0, 1);
533 if (image != nullptr) {
534 backInfo = SUCCESS;
535 }
536 napi_value result = nullptr;
537 napi_create_int32(env, backInfo, &result);
538 OH_NativeImage_Destroy(&image);
539 return result;
540 }
541
OHNativeImageDestroy1(napi_env env,napi_callback_info info)542 static napi_value OHNativeImageDestroy1(napi_env env, napi_callback_info info)
543 {
544 int backInfo = FAIL;
545 OH_NativeImage *image = nullptr;
546 GLenum nativeImageTexId_;
547 GLuint GL_TEXTURE_EXTERNAL_OES;
548 glGenTextures(1, &nativeImageTexId_);
549 glBindTexture(GL_TEXTURE_EXTERNAL_OES, nativeImageTexId_);
550 image = OH_NativeImage_Create(nativeImageTexId_, GL_TEXTURE_EXTERNAL_OES);
551 if (image != nullptr) {
552 OH_NativeImage_Destroy(&image);
553 if (image == nullptr) {
554 backInfo = SUCCESS;
555 }
556 }
557 napi_value result = nullptr;
558 napi_create_int32(env, backInfo, &result);
559 return result;
560 }
561
OHNativeImageCreateMuch(napi_env env,napi_callback_info info)562 static napi_value OHNativeImageCreateMuch(napi_env env, napi_callback_info info)
563 {
564 int backInfo = SUCCESS;
565 const int count = NUMBER_500;
566 OH_NativeImage *imageArray[500] = {nullptr};
567 for (int i = 0; i < count; ++i) {
568 GLuint GL_TEXTURE_EXTERNAL_OES;
569 glBindTexture(GL_TEXTURE_EXTERNAL_OES, 1);
570 imageArray[i] = OH_NativeImage_Create(1, GL_TEXTURE_EXTERNAL_OES);
571 if (imageArray[i] == nullptr) {
572 backInfo = FAIL;
573 break;
574 }
575 }
576
577 for (int i = 0; i < count; ++i) {
578 if (imageArray[i] != nullptr) {
579 OH_NativeImage_Destroy(&imageArray[i]); // 销毁单个图像
580 if (imageArray[i] != nullptr) {
581 backInfo = FAIL;
582 break;
583 }
584 }
585 }
586
587 napi_value result = nullptr;
588 if (backInfo == FAIL) {
589 napi_create_int32(env, backInfo, &result);
590 } else {
591 napi_create_int32(env, SUCCESS, &result);
592 }
593
594 return result;
595 }
596
OHNativeImageAcquireNativeWindowNullptr(napi_env env,napi_callback_info info)597 static napi_value OHNativeImageAcquireNativeWindowNullptr(napi_env env, napi_callback_info info)
598 {
599 OHNativeWindow *nativeWindow = nullptr;
600 nativeWindow = OH_NativeImage_AcquireNativeWindow(nullptr);
601 napi_value result = nullptr;
602 if (nativeWindow != nullptr) {
603 napi_create_int32(env, SUCCESS, &result);
604 } else {
605 napi_create_int32(env, FAIL, &result);
606 }
607 return result;
608 }
609
OHNativeImageAcquireNativeWindowNormal(napi_env env,napi_callback_info info)610 static napi_value OHNativeImageAcquireNativeWindowNormal(napi_env env, napi_callback_info info)
611 {
612 int backInfo = FAIL;
613 OHNativeWindow *nativeWindow1 = nullptr;
614 OHNativeWindow *nativeWindow2 = nullptr;
615 OH_NativeImage *nativeImage = getNativeImage();
616 nativeWindow1 = OH_NativeImage_AcquireNativeWindow(nativeImage);
617 if (nativeWindow1 != nullptr) {
618 nativeWindow2 = OH_NativeImage_AcquireNativeWindow(nativeImage);
619 if (nativeWindow1 == nativeWindow2) {
620 backInfo = SUCCESS;
621 }
622 }
623
624 napi_value result = nullptr;
625 napi_create_int32(env, backInfo, &result);
626 OH_NativeImage_Destroy(&nativeImage);
627 return result;
628 }
629
OHNativeImageAttachContextNullptr(napi_env env,napi_callback_info info)630 static napi_value OHNativeImageAttachContextNullptr(napi_env env, napi_callback_info info)
631 {
632 OH_NativeImage *nativeImage = getNativeImage();
633 InitEGLEnv();
634 GLuint textureId;
635 glGenTextures(PARAM_1, &textureId);
636 napi_value result = nullptr;
637 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
638 napi_value result1 = nullptr;
639 napi_value result2 = nullptr;
640 int res1 = OH_NativeImage_AttachContext(nullptr, textureId);
641 if (res1 != 0) {
642 napi_create_int32(env, FAIL, &result1);
643 } else {
644 napi_create_int32(env, SUCCESS, &result1);
645 }
646 napi_set_element(env, result, ARR_NUMBER_0, result1);
647
648 int res2 = OH_NativeImage_AttachContext(nativeImage, NULL);
649 if (res2 != 0) {
650 napi_create_int32(env, FAIL, &result2);
651 } else {
652 napi_create_int32(env, SUCCESS, &result2);
653 }
654 napi_set_element(env, result, ARR_NUMBER_1, result2);
655 OH_NativeImage_Destroy(&nativeImage);
656 return result;
657 }
658
OHNativeImageDetachContextNullptr(napi_env env,napi_callback_info info)659 static napi_value OHNativeImageDetachContextNullptr(napi_env env, napi_callback_info info)
660 {
661 OH_NativeImage *nativeImage = getNativeImage();
662 InitEGLEnv();
663 GLuint textureId;
664 glGenTextures(PARAM_1, &textureId);
665 napi_value result = nullptr;
666 int res = OH_NativeImage_DetachContext(nullptr);
667 if (res != 0) {
668 napi_create_int32(env, FAIL, &result);
669 } else {
670 napi_create_int32(env, SUCCESS, &result);
671 }
672 OH_NativeImage_Destroy(&nativeImage);
673 return result;
674 }
675
OHNativeImageAttachContextNormal(napi_env env,napi_callback_info info)676 static napi_value OHNativeImageAttachContextNormal(napi_env env, napi_callback_info info)
677 {
678 OH_NativeImage *nativeImage = getNativeImage();
679 InitEGLEnv();
680 GLuint textureId;
681 glGenTextures(PARAM_1, &textureId);
682 napi_value result = nullptr;
683 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
684 napi_value result1 = nullptr;
685 napi_value result2 = nullptr;
686 int res1 = OH_NativeImage_AttachContext(nativeImage, textureId);
687 if (res1 == 0) {
688 napi_create_int32(env, SUCCESS, &result1);
689 } else {
690 napi_create_int32(env, FAIL, &result1);
691 }
692 napi_set_element(env, result, ARR_NUMBER_0, result1);
693
694 int res2 = OH_NativeImage_AttachContext(nativeImage, textureId);
695 if (res2 == 0) {
696 napi_create_int32(env, SUCCESS, &result2);
697 } else {
698 napi_create_int32(env, FAIL, &result2);
699 }
700 napi_set_element(env, result, ARR_NUMBER_1, result2);
701
702 OH_NativeImage_Destroy(&nativeImage);
703 return result;
704 }
705
OHNativeImageDetachContextNormal(napi_env env,napi_callback_info info)706 static napi_value OHNativeImageDetachContextNormal(napi_env env, napi_callback_info info)
707 {
708 OH_NativeImage *nativeImage = getNativeImage();
709 InitEGLEnv();
710 GLuint textureId;
711 glGenTextures(PARAM_1, &textureId);
712 napi_value result = nullptr;
713 napi_create_array_with_length(env, ARR_NUMBER_3, &result);
714 napi_value result1 = nullptr;
715 napi_value result2 = nullptr;
716 napi_value result3 = nullptr;
717 int res1 = OH_NativeImage_DetachContext(nativeImage);
718 if (res1 != 0) {
719 napi_create_int32(env, FAIL, &result1);
720 } else {
721 napi_create_int32(env, SUCCESS, &result1);
722 }
723 napi_set_element(env, result, ARR_NUMBER_0, result1);
724
725 int res2 = OH_NativeImage_AttachContext(nativeImage, textureId);
726 if (res2 == 0) {
727 napi_create_int32(env, SUCCESS, &result2);
728 } else {
729 napi_create_int32(env, FAIL, &result2);
730 }
731 napi_set_element(env, result, ARR_NUMBER_1, result2);
732
733 int res3 = OH_NativeImage_DetachContext(nativeImage);
734 if (res3 == 0) {
735 napi_create_int32(env, SUCCESS, &result3);
736 } else {
737 napi_create_int32(env, FAIL, &result3);
738 }
739 napi_set_element(env, result, ARR_NUMBER_2, result3);
740
741 OH_NativeImage_Destroy(&nativeImage);
742 return result;
743 }
744
OHNativeImageGetSurfaceIdNullptr(napi_env env,napi_callback_info info)745 static napi_value OHNativeImageGetSurfaceIdNullptr(napi_env env, napi_callback_info info)
746 {
747 OH_NativeImage *nativeImage = getNativeImage();
748 napi_value result = nullptr;
749 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
750 napi_value result1 = nullptr;
751 napi_value result2 = nullptr;
752 uint64_t surfaceId = NUMBER_99999;
753 int res1 = OH_NativeImage_GetSurfaceId(nullptr, &surfaceId);
754 if (res1 != 0 && surfaceId == NUMBER_99999) {
755 napi_create_int32(env, FAIL, &result1);
756 } else {
757 napi_create_int32(env, SUCCESS, &result1);
758 }
759 napi_set_element(env, result, ARR_NUMBER_0, result1);
760
761 int res2 = OH_NativeImage_GetSurfaceId(nullptr, NULL);
762 if (res2 != 0 && surfaceId == NUMBER_99999) {
763 napi_create_int32(env, FAIL, &result2);
764 } else {
765 napi_create_int32(env, SUCCESS, &result2);
766 }
767 napi_set_element(env, result, ARR_NUMBER_1, result2);
768
769 OH_NativeImage_Destroy(&nativeImage);
770 return result;
771 }
772
OHNativeGetSurfaceIdNormal(napi_env env,napi_callback_info info)773 static napi_value OHNativeGetSurfaceIdNormal(napi_env env, napi_callback_info info)
774 {
775 OH_NativeImage *nativeImage = getNativeImage();
776 napi_value result = nullptr;
777 uint64_t surfaceId = NUMBER_99999;
778 int res = OH_NativeImage_GetSurfaceId(nativeImage, &surfaceId);
779 if (res == 0 && surfaceId != NUMBER_99999) {
780 napi_create_int32(env, SUCCESS, &result);
781 } else {
782 napi_create_int32(env, FAIL, &result);
783 }
784
785 return result;
786 }
787
OHNativeImageUpdateSurfaceImageNullptr(napi_env env,napi_callback_info info)788 static napi_value OHNativeImageUpdateSurfaceImageNullptr(napi_env env, napi_callback_info info)
789 {
790 OH_NativeImage *nativeImage = getNativeImage();
791 napi_value result = nullptr;
792 int res = OH_NativeImage_UpdateSurfaceImage(nullptr);
793 if (res != 0) {
794 napi_create_int32(env, FAIL, &result);
795 } else {
796 napi_create_int32(env, SUCCESS, &result);
797 }
798 OH_NativeImage_Destroy(&nativeImage);
799 return result;
800 }
801
OHNativeImageGetTimestampNullptr(napi_env env,napi_callback_info info)802 static napi_value OHNativeImageGetTimestampNullptr(napi_env env, napi_callback_info info)
803 {
804 OH_NativeImage *nativeImage = getNativeImage();
805 napi_value result = nullptr;
806 int64_t timestamp = 0;
807 timestamp = OH_NativeImage_GetTimestamp(nullptr);
808 if (timestamp == 0) {
809 napi_create_int32(env, FAIL, &result);
810 } else {
811 napi_create_int32(env, SUCCESS, &result);
812 }
813 OH_NativeImage_Destroy(&nativeImage);
814 return result;
815 }
816
OHNativeImageGetTransformMatrixNullptr(napi_env env,napi_callback_info info)817 static napi_value OHNativeImageGetTransformMatrixNullptr(napi_env env, napi_callback_info info)
818 {
819 OH_NativeImage *nativeImage = getNativeImage();
820 napi_value result = nullptr;
821 float matrix[16];
822 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
823 napi_value result1 = nullptr;
824 napi_value result2 = nullptr;
825 int res1 = OH_NativeImage_GetTransformMatrix(nullptr, matrix);
826 if (res1 == 0) {
827 napi_create_int32(env, SUCCESS, &result1);
828 } else {
829 napi_create_int32(env, FAIL, &result1);
830 }
831 napi_set_element(env, result, ARR_NUMBER_0, result1);
832
833 int res2 = OH_NativeImage_GetTransformMatrix(nativeImage, NULL);
834 if (res2 == 0) {
835 napi_create_int32(env, SUCCESS, &result2);
836 } else {
837 napi_create_int32(env, FAIL, &result2);
838 }
839 napi_set_element(env, result, ARR_NUMBER_1, result2);
840
841 OH_NativeImage_Destroy(&nativeImage);
842 return result;
843 }
844
OHNativeImageGetTransformMatrixV2Nullptr(napi_env env,napi_callback_info info)845 static napi_value OHNativeImageGetTransformMatrixV2Nullptr(napi_env env, napi_callback_info info)
846 {
847 OH_NativeImage *nativeImage = getNativeImage();
848 napi_value result = nullptr;
849 float matrix[16];
850 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
851 napi_value result1 = nullptr;
852 napi_value result2 = nullptr;
853 int res1 = OH_NativeImage_GetTransformMatrixV2(nullptr, matrix);
854 if (res1 == 0) {
855 napi_create_int32(env, SUCCESS, &result1);
856 } else {
857 napi_create_int32(env, FAIL, &result1);
858 }
859 napi_set_element(env, result, ARR_NUMBER_0, result1);
860
861 int res2 = OH_NativeImage_GetTransformMatrixV2(nativeImage, NULL);
862 if (res2 == 0) {
863 napi_create_int32(env, SUCCESS, &result2);
864 } else {
865 napi_create_int32(env, FAIL, &result2);
866 }
867 napi_set_element(env, result, ARR_NUMBER_1, result2);
868
869 OH_NativeImage_Destroy(&nativeImage);
870 return result;
871 }
872
OHNativeImageUpdateSurfaceImageNormal(napi_env env,napi_callback_info info)873 static napi_value OHNativeImageUpdateSurfaceImageNormal(napi_env env, napi_callback_info info)
874 {
875 OH_NativeImage *nativeImage = nullptr;
876 napi_value result = nullptr;
877 GLenum nativeImageTexId_;
878 GLuint GL_TEXTURE_EXTERNAL_OES;
879 glBindTexture(GL_TEXTURE_EXTERNAL_OES, nativeImageTexId_);
880 nativeImage = OH_NativeImage_Create(nativeImageTexId_, GL_TEXTURE_EXTERNAL_OES);
881 int res = OH_NativeImage_UpdateSurfaceImage(nativeImage);
882 if (res == 0) {
883 napi_create_int32(env, SUCCESS, &result);
884 } else {
885 napi_create_int32(env, FAIL, &result);
886 }
887 OH_NativeImage_Destroy(&nativeImage);
888 return result;
889 }
890
OHNativeImageGetTimestampNormal(napi_env env,napi_callback_info info)891 static napi_value OHNativeImageGetTimestampNormal(napi_env env, napi_callback_info info)
892 {
893 OH_NativeImage *nativeImage = nullptr;
894 napi_value result = nullptr;
895 napi_create_array_with_length(env, ARR_NUMBER_3, &result);
896 napi_value result1 = nullptr;
897 napi_value result2 = nullptr;
898 GLenum nativeImageTexId_;
899 GLuint GL_TEXTURE_EXTERNAL_OES;
900 glBindTexture(GL_TEXTURE_EXTERNAL_OES, nativeImageTexId_);
901 nativeImage = OH_NativeImage_Create(nativeImageTexId_, GL_TEXTURE_EXTERNAL_OES);
902 int res = OH_NativeImage_UpdateSurfaceImage(nativeImage);
903
904 // 使用chrono获取当前时间点
905 auto now = std::chrono::system_clock::now();
906 // 将当前时间点转换为自1970年1月1日以来的毫秒数
907 auto duration = now.time_since_epoch();
908 auto current_timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
909 // 将chrono库获取的时间戳存储在int64_t类型的变量中
910 int64_t time = static_cast<int64_t>(current_timestamp);
911
912 int64_t timestamp = 0;
913 timestamp = OH_NativeImage_GetTimestamp(nativeImage);
914
915 if (res == 0) {
916 napi_create_int32(env, SUCCESS, &result1);
917 } else {
918 napi_create_int32(env, FAIL, &result1);
919 }
920 napi_set_element(env, result, ARR_NUMBER_0, result1);
921
922 if (timestamp == time) {
923 napi_create_int32(env, SUCCESS, &result2);
924 } else {
925 napi_create_int32(env, FAIL, &result2);
926 }
927 napi_set_element(env, result, ARR_NUMBER_1, result2);
928
929 napi_value result3 = nullptr;
930 int res1 = OH_NativeImage_UpdateSurfaceImage(nativeImage);
931
932 auto now1 = std::chrono::system_clock::now();
933 auto duration1 = now1.time_since_epoch();
934 auto current_timestamp1 = std::chrono::duration_cast<std::chrono::milliseconds>(duration1).count();
935 int64_t time1 = static_cast<int64_t>(current_timestamp);
936
937 int64_t timestamp1 = 0;
938 timestamp1 = OH_NativeImage_GetTimestamp(nativeImage);
939
940 if (res1 == 0 && current_timestamp1 == time1) {
941 napi_create_int32(env, SUCCESS, &result3);
942 } else {
943 napi_create_int32(env, FAIL, &result3);
944 }
945 napi_set_element(env, result, ARR_NUMBER_2, result3);
946
947 OH_NativeImage_Destroy(&nativeImage);
948 return result;
949 }
950
OHNativeImageGetTransformMatrixNormal(napi_env env,napi_callback_info info)951 static napi_value OHNativeImageGetTransformMatrixNormal(napi_env env, napi_callback_info info)
952 {
953 OH_NativeImage *nativeImage = nullptr;
954 GLenum nativeImageTexId_;
955 GLuint GL_TEXTURE_EXTERNAL_OES;
956 glBindTexture(GL_TEXTURE_EXTERNAL_OES, nativeImageTexId_);
957 nativeImage = OH_NativeImage_Create(nativeImageTexId_, GL_TEXTURE_EXTERNAL_OES);
958 float matrix[16];
959 float matrixNull[16] = {};
960 napi_value result = nullptr;
961 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
962 napi_value result1 = nullptr;
963 napi_value result2 = nullptr;
964
965 int res1 = OH_NativeImage_UpdateSurfaceImage(nativeImage);
966 if (res1 == 0) {
967 napi_create_int32(env, SUCCESS, &result1);
968 } else {
969 napi_create_int32(env, FAIL, &result1);
970 }
971 napi_set_element(env, result, ARR_NUMBER_0, result1);
972
973 OH_NativeImage_GetTransformMatrix(nativeImage, matrix);
974 if (memcmp(matrix, matrixNull, sizeof(matrix)) == 0) {
975 napi_create_int32(env, FAIL, &result2);
976 } else {
977 napi_create_int32(env, SUCCESS, &result2);
978 }
979 napi_set_element(env, result, ARR_NUMBER_1, result2);
980
981 OH_NativeImage_Destroy(&nativeImage);
982 return result;
983 }
984
OHNativeImageGetTransformMatrixV2Normal(napi_env env,napi_callback_info info)985 static napi_value OHNativeImageGetTransformMatrixV2Normal(napi_env env, napi_callback_info info)
986 {
987 OH_NativeImage *nativeImage = nullptr;
988 GLenum nativeImageTexId_;
989 GLuint GL_TEXTURE_EXTERNAL_OES;
990 glBindTexture(GL_TEXTURE_EXTERNAL_OES, nativeImageTexId_);
991 nativeImage = OH_NativeImage_Create(nativeImageTexId_, GL_TEXTURE_EXTERNAL_OES);
992 float matrixV2[16];
993 float matrixNull[16] = {};
994 napi_value result = nullptr;
995 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
996 napi_value result1 = nullptr;
997 napi_value result2 = nullptr;
998
999 int res1 = OH_NativeImage_UpdateSurfaceImage(nativeImage);
1000 if (res1 == 0) {
1001 napi_create_int32(env, SUCCESS, &result1);
1002 } else {
1003 napi_create_int32(env, FAIL, &result1);
1004 }
1005 napi_set_element(env, result, ARR_NUMBER_0, result1);
1006
1007 OH_NativeImage_GetTransformMatrixV2(nativeImage, matrixV2);
1008 if (memcmp(matrixV2, matrixNull, sizeof(matrixV2)) == 0) {
1009 napi_create_int32(env, FAIL, &result2);
1010 } else {
1011 napi_create_int32(env, SUCCESS, &result2);
1012 }
1013 napi_set_element(env, result, ARR_NUMBER_1, result2);
1014
1015 OH_NativeImage_Destroy(&nativeImage);
1016 return result;
1017 }
1018
OHNativeImageSetOnFrameAvailableListenerNullptr(napi_env env,napi_callback_info info)1019 static napi_value OHNativeImageSetOnFrameAvailableListenerNullptr(napi_env env, napi_callback_info info)
1020 {
1021 OH_NativeImage *nativeImage = nullptr;
1022 napi_value result = nullptr;
1023 OH_OnFrameAvailableListener listener;
1024 int res = OH_NativeImage_SetOnFrameAvailableListener(nullptr, listener);
1025 if (res == 0) {
1026 napi_create_int32(env, SUCCESS, &result);
1027 } else {
1028 napi_create_int32(env, FAIL, &result);
1029 }
1030 return result;
1031 }
1032
OHNativeImageUnSetOnFrameAvailableListenerNullptr(napi_env env,napi_callback_info info)1033 static napi_value OHNativeImageUnSetOnFrameAvailableListenerNullptr(napi_env env, napi_callback_info info)
1034 {
1035 napi_value result = nullptr;
1036 int res = OH_NativeImage_UnsetOnFrameAvailableListener(nullptr);
1037 if (res == 0) {
1038 napi_create_int32(env, SUCCESS, &result);
1039 } else {
1040 napi_create_int32(env, FAIL, &result);
1041 }
1042
1043 return result;
1044 }
1045
OHNativeImageSetOnFrameAvailableListenerNormal(napi_env env,napi_callback_info info)1046 static napi_value OHNativeImageSetOnFrameAvailableListenerNormal(napi_env env, napi_callback_info info)
1047 {
1048 OH_NativeImage *nativeImage1 = nullptr;
1049 nativeImage1 = OH_ConsumerSurface_Create();
1050 OH_OnFrameAvailableListener listener1;
1051 listener1.context = static_cast<void *>(nativeImage1);
1052 listener1.onFrameAvailable = OnFrameAvailable;
1053 napi_value result = nullptr;
1054 int res = OH_NativeImage_SetOnFrameAvailableListener(nativeImage1, listener1);
1055 if (res != 0) {
1056 napi_create_int32(env, FAIL, &result);
1057 return result;
1058 }
1059 napi_value result2 = nullptr;
1060 res = OH_NativeImage_SetOnFrameAvailableListener(nativeImage1, listener1);
1061 if (res != 0) {
1062 napi_create_int32(env, FAIL, &result);
1063 return result;
1064 }
1065 OH_NativeImage *nativeImage2 = nullptr;
1066 nativeImage2 = OH_ConsumerSurface_Create();
1067 OH_OnFrameAvailableListener listener2;
1068 listener2.context = static_cast<void *>(nativeImage1);
1069 listener2.onFrameAvailable = OnFrameAvailable;
1070 res = OH_NativeImage_SetOnFrameAvailableListener(nativeImage1, listener2);
1071 if (res != 0) {
1072 napi_create_int32(env, FAIL, &result);
1073 return result;
1074 }
1075 napi_value result4 = nullptr;
1076 res = OH_NativeImage_SetOnFrameAvailableListener(nativeImage2, listener1);
1077 if (res != 0) {
1078 napi_create_int32(env, FAIL, &result);
1079 return result;
1080 }
1081 napi_create_int32(env, SUCCESS, &result);
1082 OH_NativeImage_Destroy(&nativeImage1);
1083 OH_NativeImage_Destroy(&nativeImage2);
1084 return result;
1085 }
1086
OHNativeImageUnsetOnFrameAvailableListenerNormal(napi_env env,napi_callback_info info)1087 static napi_value OHNativeImageUnsetOnFrameAvailableListenerNormal(napi_env env, napi_callback_info info)
1088 {
1089 OH_NativeImage *nativeImage1 = getNativeImage();
1090 OH_OnFrameAvailableListener listener1;
1091 listener1.context = static_cast<void *>(nativeImage1);
1092 listener1.onFrameAvailable = OnFrameAvailable;
1093 napi_value result = nullptr;
1094 napi_create_array_with_length(env, ARR_NUMBER_3, &result);
1095 napi_value result1 = nullptr;
1096
1097 int res1 = OH_NativeImage_UnsetOnFrameAvailableListener(nativeImage1);
1098 if (res1 == 0) {
1099 napi_create_int32(env, SUCCESS, &result1);
1100 } else {
1101 napi_create_int32(env, FAIL, &result1);
1102 }
1103 napi_set_element(env, result, ARR_NUMBER_0, result1);
1104
1105 napi_value result2 = nullptr;
1106 int res2 = OH_NativeImage_SetOnFrameAvailableListener(nativeImage1, listener1);
1107 if (res2 == 0) {
1108 napi_create_int32(env, SUCCESS, &result2);
1109 } else {
1110 napi_create_int32(env, FAIL, &result2);
1111 }
1112 napi_set_element(env, result, ARR_NUMBER_1, result2);
1113
1114 napi_value result3 = nullptr;
1115 int res3 = OH_NativeImage_UnsetOnFrameAvailableListener(nativeImage1);
1116 if (res3 == 0) {
1117 napi_create_int32(env, SUCCESS, &result3);
1118 } else {
1119 napi_create_int32(env, FAIL, &result3);
1120 }
1121 napi_set_element(env, result, ARR_NUMBER_2, result3);
1122 OH_NativeImage_Destroy(&nativeImage1);
1123 return result;
1124 }
1125
OHNativeImageGetBufferMatrixNormal(napi_env env,napi_callback_info info)1126 static napi_value OHNativeImageGetBufferMatrixNormal(napi_env env, napi_callback_info info)
1127 {
1128 napi_value result = nullptr;
1129 InitNativeWindow *initNative = new InitNativeWindow();
1130 OH_NativeImage *image = initNative->returnNativeImage();
1131 initNative->OH_FlushBuffer();
1132 int32_t ret = OH_NativeImage_UpdateSurfaceImage(image);
1133 float matrix[16] = {-1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
1134 ret = OH_NativeImage_GetBufferMatrix(image, matrix);
1135 if (ret == 0) {
1136 napi_create_int32(env, SUCCESS, &result);
1137 } else {
1138 napi_create_int32(env, FAIL, &result);
1139 }
1140 OH_NativeImage_Destroy(&image);
1141 delete initNative;
1142 return result;
1143 }
1144
OHNativeImageGetBufferMatrixNormal01(napi_env env,napi_callback_info info)1145 static napi_value OHNativeImageGetBufferMatrixNormal01(napi_env env, napi_callback_info info)
1146 {
1147 napi_value result = nullptr;
1148 napi_value result1 = nullptr;
1149 napi_value result2 = nullptr;
1150 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1151 InitNativeWindow *initNative = new InitNativeWindow();
1152 OH_NativeImage *image = initNative->returnNativeImage();
1153 OH_OnFrameAvailableListener listener;
1154 listener.context = static_cast<void *>(image);
1155 listener.onFrameAvailable = OnFrameAvailable;
1156 int32_t ret = OH_NativeImage_SetOnFrameAvailableListener(image, listener);
1157 float matrix[16] = {-1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
1158 ret = OH_NativeImage_GetBufferMatrix(image, matrix);
1159 if (ret == 0) {
1160 napi_create_int32(env, SUCCESS, &result1);
1161 } else {
1162 napi_create_int32(env, ret, &result1);
1163 }
1164 napi_set_element(env, result, ARR_NUMBER_0, result1);
1165 initNative->OH_FlushBuffer();
1166 ret = OH_NativeImage_UpdateSurfaceImage(image);
1167 int32_t ret1 = OH_NativeImage_GetBufferMatrix(image, matrix);
1168 if (ret1 == 0) {
1169 napi_create_int32(env, SUCCESS, &result2);
1170 } else {
1171 napi_create_int32(env, ret1, &result2);
1172 }
1173 napi_set_element(env, result, ARR_NUMBER_1, result2);
1174 OH_NativeImage_Destroy(&image);
1175 delete initNative;
1176 return result;
1177 }
1178
OHNativeImageGetBufferMatrixAbNormal(napi_env env,napi_callback_info info)1179 static napi_value OHNativeImageGetBufferMatrixAbNormal(napi_env env, napi_callback_info info)
1180 {
1181 napi_value result = nullptr;
1182 napi_create_array_with_length(env, ARR_NUMBER_3, &result);
1183 OH_NativeImage *nativeImage = getNativeImage();
1184 float matrix[16];
1185 napi_value result1 = nullptr;
1186 int32_t ret = OH_NativeImage_GetBufferMatrix(nullptr, matrix);
1187 if (ret == 0) {
1188 napi_create_int32(env, SUCCESS, &result1);
1189 } else {
1190 napi_create_int32(env, ret, &result1);
1191 }
1192 napi_set_element(env, result, ARR_NUMBER_0, result1);
1193 napi_value result2 = nullptr;
1194 int32_t ret1 = OH_NativeImage_GetBufferMatrix(nativeImage, nullptr);
1195 if (ret1 == 0) {
1196 napi_create_int32(env, SUCCESS, &result2);
1197 } else {
1198 napi_create_int32(env, ret1, &result2);
1199 }
1200 napi_set_element(env, result, ARR_NUMBER_1, result2);
1201 napi_value result3 = nullptr;
1202 float matrix1[14];
1203 int32_t ret2 = OH_NativeImage_GetBufferMatrix(nativeImage, matrix1);
1204 if (ret2 == 0) {
1205 napi_create_int32(env, SUCCESS, &result3);
1206 } else {
1207 napi_create_int32(env, ret2, &result3);
1208 }
1209 napi_set_element(env, result, ARR_NUMBER_2, result3);
1210 OH_NativeImage_Destroy(&nativeImage);
1211 return result;
1212 }
1213
OHNativeImageGetBufferMatrixCall(napi_env env,napi_callback_info info)1214 static napi_value OHNativeImageGetBufferMatrixCall(napi_env env, napi_callback_info info)
1215 {
1216 napi_value result = nullptr;
1217 InitNativeWindow *initNative = new InitNativeWindow();
1218 OH_NativeImage *image = initNative->returnNativeImage();
1219 OH_OnFrameAvailableListener listener;
1220 listener.context = static_cast<void *>(image);
1221 listener.onFrameAvailable = OnFrameAvailable;
1222 int32_t ret = OH_NativeImage_SetOnFrameAvailableListener(image, listener);
1223 ret = initNative->OH_FlushBuffer();
1224 if (ret != 0) {
1225 napi_create_int32(env, ret, &result);
1226 return result;
1227 }
1228 ret = OH_NativeImage_UpdateSurfaceImage(image);
1229 if (ret != 0) {
1230 napi_create_int32(env, ret, &result);
1231 return result;
1232 }
1233 float matrix[16] = {-1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
1234 for (int i = 0; i < NUMBER_1000; i++) {
1235 int32_t flag = OH_NativeImage_GetBufferMatrix(image, matrix);
1236 if (flag == 0) {
1237 napi_create_int32(env, SUCCESS, &result);
1238 } else {
1239 napi_create_int32(env, (NUMBER_1000 * i) + ARR_NUMBER_1, &result);
1240 return result;
1241 }
1242 }
1243 OH_NativeImage_Destroy(&image);
1244 delete initNative;
1245 return result;
1246 }
1247
OHNativeImageAcquireNativeWindowBufferNormal(napi_env env,napi_callback_info info)1248 static napi_value OHNativeImageAcquireNativeWindowBufferNormal(napi_env env, napi_callback_info info)
1249 {
1250 napi_value result = nullptr;
1251 napi_value result1 = nullptr;
1252 napi_value result2 = nullptr;
1253 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1254 InitNativeWindow *initNative = new InitNativeWindow();
1255 OH_NativeImage *image = initNative->returnNativeImage();
1256 int32_t ret = initNative->OH_FlushBuffer();
1257 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1258 int fenceFd = -1;
1259 ret = OH_NativeImage_AcquireNativeWindowBuffer(image, &nativeWindowBuffer, &fenceFd);
1260 int32_t ret1 = OH_NativeImage_ReleaseNativeWindowBuffer(image, nativeWindowBuffer, fenceFd);
1261 if (ret == 0) {
1262 napi_create_int32(env, SUCCESS, &result1);
1263 } else {
1264 napi_create_int32(env, ret, &result1);
1265 }
1266 napi_set_element(env, result, ARR_NUMBER_0, result1);
1267 if (ret1 == 0) {
1268 napi_create_int32(env, SUCCESS, &result2);
1269 } else {
1270 napi_create_int32(env, ret1, &result2);
1271 }
1272 napi_set_element(env, result, ARR_NUMBER_1, result2);
1273 OH_NativeImage_Destroy(&image);
1274 delete initNative;
1275 return result;
1276 }
1277
OHNativeImageAcquireNativeWindowBufferCall(napi_env env,napi_callback_info info)1278 static napi_value OHNativeImageAcquireNativeWindowBufferCall(napi_env env, napi_callback_info info)
1279 {
1280 napi_value result = nullptr;
1281 napi_value result1 = nullptr;
1282 napi_value result2 = nullptr;
1283 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1284 InitNativeWindow *initNative = new InitNativeWindow();
1285 OH_NativeImage *image = initNative->returnNativeImage();
1286 int32_t ret = initNative->OH_FlushBuffer();
1287 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1288 int fenceFd = -1;
1289 int num = 10;
1290 for (int i = 0; i < num; i++) {
1291 ret = OH_NativeImage_AcquireNativeWindowBuffer(image, &nativeWindowBuffer, &fenceFd);
1292 }
1293 int32_t ret1 = OH_NativeImage_ReleaseNativeWindowBuffer(image, nativeWindowBuffer, fenceFd);
1294 if (ret == 0) {
1295 napi_create_int32(env, SUCCESS, &result1);
1296 } else {
1297 napi_create_int32(env, FAIL, &result1);
1298 }
1299 napi_set_element(env, result, ARR_NUMBER_0, result1);
1300 if (ret1 == 0) {
1301 napi_create_int32(env, SUCCESS, &result2);
1302 } else {
1303 napi_create_int32(env, FAIL, &result2);
1304 }
1305 napi_set_element(env, result, ARR_NUMBER_1, result2);
1306 OH_NativeImage_Destroy(&image);
1307 delete initNative;
1308 return result;
1309 }
1310
OHNativeImageAcquireNativeWindowBufferAbNormal01(napi_env env,napi_callback_info info)1311 static napi_value OHNativeImageAcquireNativeWindowBufferAbNormal01(napi_env env, napi_callback_info info)
1312 {
1313 napi_value result = nullptr;
1314 napi_value result1 = nullptr;
1315 napi_value result2 = nullptr;
1316 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1317 InitNativeWindow *initNative = new InitNativeWindow();
1318 OH_NativeImage *image = initNative->returnNativeImage();
1319 int32_t ret = initNative->OH_FlushBuffer();
1320 OHNativeWindowBuffer *nativeWindowBuffer = 0;
1321 int fenceFd = -1;
1322 ret = OH_NativeImage_AcquireNativeWindowBuffer(image, &nativeWindowBuffer, &fenceFd);
1323 int32_t ret1 = OH_NativeImage_ReleaseNativeWindowBuffer(image, 0, fenceFd);
1324 if (ret == 0) {
1325 napi_create_int32(env, SUCCESS, &result1);
1326 } else {
1327 napi_create_int32(env, FAIL, &result1);
1328 }
1329 napi_set_element(env, result, ARR_NUMBER_0, result1);
1330 if (ret1 == 0) {
1331 napi_create_int32(env, SUCCESS, &result2);
1332 } else {
1333 napi_create_int32(env, FAIL, &result2);
1334 }
1335 napi_set_element(env, result, ARR_NUMBER_1, result2);
1336 OH_NativeImage_Destroy(&image);
1337 delete initNative;
1338 return result;
1339 }
1340
OHNativeImageAcquireNativeWindowBufferAbNormal02(napi_env env,napi_callback_info info)1341 static napi_value OHNativeImageAcquireNativeWindowBufferAbNormal02(napi_env env, napi_callback_info info)
1342 {
1343 napi_value result = nullptr;
1344 napi_value result1 = nullptr;
1345 napi_value result2 = nullptr;
1346 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1347 InitNativeWindow *initNative = new InitNativeWindow();
1348 OH_NativeImage *image = initNative->returnNativeImage();
1349 int32_t ret = initNative->OH_FlushBuffer();
1350 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1351 int fenceFd = -1;
1352 ret = OH_NativeImage_AcquireNativeWindowBuffer(nullptr, &nativeWindowBuffer, &fenceFd);
1353 int32_t ret1 = OH_NativeImage_ReleaseNativeWindowBuffer(nullptr, nativeWindowBuffer, fenceFd);
1354 if (ret == 0) {
1355 napi_create_int32(env, SUCCESS, &result1);
1356 } else {
1357 napi_create_int32(env, FAIL, &result1);
1358 }
1359 napi_set_element(env, result, ARR_NUMBER_0, result1);
1360 if (ret1 == 0) {
1361 napi_create_int32(env, SUCCESS, &result2);
1362 } else {
1363 napi_create_int32(env, FAIL, &result2);
1364 }
1365 napi_set_element(env, result, ARR_NUMBER_1, result2);
1366 OH_NativeImage_Destroy(&image);
1367 delete initNative;
1368 return result;
1369 }
1370
OHNativeImageAcquireNativeWindowBufferAbNormal03(napi_env env,napi_callback_info info)1371 static napi_value OHNativeImageAcquireNativeWindowBufferAbNormal03(napi_env env, napi_callback_info info)
1372 {
1373 napi_value result = nullptr;
1374 napi_value result1 = nullptr;
1375 napi_value result2 = nullptr;
1376 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1377 InitNativeWindow *initNative = new InitNativeWindow();
1378 OH_NativeImage *image = initNative->returnNativeImage();
1379 int32_t ret = initNative->OH_FlushBuffer();
1380 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1381 int fenceFd = -1;
1382 image = 0;
1383 ret = OH_NativeImage_AcquireNativeWindowBuffer(image, &nativeWindowBuffer, &fenceFd);
1384 int32_t ret1 = OH_NativeImage_ReleaseNativeWindowBuffer(image, nativeWindowBuffer, fenceFd);
1385 if (ret == 0) {
1386 napi_create_int32(env, SUCCESS, &result1);
1387 } else {
1388 napi_create_int32(env, FAIL, &result1);
1389 }
1390 napi_set_element(env, result, ARR_NUMBER_0, result1);
1391 if (ret1 == 0) {
1392 napi_create_int32(env, SUCCESS, &result2);
1393 } else {
1394 napi_create_int32(env, FAIL, &result2);
1395 }
1396 napi_set_element(env, result, ARR_NUMBER_1, result2);
1397 OH_NativeImage_Destroy(&image);
1398 delete initNative;
1399 return result;
1400 }
1401
OHNativeImageAcquireNativeWindowBufferAbNormal04(napi_env env,napi_callback_info info)1402 static napi_value OHNativeImageAcquireNativeWindowBufferAbNormal04(napi_env env, napi_callback_info info)
1403 {
1404 napi_value result = nullptr;
1405 napi_value result1 = nullptr;
1406 napi_value result2 = nullptr;
1407 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1408 InitNativeWindow *initNative = new InitNativeWindow();
1409 OH_NativeImage *image = initNative->returnNativeImage();
1410 int32_t ret = initNative->OH_FlushBuffer();
1411 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1412 int fenceFd = -1;
1413 int fenceFdTest = 0;
1414 ret = OH_NativeImage_AcquireNativeWindowBuffer(image, &nativeWindowBuffer, &fenceFdTest);
1415 ret = OH_NativeImage_AcquireNativeWindowBuffer(image, &nativeWindowBuffer, &fenceFd);
1416 int32_t ret1 = OH_NativeImage_ReleaseNativeWindowBuffer(image, nativeWindowBuffer, fenceFdTest);
1417 if (ret == 0) {
1418 napi_create_int32(env, SUCCESS, &result1);
1419 } else {
1420 napi_create_int32(env, FAIL, &result1);
1421 }
1422 napi_set_element(env, result, ARR_NUMBER_0, result1);
1423 if (ret1 == 0) {
1424 napi_create_int32(env, SUCCESS, &result2);
1425 } else {
1426 napi_create_int32(env, FAIL, &result2);
1427 }
1428 napi_set_element(env, result, ARR_NUMBER_1, result2);
1429 OH_NativeImage_Destroy(&image);
1430 delete initNative;
1431 return result;
1432 }
1433
OHNativeImageAcquireNativeWindowBufferAbNormal05(napi_env env,napi_callback_info info)1434 static napi_value OHNativeImageAcquireNativeWindowBufferAbNormal05(napi_env env, napi_callback_info info)
1435 {
1436 napi_value result = nullptr;
1437 napi_value result1 = nullptr;
1438 napi_value result2 = nullptr;
1439 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1440 InitNativeWindow *initNative = new InitNativeWindow();
1441 OH_NativeImage *image = initNative->returnNativeImage();
1442 int32_t ret = initNative->OH_FlushBuffer();
1443 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1444 int fenceFd = -1;
1445 ret = OH_NativeImage_ReleaseNativeWindowBuffer(image, nativeWindowBuffer, fenceFd);
1446 int32_t ret1 = OH_NativeImage_AcquireNativeWindowBuffer(image, &nativeWindowBuffer, &fenceFd);
1447 if (ret == 0) {
1448 napi_create_int32(env, SUCCESS, &result1);
1449 } else {
1450 napi_create_int32(env, FAIL, &result1);
1451 }
1452 napi_set_element(env, result, ARR_NUMBER_0, result1);
1453 if (ret1 == 0) {
1454 napi_create_int32(env, SUCCESS, &result2);
1455 } else {
1456 napi_create_int32(env, FAIL, &result2);
1457 }
1458 napi_set_element(env, result, ARR_NUMBER_1, result2);
1459 OH_NativeImage_Destroy(&image);
1460 delete initNative;
1461 return result;
1462 }
1463
OHNativeImageReleaseNativeWindowBufferAbnormal(napi_env env,napi_callback_info info)1464 static napi_value OHNativeImageReleaseNativeWindowBufferAbnormal(napi_env env, napi_callback_info info)
1465 {
1466 napi_value result = nullptr;
1467 InitNativeWindow *initNative = new InitNativeWindow();
1468 OH_NativeImage *image = initNative->returnNativeImage();
1469 int32_t ret = initNative->OH_FlushBuffer();
1470 OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
1471 int fenceFd = -1;
1472 ret = OH_NativeImage_ReleaseNativeWindowBuffer(image, nativeWindowBuffer, fenceFd);
1473 if (ret == 0) {
1474 napi_create_int32(env, SUCCESS, &result);
1475 } else {
1476 napi_create_int32(env, FAIL, &result);
1477 }
1478 OH_NativeImage_Destroy(&image);
1479 delete initNative;
1480 return result;
1481 }
1482
OHConsumerSurfaceSetDefaultUsageNormal(napi_env env,napi_callback_info info)1483 static napi_value OHConsumerSurfaceSetDefaultUsageNormal(napi_env env, napi_callback_info info)
1484 {
1485 napi_value result = nullptr;
1486 napi_value result1 = nullptr;
1487 napi_value result2 = nullptr;
1488 napi_value result3 = nullptr;
1489 uint64_t num1 = 0, num2 = 1000, num3 = UINT64_MAX - 1;
1490 napi_create_array_with_length(env, ARR_NUMBER_3, &result);
1491 OH_NativeImage *image = OH_ConsumerSurface_Create();
1492 int32_t ret = OH_ConsumerSurface_SetDefaultUsage(image, num1);
1493 napi_create_int32(env, ret, &result1);
1494 napi_set_element(env, result, ARR_NUMBER_0, result1);
1495 int32_t ret1 = OH_ConsumerSurface_SetDefaultUsage(image, num2);
1496 napi_create_int32(env, ret1, &result2);
1497 napi_set_element(env, result, ARR_NUMBER_1, result2);
1498 int32_t ret2 = OH_ConsumerSurface_SetDefaultUsage(image, num3);
1499 napi_create_int32(env, ret2, &result3);
1500 napi_set_element(env, result, ARR_NUMBER_2, result3);
1501 OH_NativeImage_Destroy(&image);
1502 return result;
1503 }
1504
OHConsumerSurfaceSetDefaultUsageCall(napi_env env,napi_callback_info info)1505 static napi_value OHConsumerSurfaceSetDefaultUsageCall(napi_env env, napi_callback_info info)
1506 {
1507 napi_value result = nullptr;
1508 napi_value result1 = nullptr;
1509 napi_value result2 = nullptr;
1510 uint64_t num = 100;
1511 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1512 OH_NativeImage *image = OH_ConsumerSurface_Create();
1513 uint64_t usage[] = {0, 1000, UINT64_MAX - 1};
1514 for (int i = 0; i < ARR_NUMBER_3; i++) {
1515 usage[i] += 1;
1516 int32_t ret1 = OH_ConsumerSurface_SetDefaultUsage(image, usage[i]);
1517 napi_create_int32(env, ret1, &result1);
1518 }
1519 napi_set_element(env, result, ARR_NUMBER_0, result1);
1520 for (int i = 0; i < NUMBER_100000; i++) {
1521 int32_t ret2 = OH_ConsumerSurface_SetDefaultUsage(image, num);
1522 napi_create_int32(env, ret2, &result2);
1523 }
1524 napi_set_element(env, result, ARR_NUMBER_1, result2);
1525 OH_NativeImage_Destroy(&image);
1526 return result;
1527 }
1528
OHConsumerSurfaceSetDefaultUsageAbNormal(napi_env env,napi_callback_info info)1529 static napi_value OHConsumerSurfaceSetDefaultUsageAbNormal(napi_env env, napi_callback_info info)
1530 {
1531 napi_value result = nullptr;
1532 napi_value result1 = nullptr;
1533 napi_value result2 = nullptr;
1534 napi_value result3 = nullptr;
1535 napi_value result4 = nullptr;
1536 napi_value result5 = nullptr;
1537 uint64_t num = 100;
1538 napi_create_array_with_length(env, ARR_NUMBER_5, &result);
1539 OH_NativeImage *image = OH_ConsumerSurface_Create();
1540 int32_t ret = OH_ConsumerSurface_SetDefaultUsage(image, -ARR_NUMBER_1);
1541 napi_create_int32(env, ret, &result1);
1542 napi_set_element(env, result, ARR_NUMBER_0, result1);
1543 int32_t ret1 = OH_ConsumerSurface_SetDefaultUsage(image, -NUMBER_1000);
1544 napi_create_int32(env, ret1, &result2);
1545 napi_set_element(env, result, ARR_NUMBER_1, result2);
1546 int32_t ret2 = OH_ConsumerSurface_SetDefaultUsage(image, UINT64_MAX);
1547 napi_create_int32(env, ret2, &result3);
1548 napi_set_element(env, result, ARR_NUMBER_2, result3);
1549 int32_t ret3 = OH_ConsumerSurface_SetDefaultUsage(image, -UINT64_MAX);
1550 napi_create_int32(env, ret3, &result4);
1551 napi_set_element(env, result, ARR_NUMBER_3, result4);
1552 int32_t ret4 = OH_ConsumerSurface_SetDefaultUsage(nullptr, num);
1553 napi_create_int32(env, ret4, &result5);
1554 napi_set_element(env, result, ARR_NUMBER_4, result5);
1555 OH_NativeImage_Destroy(&image);
1556 return result;
1557 }
1558
OHConsumerSurfaceSetDefaultSizeNormal(napi_env env,napi_callback_info info)1559 static napi_value OHConsumerSurfaceSetDefaultSizeNormal(napi_env env, napi_callback_info info)
1560 {
1561 napi_value result = nullptr;
1562 napi_value result1 = nullptr;
1563 napi_value result2 = nullptr;
1564 napi_value result3 = nullptr;
1565 napi_value result4 = nullptr;
1566 napi_value result5 = nullptr;
1567 napi_value result6 = nullptr;
1568 napi_create_array_with_length(env, ARR_NUMBER_6, &result);
1569 OH_NativeImage *image = OH_ConsumerSurface_Create();
1570 int32_t res = 1 << 16;
1571 int32_t num1 = 100, num2 = 10000;
1572 int32_t ret = OH_ConsumerSurface_SetDefaultSize(image, ARR_NUMBER_1, ARR_NUMBER_1);
1573 napi_create_int32(env, ret, &result1);
1574 napi_set_element(env, result, ARR_NUMBER_0, result1);
1575 int32_t ret1 = OH_ConsumerSurface_SetDefaultSize(image, ARR_NUMBER_1, res - ARR_NUMBER_1);
1576 napi_create_int32(env, ret1, &result2);
1577 napi_set_element(env, result, ARR_NUMBER_1, result2);
1578 int32_t ret2 = OH_ConsumerSurface_SetDefaultSize(image, res - ARR_NUMBER_1, ARR_NUMBER_1);
1579 napi_create_int32(env, ret2, &result3);
1580 napi_set_element(env, result, ARR_NUMBER_2, result3);
1581 int32_t ret3 = OH_ConsumerSurface_SetDefaultSize(image, num1, num1);
1582 napi_create_int32(env, ret3, &result4);
1583 napi_set_element(env, result, ARR_NUMBER_3, result4);
1584 int32_t ret4 = OH_ConsumerSurface_SetDefaultSize(image, num2, num2);
1585 napi_create_int32(env, ret4, &result5);
1586 napi_set_element(env, result, ARR_NUMBER_4, result5);
1587 int32_t ret5 = OH_ConsumerSurface_SetDefaultSize(image, res - ARR_NUMBER_1, res - ARR_NUMBER_1);
1588 napi_create_int32(env, ret5, &result6);
1589 napi_set_element(env, result, ARR_NUMBER_5, result6);
1590 OH_NativeImage_Destroy(&image);
1591 return result;
1592 }
1593
OHConsumerSurfaceSetDefaultSizeCall(napi_env env,napi_callback_info info)1594 static napi_value OHConsumerSurfaceSetDefaultSizeCall(napi_env env, napi_callback_info info)
1595 {
1596 napi_value result = nullptr;
1597 napi_value result1 = nullptr;
1598 napi_value result2 = nullptr;
1599 napi_create_array_with_length(env, ARR_NUMBER_2, &result);
1600 OH_NativeImage *image = OH_ConsumerSurface_Create();
1601 int32_t w[] = {1, 100, 10000};
1602 int32_t h[] = {1, 100, 10000};
1603 for (int i = 0; i < ARR_NUMBER_3; i++) {
1604 w[i] += 1;
1605 h[i] += 1;
1606 int32_t ret = OH_ConsumerSurface_SetDefaultSize(image, w[i], h[i]);
1607 napi_create_int32(env, ret, &result1);
1608 }
1609 napi_set_element(env, result, ARR_NUMBER_0, result1);
1610 for (int i = 0; i < NUMBER_100000; i++) {
1611 int32_t ret1 = OH_ConsumerSurface_SetDefaultSize(image, ARR_NUMBER_1, ARR_NUMBER_1);
1612 napi_create_int32(env, ret1, &result2);
1613 }
1614 napi_set_element(env, result, ARR_NUMBER_1, result1);
1615 OH_NativeImage_Destroy(&image);
1616 return result;
1617 }
1618
OHConsumerSurfaceSetDefaultSizeAbNormal(napi_env env,napi_callback_info info)1619 static napi_value OHConsumerSurfaceSetDefaultSizeAbNormal(napi_env env, napi_callback_info info)
1620 {
1621 napi_value result = nullptr;
1622 napi_value result1 = nullptr;
1623 napi_value result2 = nullptr;
1624 napi_value result3 = nullptr;
1625 napi_value result4 = nullptr;
1626 napi_value result5 = nullptr;
1627 int32_t num1 = 0, num2 = 1, num3 = 1000;
1628 napi_create_array_with_length(env, ARR_NUMBER_5, &result);
1629 OH_NativeImage *image = OH_ConsumerSurface_Create();
1630 int32_t ret = OH_ConsumerSurface_SetDefaultSize(image, num2, num1);
1631 napi_create_int32(env, ret, &result1);
1632 napi_set_element(env, result, ARR_NUMBER_0, result1);
1633 int32_t ret1 = OH_ConsumerSurface_SetDefaultSize(image, -num2, num1);
1634 napi_create_int32(env, ret1, &result2);
1635 napi_set_element(env, result, ARR_NUMBER_1, result2);
1636 int32_t ret2 = OH_ConsumerSurface_SetDefaultSize(image, num1, -num2);
1637 napi_create_int32(env, ret2, &result3);
1638 napi_set_element(env, result, ARR_NUMBER_2, result3);
1639 int32_t ret3 = OH_ConsumerSurface_SetDefaultSize(image, -num3, -num3);
1640 napi_create_int32(env, ret3, &result4);
1641 napi_set_element(env, result, ARR_NUMBER_3, result4);
1642 int32_t ret4 = OH_ConsumerSurface_SetDefaultSize(image, num3, -num3);
1643 napi_create_int32(env, ret4, &result5);
1644 napi_set_element(env, result, ARR_NUMBER_4, result5);
1645 OH_NativeImage_Destroy(&image);
1646 return result;
1647 }
1648
OHConsumerSurfaceSetDefaultSizeAbNormal01(napi_env env,napi_callback_info info)1649 static napi_value OHConsumerSurfaceSetDefaultSizeAbNormal01(napi_env env, napi_callback_info info)
1650 {
1651 napi_value result = nullptr;
1652 napi_value result1 = nullptr;
1653 napi_value result2 = nullptr;
1654 napi_value result3 = nullptr;
1655 napi_value result4 = nullptr;
1656 napi_value result5 = nullptr;
1657 int32_t num1 = 1, num2 = 100;
1658 napi_create_array_with_length(env, ARR_NUMBER_5, &result);
1659 OH_NativeImage *image = OH_ConsumerSurface_Create();
1660 int32_t res = 1 << 16;
1661 int32_t ret = OH_ConsumerSurface_SetDefaultSize(image, -res, num2);
1662 napi_create_int32(env, ret, &result1);
1663 napi_set_element(env, result, ARR_NUMBER_0, result1);
1664 int32_t ret1 = OH_ConsumerSurface_SetDefaultSize(image, -num2, res - num1);
1665 napi_create_int32(env, ret1, &result2);
1666 napi_set_element(env, result, ARR_NUMBER_1, result2);
1667 int32_t ret2 = OH_ConsumerSurface_SetDefaultSize(image, -res, -res);
1668 napi_create_int32(env, ret2, &result3);
1669 napi_set_element(env, result, ARR_NUMBER_2, result3);
1670 int32_t ret3 = OH_ConsumerSurface_SetDefaultSize(image, res + num1, res + num1);
1671 napi_create_int32(env, ret3, &result4);
1672 napi_set_element(env, result, ARR_NUMBER_3, result4);
1673 int32_t ret4 = OH_ConsumerSurface_SetDefaultSize(nullptr, num2, num2);
1674 napi_create_int32(env, ret4, &result5);
1675 napi_set_element(env, result, ARR_NUMBER_4, result5);
1676 OH_NativeImage_Destroy(&image);
1677 return result;
1678 }
1679
NativeImageInit(napi_env env,napi_value exports)1680 napi_value NativeImageInit(napi_env env, napi_value exports)
1681 {
1682 napi_property_descriptor desc[] = {
1683 {"oHNativeImageCreate", nullptr, OHNativeImageCreate, nullptr, nullptr, nullptr, napi_default, nullptr},
1684 {"oHNativeImageAcquireNativeWindow", nullptr, OHNativeImageAcquireNativeWindow, nullptr, nullptr, nullptr,
1685 napi_default, nullptr},
1686 {"oHNativeImageAcquireNativeWindowAbnormal", nullptr, OHNativeImageAcquireNativeWindowAbnormal, nullptr,
1687 nullptr, nullptr, napi_default, nullptr},
1688 {"oHNativeImageAttachContext", nullptr, OHNativeImageAttachContext, nullptr, nullptr, nullptr, napi_default,
1689 nullptr},
1690 {"oHNativeImageAttachContextAbnormal", nullptr, OHNativeImageAttachContextAbnormal, nullptr, nullptr, nullptr,
1691 napi_default, nullptr},
1692 {"oHNativeImageDetachContext", nullptr, OHNativeImageDetachContext, nullptr, nullptr, nullptr, napi_default,
1693 nullptr},
1694 {"oHNativeImageDetachContextAbnormal", nullptr, OHNativeImageDetachContextAbnormal, nullptr, nullptr, nullptr,
1695 napi_default, nullptr},
1696 {"oHNativeImageUpdateSurfaceImage", nullptr, OHNativeImageUpdateSurfaceImage, nullptr, nullptr, nullptr,
1697 napi_default, nullptr},
1698 {"oHNativeImageUpdateSurfaceImageBoundary", nullptr, OHNativeImageUpdateSurfaceImageBoundary, nullptr,
1699 nullptr, nullptr, napi_default, nullptr},
1700 {"oHNativeImageUpdateSurfaceImageAbnormal", nullptr, OHNativeImageUpdateSurfaceImageAbnormal, nullptr, nullptr,
1701 nullptr, napi_default, nullptr},
1702 {"oHNativeImageGetTimestamp", nullptr, OHNativeImageGetTimestamp, nullptr, nullptr, nullptr, napi_default,
1703 nullptr},
1704 {"oHNativeImageGetTransformMatrix", nullptr, OHNativeImageGetTransformMatrix, nullptr, nullptr, nullptr,
1705 napi_default, nullptr},
1706 {"oHNativeImageGetTransformMatrixAbnormal", nullptr, OHNativeImageGetTransformMatrixAbnormal, nullptr, nullptr,
1707 nullptr, napi_default, nullptr},
1708 {"oHNativeImageDestroy", nullptr, OHNativeImageDestroy, nullptr, nullptr, nullptr, napi_default, nullptr},
1709 {"oHNativeImageCreateNormal", nullptr, OHNativeImageCreateNormal, nullptr, nullptr, nullptr, napi_default,
1710 nullptr},
1711 {"oHNativeImageCreateAbnormal", nullptr, OHNativeImageCreateAbnormal, nullptr, nullptr, nullptr, napi_default,
1712 nullptr},
1713 {"oHNativeImageDestroy1", nullptr, OHNativeImageDestroy1, nullptr, nullptr, nullptr, napi_default, nullptr},
1714 {"oHNativeImageCreateMuch", nullptr, OHNativeImageCreateMuch, nullptr, nullptr, nullptr, napi_default, nullptr},
1715 };
1716 napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc);
1717 return exports;
1718 }
1719
NativeImageInit2(napi_env env,napi_value exports)1720 static napi_value NativeImageInit2(napi_env env, napi_value exports)
1721 {
1722 napi_property_descriptor desc[] = {
1723 {"oHNativeImageGetBufferMatrixNormal", nullptr, OHNativeImageGetBufferMatrixNormal, nullptr, nullptr, nullptr,
1724 napi_default, nullptr},
1725 {"oHNativeImageGetBufferMatrixNormal01", nullptr, OHNativeImageGetBufferMatrixNormal01, nullptr, nullptr,
1726 nullptr, napi_default, nullptr},
1727 {"oHNativeImageGetBufferMatrixAbNormal", nullptr, OHNativeImageGetBufferMatrixAbNormal, nullptr, nullptr,
1728 nullptr, napi_default, nullptr},
1729 {"oHNativeImageGetBufferMatrixCall", nullptr, OHNativeImageGetBufferMatrixCall, nullptr, nullptr, nullptr,
1730 napi_default, nullptr},
1731 {"oHNativeImageAcquireNativeWindowBufferNormal", nullptr, OHNativeImageAcquireNativeWindowBufferNormal, nullptr,
1732 nullptr, nullptr, napi_default, nullptr},
1733 {"oHNativeImageAcquireNativeWindowBufferCall", nullptr, OHNativeImageAcquireNativeWindowBufferCall, nullptr,
1734 nullptr, nullptr, napi_default, nullptr},
1735 {"oHNativeImageAcquireNativeWindowBufferAbNormal01", nullptr, OHNativeImageAcquireNativeWindowBufferAbNormal01,
1736 nullptr, nullptr, nullptr, napi_default, nullptr},
1737 {"oHNativeImageAcquireNativeWindowBufferAbNormal02", nullptr, OHNativeImageAcquireNativeWindowBufferAbNormal02,
1738 nullptr, nullptr, nullptr, napi_default, nullptr},
1739 {"oHNativeImageAcquireNativeWindowBufferAbNormal03", nullptr, OHNativeImageAcquireNativeWindowBufferAbNormal03,
1740 nullptr, nullptr, nullptr, napi_default, nullptr},
1741 {"oHNativeImageAcquireNativeWindowBufferAbNormal04", nullptr, OHNativeImageAcquireNativeWindowBufferAbNormal04,
1742 nullptr, nullptr, nullptr, napi_default, nullptr},
1743 {"oHNativeImageAcquireNativeWindowBufferAbNormal05", nullptr, OHNativeImageAcquireNativeWindowBufferAbNormal05,
1744 nullptr, nullptr, nullptr, napi_default, nullptr},
1745 {"oHNativeImageReleaseNativeWindowBufferAbnormal", nullptr, OHNativeImageReleaseNativeWindowBufferAbnormal,
1746 nullptr, nullptr, nullptr, napi_default, nullptr},
1747 {"oHConsumerSurfaceSetDefaultUsageNormal", nullptr, OHConsumerSurfaceSetDefaultUsageNormal, nullptr, nullptr,
1748 nullptr, napi_default, nullptr},
1749 {"oHConsumerSurfaceSetDefaultUsageCall", nullptr, OHConsumerSurfaceSetDefaultUsageCall, nullptr, nullptr,
1750 nullptr, napi_default, nullptr},
1751 {"oHConsumerSurfaceSetDefaultUsageAbNormal", nullptr, OHConsumerSurfaceSetDefaultUsageAbNormal, nullptr,
1752 nullptr, nullptr, napi_default, nullptr},
1753 {"oHConsumerSurfaceSetDefaultSizeNormal", nullptr, OHConsumerSurfaceSetDefaultSizeNormal, nullptr, nullptr,
1754 nullptr, napi_default, nullptr},
1755 {"oHConsumerSurfaceSetDefaultSizeCall", nullptr, OHConsumerSurfaceSetDefaultSizeCall, nullptr, nullptr, nullptr,
1756 napi_default, nullptr},
1757 {"oHConsumerSurfaceSetDefaultSizeAbNormal", nullptr, OHConsumerSurfaceSetDefaultSizeAbNormal, nullptr, nullptr,
1758 nullptr, napi_default, nullptr},
1759 {"oHConsumerSurfaceSetDefaultSizeAbNormal01", nullptr, OHConsumerSurfaceSetDefaultSizeAbNormal01, nullptr,
1760 nullptr, nullptr, napi_default, nullptr},
1761 };
1762 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
1763 return exports;
1764 }
1765
1766
1767 EXTERN_C_START
Init(napi_env env,napi_value exports)1768 static napi_value Init(napi_env env, napi_value exports)
1769 {
1770 NativeImageInit(env, exports);
1771 NativeImageInit2(env, exports);
1772 napi_property_descriptor desc[] = {
1773 {"oHNativeImageAcquireNativeWindowNullptr", nullptr, OHNativeImageAcquireNativeWindowNullptr, nullptr, nullptr,
1774 nullptr, napi_default, nullptr},
1775 {"oHNativeImageAcquireNativeWindowNormal", nullptr, OHNativeImageAcquireNativeWindowNormal, nullptr, nullptr,
1776 nullptr, napi_default, nullptr},
1777 {"oHNativeImageAttachContextNullptr", nullptr, OHNativeImageAttachContextNullptr, nullptr, nullptr, nullptr,
1778 napi_default, nullptr},
1779 {"oHNativeImageDetachContextNullptr", nullptr, OHNativeImageDetachContextNullptr, nullptr, nullptr, nullptr,
1780 napi_default, nullptr},
1781 {"oHNativeImageAttachContextNormal", nullptr, OHNativeImageAttachContextNormal, nullptr, nullptr, nullptr,
1782 napi_default, nullptr},
1783 {"oHNativeImageDetachContextNormal", nullptr, OHNativeImageDetachContextNormal, nullptr, nullptr, nullptr,
1784 napi_default, nullptr},
1785 {"oHNativeImageGetSurfaceIdNullptr", nullptr, OHNativeImageGetSurfaceIdNullptr, nullptr, nullptr, nullptr,
1786 napi_default, nullptr},
1787 {"oHNativeGetSurfaceIdNormal", nullptr, OHNativeGetSurfaceIdNormal, nullptr, nullptr, nullptr, napi_default,
1788 nullptr},
1789 {"oHNativeImageUpdateSurfaceImageNullptr", nullptr, OHNativeImageUpdateSurfaceImageNullptr, nullptr, nullptr,
1790 nullptr, napi_default, nullptr},
1791 {"oHNativeImageGetTimestampNullptr", nullptr, OHNativeImageGetTimestampNullptr, nullptr, nullptr, nullptr,
1792 napi_default, nullptr},
1793 {"oHNativeImageGetTransformMatrixNullptr", nullptr, OHNativeImageGetTransformMatrixNullptr, nullptr, nullptr,
1794 nullptr, napi_default, nullptr},
1795 {"oHNativeImageGetTransformMatrixV2Nullptr", nullptr, OHNativeImageGetTransformMatrixV2Nullptr, nullptr,
1796 nullptr, nullptr, napi_default, nullptr},
1797 {"oHNativeImageUpdateSurfaceImageNormal", nullptr, OHNativeImageUpdateSurfaceImageNormal, nullptr, nullptr,
1798 nullptr, napi_default, nullptr},
1799 {"oHNativeImageGetTimestampNormal", nullptr, OHNativeImageGetTimestampNormal, nullptr, nullptr, nullptr,
1800 napi_default, nullptr},
1801 {"oHNativeImageGetTransformMatrixNormal", nullptr, OHNativeImageGetTransformMatrixNormal, nullptr, nullptr,
1802 nullptr, napi_default, nullptr},
1803 {"oHNativeImageGetTransformMatrixV2Normal", nullptr, OHNativeImageGetTransformMatrixV2Normal, nullptr, nullptr,
1804 nullptr, napi_default, nullptr},
1805 {"oHNativeImageSetOnFrameAvailableListenerNullptr", nullptr, OHNativeImageSetOnFrameAvailableListenerNullptr,
1806 nullptr, nullptr, nullptr, napi_default, nullptr},
1807 {"oHNativeImageUnSetOnFrameAvailableListenerNullptr", nullptr,
1808 OHNativeImageUnSetOnFrameAvailableListenerNullptr, nullptr, nullptr, nullptr, napi_default, nullptr},
1809 {"oHNativeImageSetOnFrameAvailableListenerNormal", nullptr, OHNativeImageSetOnFrameAvailableListenerNormal,
1810 nullptr, nullptr, nullptr, napi_default, nullptr},
1811 {"oHNativeImageUnsetOnFrameAvailableListenerNormal", nullptr, OHNativeImageUnsetOnFrameAvailableListenerNormal,
1812 nullptr, nullptr, nullptr, napi_default, nullptr},
1813 };
1814 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
1815 return exports;
1816 }
1817 EXTERN_C_END
1818
1819 static napi_module demoModule = {
1820 .nm_version = 1,
1821 .nm_flags = 0,
1822 .nm_filename = nullptr,
1823 .nm_register_func = Init,
1824 .nm_modname = "nativeimage",
1825 .nm_priv = ((void *)0),
1826 .reserved = {0},
1827 };
1828
RegisterModule(void)1829 extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); };
1830