• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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