• 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 <GLES2/gl2.h>
18 #include <bits/alltypes.h>
19 #include <cstddef>
20 #include <native_buffer/buffer_common.h>
21 #include <native_buffer/native_buffer.h>
22 #include <climits>
23 #include <native_image/native_image.h>
24 #include <sys/types.h>
25 #include <vector>
26 #include <hilog/log.h>
27 const unsigned int LOG_PRINT_DOMAIN = 0xFF00;
28 
29 #define SUCCESS 0
30 #define FAIL (-1)
31 #define NUMBER_MINUS_1 (-1)
32 #define NUMBER_0 0
33 #define NUMBER_1 1
34 #define NUMBER_2 2
35 #define NUMBER_3 3
36 #define NUMBER_4 4
37 #define NUMBER_5 5
38 #define NUMBER_6 6
39 #define NUMBER_7 7
40 #define NUMBER_8 8
41 #define NUMBER_9 9
42 #define NUMBER_10 10
43 #define NUMBER_11 11
44 #define NUMBER_12 12
45 #define NUMBER_13 13
46 #define NUMBER_14 14
47 #define NUMBER_15 15
48 #define NUMBER_16 16
49 #define NUMBER_17 17
50 #define NUMBER_18 18
51 #define NUMBER_19 19
52 #define NUMBER_20 20
53 #define NUMBER_32 32
54 #define NUMBER_50 50
55 #define NUMBER_60 60
56 #define NUMBER_500 500
57 #define NUMBER_1000 1000
58 #define NUMBER_1001 1001
59 #define NUMBER_1002 1002
60 #define NUMBER_2001 2001
61 #define NUMBER_2002 2002
62 #define NUMBER_2999 2999
63 #define NUMBER_3000 3000
64 #define NUMBER_3001 3001
65 #define NUMBER_3002 3002
66 #define NUMBER_3003 3003
67 #define NUMBER_4001 4001
68 #define NUMBER_4002 4002
69 #define NUMBER_4003 4003
70 #define NUMBER_5001 5001
71 #define NUMBER_5002 5002
72 #define NUMBER_5003 5003
73 #define NUMBER_6001 6001
74 #define NUMBER_6002 6002
75 #define NUMBER_6003 6003
76 #define NUMBER_7001 7001
77 #define NUMBER_7002 7002
78 #define NUMBER_8001 8001
79 #define NUMBER_8002 8002
80 #define NUMBER_8003 8003
81 #define NUMBER_10000 10000
82 #define NUMBER_100000000 100000000
83 #define NUMBER_40001000 40001000
84 #define NUMBER_50002000 50002000
85 #define NUMBER_50007000 50007000
86 #define NUMBER_50102000 50102000
getBuffer()87 static OH_NativeBuffer *getBuffer()
88 {
89     OH_NativeBuffer_Config config = {
90         .width = 0x100,
91         .height = 0x100,
92         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
93         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
94     };
95     OH_NativeBuffer *buffer = OH_NativeBuffer_Alloc(&config);
96     return buffer;
97 }
OHNativeBufferAlloc(napi_env env,napi_callback_info info)98 static napi_value OHNativeBufferAlloc(napi_env env, napi_callback_info info)
99 {
100 
101     napi_value result = nullptr;
102     int backInfo = FAIL;
103     OH_NativeBuffer *buffer = getBuffer();
104     if (buffer != nullptr) {
105         backInfo = SUCCESS;
106     }
107     napi_create_int32(env, backInfo, &result);
108     OH_NativeBuffer_Unreference(buffer);
109     return result;
110 }
OHNativeBufferAllocAbnormal(napi_env env,napi_callback_info info)111 static napi_value OHNativeBufferAllocAbnormal(napi_env env, napi_callback_info info)
112 {
113     napi_value result = nullptr;
114     int backInfo = FAIL;
115     OH_NativeBuffer *buffer = OH_NativeBuffer_Alloc(nullptr);
116 
117     if (buffer != nullptr) {
118         backInfo = SUCCESS;
119     }
120     napi_create_int32(env, backInfo, &result);
121     OH_NativeBuffer_Unreference(buffer);
122     return result;
123 }
OHNativeBufferReference(napi_env env,napi_callback_info info)124 static napi_value OHNativeBufferReference(napi_env env, napi_callback_info info)
125 {
126     int backInfo = FAIL;
127     OH_NativeBuffer *buffer = getBuffer();
128     if (buffer != nullptr) {
129         int32_t ret = OH_NativeBuffer_Reference(buffer);
130         backInfo = ret;
131     }
132     napi_value result = nullptr;
133     napi_create_int32(env, backInfo, &result);
134     OH_NativeBuffer_Unreference(buffer);
135     return result;
136 }
OHNativeBufferReferenceAbnormal(napi_env env,napi_callback_info info)137 static napi_value OHNativeBufferReferenceAbnormal(napi_env env, napi_callback_info info)
138 {
139     int backInfo = FAIL;
140     int32_t ret = OH_NativeBuffer_Reference(nullptr);
141     if (ret == 0) {
142         backInfo = SUCCESS;
143     }
144     napi_value result = nullptr;
145     napi_create_int32(env, backInfo, &result);
146     return result;
147 }
OHNativeBufferUnreference(napi_env env,napi_callback_info info)148 static napi_value OHNativeBufferUnreference(napi_env env, napi_callback_info info)
149 {
150     int backInfo = FAIL;
151     OH_NativeBuffer *buffer = getBuffer();
152 
153     if (buffer != nullptr) {
154         int32_t ret = OH_NativeBuffer_Unreference(buffer);
155         backInfo = ret;
156     }
157     napi_value result = nullptr;
158     napi_create_int32(env, backInfo, &result);
159     OH_NativeBuffer_Unreference(buffer);
160     return result;
161 }
162 
OHNativeBufferUnreferenceAbnormal(napi_env env,napi_callback_info info)163 static napi_value OHNativeBufferUnreferenceAbnormal(napi_env env, napi_callback_info info)
164 {
165     int backInfo = FAIL;
166 
167     int32_t ret = OH_NativeBuffer_Unreference(nullptr);
168     if (ret == 0) {
169         backInfo = SUCCESS;
170     }
171     napi_value result = nullptr;
172     napi_create_int32(env, backInfo, &result);
173     return result;
174 }
175 
OHNativeBufferGetConfig(napi_env env,napi_callback_info info)176 static napi_value OHNativeBufferGetConfig(napi_env env, napi_callback_info info)
177 {
178     int backInfo = FAIL;
179     OH_NativeBuffer *buffer = getBuffer();
180     if (buffer != nullptr) {
181         OH_NativeBuffer_Config checkConfig = {};
182         checkConfig.width = 0x0;
183         checkConfig.height = 0x0;
184         checkConfig.format = 0x0;
185         checkConfig.usage = 0x0;
186         OH_NativeBuffer_GetConfig(buffer, &checkConfig);
187         if (&checkConfig != nullptr) {
188             backInfo = SUCCESS;
189         }
190     }
191     napi_value result = nullptr;
192     napi_create_int32(env, backInfo, &result);
193     OH_NativeBuffer_Unreference(buffer);
194     return result;
195 }
196 
OHNativeBufferMap(napi_env env,napi_callback_info info)197 static napi_value OHNativeBufferMap(napi_env env, napi_callback_info info)
198 {
199     int backInfo = FAIL;
200     OH_NativeBuffer *buffer = getBuffer();
201 
202     if (buffer != nullptr) {
203         void *virAddr = nullptr;
204         int32_t ret = OH_NativeBuffer_Map(buffer, &virAddr);
205         backInfo = ret;
206     }
207     napi_value result = nullptr;
208     napi_create_int32(env, backInfo, &result);
209     OH_NativeBuffer_Unreference(buffer);
210     return result;
211 }
OHNativeBufferMapAbnormal(napi_env env,napi_callback_info info)212 static napi_value OHNativeBufferMapAbnormal(napi_env env, napi_callback_info info)
213 {
214     int backInfo = FAIL;
215     void *virAddr = nullptr;
216     int32_t ret = OH_NativeBuffer_Map(nullptr, &virAddr);
217     if (ret == 0) {
218         backInfo = SUCCESS;
219     }
220     napi_value result = nullptr;
221     napi_create_int32(env, backInfo, &result);
222     return result;
223 }
OHNativeBufferUnmap(napi_env env,napi_callback_info info)224 static napi_value OHNativeBufferUnmap(napi_env env, napi_callback_info info)
225 {
226     int backInfo = FAIL;
227     OH_NativeBuffer *buffer = getBuffer();
228 
229     if (buffer != nullptr) {
230         int32_t ret = OH_NativeBuffer_Unmap(buffer);
231         backInfo = ret;
232     }
233     napi_value result = nullptr;
234     napi_create_int32(env, backInfo, &result);
235     OH_NativeBuffer_Unreference(buffer);
236     return result;
237 }
OHNativeBufferUnmapAbnormal(napi_env env,napi_callback_info info)238 static napi_value OHNativeBufferUnmapAbnormal(napi_env env, napi_callback_info info)
239 {
240     int backInfo = FAIL;
241     int32_t ret = OH_NativeBuffer_Unmap(nullptr);
242     if (ret == 0) {
243         backInfo = SUCCESS;
244     }
245     napi_value result = nullptr;
246     napi_create_int32(env, backInfo, &result);
247     return result;
248 }
OHNativeBufferGetSeqNum(napi_env env,napi_callback_info info)249 static napi_value OHNativeBufferGetSeqNum(napi_env env, napi_callback_info info)
250 {
251     int backInfo = FAIL;
252     OH_NativeBuffer *buffer = getBuffer();
253 
254     if (buffer != nullptr) {
255         uint32_t id = OH_NativeBuffer_GetSeqNum(buffer);
256         if (id > 0) {
257             backInfo = SUCCESS;
258         }
259     }
260     napi_value result = nullptr;
261     napi_create_int32(env, backInfo, &result);
262     OH_NativeBuffer_Unreference(buffer);
263     return result;
264 }
OHNativeBufferGetSeqNumAbnormal(napi_env env,napi_callback_info info)265 static napi_value OHNativeBufferGetSeqNumAbnormal(napi_env env, napi_callback_info info)
266 {
267     int backInfo = FAIL;
268     uint32_t id = OH_NativeBuffer_GetSeqNum(nullptr);
269     if (id > 0 && id != UINT_MAX) {
270         backInfo = SUCCESS;
271     }
272     napi_value result = nullptr;
273     napi_create_int32(env, backInfo, &result);
274     return result;
275 }
276 
OHNativeBufferAllocNullptr(napi_env env,napi_callback_info info)277 static napi_value OHNativeBufferAllocNullptr(napi_env env, napi_callback_info info)
278 {
279     napi_value result = nullptr;
280     OH_NativeBuffer *ptr = OH_NativeBuffer_Alloc(nullptr);
281     if (ptr == nullptr) {
282         napi_create_int32(env, FAIL, &result);
283     } else {
284         napi_create_int32(env, SUCCESS, &result);
285     }
286     return result;
287 }
nativeBufferConfigArrTest(napi_env & env,napi_value & result,std::vector<OH_NativeBuffer_Config> & nativeBufferConfigArr)288 void nativeBufferConfigArrTest(napi_env &env, napi_value &result,
289     std::vector<OH_NativeBuffer_Config> &nativeBufferConfigArr)
290 {
291     for (uint32_t index = 0; index < NUMBER_7; index++) {
292         OH_NativeBuffer *ptr = OH_NativeBuffer_Alloc(&nativeBufferConfigArr[index]);
293         napi_value resultIndex = nullptr;
294         if (ptr == NULL) {
295             napi_create_int32(env, FAIL, &resultIndex);
296         } else {
297             napi_create_int32(env, SUCCESS, &result);
298         }
299         napi_set_element(env, result, index, resultIndex);
300     }
301 }
OHNativeBufferAllocNormal(napi_env env,napi_callback_info info)302 static napi_value OHNativeBufferAllocNormal(napi_env env, napi_callback_info info)
303 {
304     napi_value result = nullptr;
305     napi_create_array_with_length(env, NUMBER_7, &result);
306     std::vector<OH_NativeBuffer_Config> nativeBufferConfigArr = {
307         {
308             .width = 0x100,
309             .height = 0x100,
310             .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
311             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
312         }, {
313             .width = 0x7FFFFFFF,
314             .height = 0x100,
315             .format = NATIVEBUFFER_PIXEL_FMT_RGBA_5658,
316             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
317         }, {
318             .width = 0,
319             .height = 0x100,
320             .format = NATIVEBUFFER_PIXEL_FMT_BGRA_5551,
321             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
322         }, {
323             .width = 0x7FFFFFFE,
324             .height = 0x100,
325             .format = NATIVEBUFFER_PIXEL_FMT_YUV_422_I,
326             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
327             .stride = 0,
328         }, {
329             .width = 0x100,
330             .height = 0x7FFFFFFF,
331             .format = NATIVEBUFFER_PIXEL_FMT_CLUT4,
332             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
333             .stride = 1,
334         }, {
335             .width = 0x100,
336             .height = 0,
337             .format = NATIVEBUFFER_PIXEL_FMT_BGRA_8888,
338             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
339             .stride = 0x7FFFFFFF,
340         }, {
341             .width = 0x100,
342             .height = 0x7FFFFFFE,
343             .format = NATIVEBUFFER_PIXEL_FMT_YCBCR_420_SP,
344             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
345         }
346     };
347 
348     nativeBufferConfigArrTest(env, result, nativeBufferConfigArr);
349     return result;
350 }
OHNativeBufferAllocAbormal(napi_env env,napi_callback_info info)351 static napi_value OHNativeBufferAllocAbormal(napi_env env, napi_callback_info info)
352 {
353     napi_value result = nullptr;
354     napi_create_array_with_length(env, NUMBER_7, &result);
355     std::vector<OH_NativeBuffer_Config> nativeBufferConfigArr = {
356         {
357             .width = - 0x100,
358             .height = 0x100,
359             .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
360             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
361         }, {
362             .width = 0x100,
363             .height = 0x100,
364             .format = NATIVEBUFFER_PIXEL_FMT_BGRA_5551,
365             .usage = -1,
366         }, {
367             .width = 0x100,
368             .height = 0x100,
369             .format = -1,
370             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
371         }, {
372             .width = 0x100,
373             .height = -0x100,
374             .format = NATIVEBUFFER_PIXEL_FMT_CLUT4,
375             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
376         }, {
377             .width = 0x100,
378             .height = 0x100,
379             .format = NATIVEBUFFER_PIXEL_FMT_YCBCR_420_SP,
380             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
381             .stride = -100,
382         }
383     };
384 
385     for (uint32_t index = 0; index < nativeBufferConfigArr.size(); index++) {
386         OH_NativeBuffer *ptr = OH_NativeBuffer_Alloc(&nativeBufferConfigArr[index]);
387         napi_value resultIndex = nullptr;
388         if (ptr == NULL) {
389             napi_create_int32(env, FAIL, &resultIndex);
390         } else {
391             napi_create_int32(env, SUCCESS, &result);
392         }
393         napi_set_element(env, result, index, resultIndex);
394     }
395     return result;
396 }
397 
OHNativeBufferAllocMuch(napi_env env,napi_callback_info info)398 static napi_value OHNativeBufferAllocMuch(napi_env env, napi_callback_info info)
399 {
400     napi_value result = nullptr;
401     OH_NativeBuffer_Config nativeBufferConfig = {
402         .width = 0x100,
403         .height = 0x100,
404         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
405         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
406     };
407     OH_NativeBuffer *bufferArr[NUMBER_500];
408     for (uint32_t index = 0; index < NUMBER_500; index++) {
409         bufferArr[index] = OH_NativeBuffer_Alloc(&nativeBufferConfig);
410         if (bufferArr[index] == nullptr) {
411             napi_create_int32(env, FAIL, &result);
412             break;
413         } else {
414             napi_create_int32(env, SUCCESS, &result);
415         }
416     }
417     for (uint32_t index = 0; index < NUMBER_500; index++) {
418         OH_NativeBuffer_Unreference(bufferArr[index]);
419     }
420     return result;
421 }
422 
OHNativeBufferFromNativeWindowBufferNullptr(napi_env env,napi_callback_info info)423 static napi_value OHNativeBufferFromNativeWindowBufferNullptr(napi_env env, napi_callback_info info)
424 {
425     napi_value result = nullptr;
426     napi_create_array_with_length(env, NUMBER_2, &result);
427     napi_value result1 = nullptr;
428     OH_NativeBuffer_Config nativeBufferConfig = {
429         .width = 0x100,
430         .height = 0x100,
431         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
432         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
433     };
434     OH_NativeBuffer *buffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
435     int32_t ret = OH_NativeBuffer_FromNativeWindowBuffer(nullptr, &buffer);
436     napi_create_int32(env, ret, &result1);
437     napi_set_element(env, result, NUMBER_0, result1);
438     OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
439     GLuint textureId;
440     glGenTextures(1, &textureId);
441     auto _image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
442     OHNativeWindow *nativeWindow = OH_NativeImage_AcquireNativeWindow(_image);
443     int code = SET_BUFFER_GEOMETRY;
444     int32_t width_ = 0x100;
445     int32_t height_ = 0x100;
446     ret = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, width_, height_);
447     code = SET_USAGE;
448     int32_t usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA;
449     ret = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usage);
450     int fenceFd = NUMBER_MINUS_1;
451     int ret0 = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
452 
453     ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, nullptr);
454     napi_create_int32(env, ret, &result1);
455     napi_set_element(env, result, NUMBER_1, result1);
456     OH_NativeBuffer_Unreference(buffer);
457     OH_NativeWindow_DestroyNativeWindow(nativeWindow);
458     OH_NativeImage_Destroy(&_image);
459     return result;
460 }
461 
462 // 失败
OHNativeBufferFromNativeWindowBufferNormal(napi_env env,napi_callback_info info)463 static napi_value OHNativeBufferFromNativeWindowBufferNormal(napi_env env, napi_callback_info info)
464 {
465     napi_value result = nullptr;
466     napi_create_array_with_length(env, NUMBER_3, &result);
467     napi_value result1 = nullptr;
468     OH_NativeBuffer *buffer = nullptr;
469     OHNativeWindowBuffer *nativeWindowBuffer = nullptr;
470 
471     GLuint textureId;
472     glGenTextures(1, &textureId);
473     auto _image = OH_NativeImage_Create(textureId, GL_TEXTURE_2D);
474     OHNativeWindow *nativeWindow = OH_NativeImage_AcquireNativeWindow(_image);
475     int code = SET_BUFFER_GEOMETRY;
476     int32_t width_ = 0x100;
477     int32_t height_ = 0x100;
478     int32_t ret = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, width_, height_);
479     code = SET_USAGE;
480     int32_t usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA;
481     ret = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, usage);
482     int fenceFd = NUMBER_MINUS_1;
483     int ret0 = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &nativeWindowBuffer, &fenceFd);
484     ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, &buffer);
485     napi_create_int32(env, ret, &result1);
486     napi_set_element(env, result, NUMBER_0, result1);
487 
488     // nativeWindowBuffer和nativeBuffer是否一致 一致返回success,失败返回fail
489     if (buffer != nullptr) {
490         napi_create_int32(env, SUCCESS, &result1);
491     } else {
492         napi_create_int32(env, FAIL, &result1);
493     }
494     napi_set_element(env, result, NUMBER_1, result1);
495 
496     ret = OH_NativeBuffer_FromNativeWindowBuffer(nativeWindowBuffer, &buffer);
497     napi_create_int32(env, ret, &result1);
498     napi_set_element(env, result, NUMBER_2, result1);
499     OH_NativeBuffer_Unreference(buffer);
500     OH_NativeWindow_DestroyNativeWindow(nativeWindow);
501     OH_NativeImage_Destroy(&_image);
502     return result;
503 }
504 
OHNativeBufferGetConfigNullptr(napi_env env,napi_callback_info info)505 static napi_value OHNativeBufferGetConfigNullptr(napi_env env, napi_callback_info info)
506 {
507     napi_value result = nullptr;
508 
509     OH_NativeBuffer_Config *nativeBufferConfig = nullptr;
510     OH_NativeBuffer_GetConfig(nullptr, nativeBufferConfig);
511     // 怎么做判断?
512     if (nativeBufferConfig != nullptr) {
513         napi_create_int32(env, SUCCESS, &result);
514     } else {
515         napi_create_int32(env, FAIL, &result);
516     }
517 
518     return result;
519 }
520 
OHNativeBufferGetConfigNormal(napi_env env,napi_callback_info info)521 static napi_value OHNativeBufferGetConfigNormal(napi_env env, napi_callback_info info)
522 {
523     napi_value result = nullptr;
524     OH_NativeBuffer_Config nativeBufferConfig = {
525         .width = 0x100,
526         .height = 0x100,
527         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
528         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
529     };
530     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
531     OH_NativeBuffer_Config nativeBufferConfig2;
532     OH_NativeBuffer_GetConfig(nativeBuffer, &nativeBufferConfig2);
533 
534     // 手动比较 nativeBufferConfig 和 nativeBufferConfig2 的成员
535     bool areEqual = true;
536     if (nativeBufferConfig.width != nativeBufferConfig2.width) {
537         areEqual = false;
538     } else if (nativeBufferConfig.height != nativeBufferConfig2.height) {
539         areEqual = false;
540     } else if (nativeBufferConfig.format != nativeBufferConfig2.format) {
541         areEqual = false;
542     } else if (nativeBufferConfig.usage != nativeBufferConfig2.usage) {
543         areEqual = false;
544     }
545 
546     if (areEqual) {
547         napi_create_int32(env, SUCCESS, &result);
548     } else {
549         napi_create_int32(env, FAIL, &result);
550     }
551     OH_NativeBuffer_Unreference(nativeBuffer);
552     return result;
553 }
554 
OHNativeBufferGetSeqNumNullptr(napi_env env,napi_callback_info info)555 static napi_value OHNativeBufferGetSeqNumNullptr(napi_env env, napi_callback_info info)
556 {
557     napi_value result = nullptr;
558     uint32_t ret = OH_NativeBuffer_GetSeqNum(nullptr);
559     napi_create_int32(env, ret, &result);
560     return result;
561 }
562 
OHNativeBufferGetSeqNumNormal(napi_env env,napi_callback_info info)563 static napi_value OHNativeBufferGetSeqNumNormal(napi_env env, napi_callback_info info)
564 {
565     napi_value result = nullptr;
566     OH_NativeBuffer_Config nativeBufferConfig = {
567         .width = 0x100,
568         .height = 0x100,
569         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
570         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
571     };
572     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
573     uint32_t ret = 0;
574     ret = OH_NativeBuffer_GetSeqNum(nativeBuffer);
575     if (ret > 0 && ret != UINT_MAX) {
576         napi_create_int32(env, SUCCESS, &result);
577     } else {
578         napi_create_int32(env, FAIL, &result);
579     }
580     OH_NativeBuffer_Unreference(nativeBuffer);
581     return result;
582 }
OHNativeBuffeMapNullptr(napi_env env,napi_callback_info info)583 static napi_value OHNativeBuffeMapNullptr(napi_env env, napi_callback_info info)
584 {
585     napi_value result = nullptr;
586     uint32_t ret = OH_NativeBuffer_Map(nullptr, nullptr);
587     napi_create_int32(env, ret, &result);
588     return result;
589 }
OHNativeBufferMapNormal(napi_env env,napi_callback_info info)590 static napi_value OHNativeBufferMapNormal(napi_env env, napi_callback_info info)
591 {
592     napi_value result = nullptr;
593     //
594     OH_NativeBuffer_Config nativeBufferConfig = {
595         .width = 0x100,
596         .height = 0x100,
597         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
598         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
599     };
600     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
601     void *virAddr = nullptr;
602     uint32_t ret = OH_NativeBuffer_Map(nativeBuffer, &virAddr);
603     if (virAddr != nullptr) {
604         napi_create_int32(env, SUCCESS, &result);
605     } else {
606         napi_create_int32(env, FAIL, &result);
607     }
608     OH_NativeBuffer_Unreference(nativeBuffer);
609     return result;
610 }
OHNativeBuffeMapPlanesNullptr(napi_env env,napi_callback_info info)611 static napi_value OHNativeBuffeMapPlanesNullptr(napi_env env, napi_callback_info info)
612 {
613     napi_value result = nullptr;
614     napi_value result1 = nullptr;
615     napi_create_array_with_length(env, NUMBER_2, &result);
616     OH_NativeBuffer_Config nativeBufferConfig = {
617         .width = 0x100,
618         .height = 0x100,
619         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
620         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
621     };
622     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
623     void *virAddr = nullptr;
624     OH_NativeBuffer_Planes outPlanes;
625     int32_t ret = OH_NativeBuffer_MapPlanes(nullptr, &virAddr, &outPlanes);
626     napi_create_int32(env, ret, &result1);
627     napi_set_element(env, result, NUMBER_0, result1);
628     ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, nullptr);
629     napi_create_int32(env, ret, &result1);
630     napi_set_element(env, result, NUMBER_1, result1);
631     OH_NativeBuffer_Unreference(nativeBuffer);
632     return result;
633 }
OHNativeBufferMapPlanesAbNormal(napi_env env,napi_callback_info info)634 static napi_value OHNativeBufferMapPlanesAbNormal(napi_env env, napi_callback_info info)
635 {
636     napi_value result = nullptr;
637     napi_create_array_with_length(env, NUMBER_3, &result);
638     OH_NativeBuffer_Config nativeBufferConfig = {
639         .width = 0x100,
640         .height = 0x100,
641         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
642         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
643     };
644     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
645     void *virAddr = nullptr;
646     OH_NativeBuffer_Planes outPlanes;
647     int32_t ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes);
648     if (ret != NUMBER_50007000) {
649         napi_create_int32(env, NUMBER_1001, &result);
650         return result;
651     } else {
652         napi_create_int32(env, ret, &result);
653     }
654     OH_NativeBuffer_Unreference(nativeBuffer);
655     return result;
656 }
657 
OHNativeBufferMapPlanesNormal(napi_env env,napi_callback_info info)658 static napi_value OHNativeBufferMapPlanesNormal(napi_env env, napi_callback_info info)
659 {
660     napi_value result = nullptr;
661     napi_create_array_with_length(env, NUMBER_3, &result);
662     OH_NativeBuffer_Format format[] = {
663         NATIVEBUFFER_PIXEL_FMT_YCBCR_420_SP,
664         NATIVEBUFFER_PIXEL_FMT_YCRCB_420_SP,
665         NATIVEBUFFER_PIXEL_FMT_YCBCR_420_P,
666         NATIVEBUFFER_PIXEL_FMT_YCRCB_420_P
667     };
668     for (int i = 0; i < sizeof(format) / sizeof(format[0]); i++) {
669         OH_NativeBuffer_Config nativeBufferConfig = {
670             .width = 0x100,
671             .height = 0x100,
672             .format = format[i],
673             .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
674         };
675         OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
676         void *virAddr = nullptr;
677         OH_NativeBuffer_Planes outPlanes;
678         int32_t ret = OH_NativeBuffer_MapPlanes(nativeBuffer, &virAddr, &outPlanes);
679         if (ret != SUCCESS) {
680             napi_create_int32(env, NUMBER_1000 * (i + 1) + NUMBER_1, &result);
681             return result;
682         } else {
683             napi_create_int32(env, SUCCESS, &result);
684         }
685         OH_NativeBuffer_Unreference(nativeBuffer);
686     }
687     return result;
688 }
OHNativeBuffeReferenceNullptr(napi_env env,napi_callback_info info)689 static napi_value OHNativeBuffeReferenceNullptr(napi_env env, napi_callback_info info)
690 {
691     napi_value result = nullptr;
692     int32_t ret = OH_NativeBuffer_Reference(nullptr);
693     napi_create_int32(env, ret, &result);
694     return result;
695 }
OHNativeBuffeUnreferenceNullptr(napi_env env,napi_callback_info info)696 static napi_value OHNativeBuffeUnreferenceNullptr(napi_env env, napi_callback_info info)
697 {
698     napi_value result = nullptr;
699     int32_t ret = OH_NativeBuffer_Unreference(nullptr);
700     napi_create_int32(env, ret, &result);
701     return result;
702 }
OHNativeBufferReferenceNormal(napi_env env,napi_callback_info info)703 static napi_value OHNativeBufferReferenceNormal(napi_env env, napi_callback_info info)
704 {
705     napi_value result = nullptr;
706     OH_NativeBuffer_Config nativeBufferConfig = {
707         .width = 0x100,
708         .height = 0x100,
709         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
710         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
711     };
712     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
713     int32_t ret = OH_NativeBuffer_Reference(nativeBuffer);
714     napi_create_int32(env, ret, &result);
715     OH_NativeBuffer_Unreference(nativeBuffer);
716     return result;
717 }
OHNativeBufferReferenceMax(napi_env env,napi_callback_info info)718 static napi_value OHNativeBufferReferenceMax(napi_env env, napi_callback_info info)
719 {
720     napi_value result = nullptr;
721     OH_NativeBuffer_Config nativeBufferConfig = {
722         .width = 0x100,
723         .height = 0x100,
724         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
725         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
726     };
727     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
728     for (uint32_t index = 0; index < NUMBER_1000; index++) {
729         int32_t ret = OH_NativeBuffer_Reference(nativeBuffer);
730         napi_create_int32(env, ret, &result);
731         if (ret != 0) {
732             break;
733         }
734     }
735     OH_NativeBuffer_Unreference(nativeBuffer);
736     return result;
737 }
OHNativeBufferUnreferenceNormal(napi_env env,napi_callback_info info)738 static napi_value OHNativeBufferUnreferenceNormal(napi_env env, napi_callback_info info)
739 {
740     napi_value result = nullptr;
741     OH_NativeBuffer_Config nativeBufferConfig = {
742         .width = 0x100,
743         .height = 0x100,
744         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
745         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
746     };
747     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
748     int32_t ret = OH_NativeBuffer_Unreference(nativeBuffer);
749     napi_create_int32(env, ret, &result);
750     OH_NativeBuffer_Unreference(nativeBuffer);
751     return result;
752 }
OHNativeBuffeUnmapNullptr(napi_env env,napi_callback_info info)753 static napi_value OHNativeBuffeUnmapNullptr(napi_env env, napi_callback_info info)
754 {
755     napi_value result = nullptr;
756     int32_t ret = OH_NativeBuffer_Unmap(nullptr);
757     napi_create_int32(env, ret, &result);
758     return result;
759 }
OHNativeBufferUnmapNormal(napi_env env,napi_callback_info info)760 static napi_value OHNativeBufferUnmapNormal(napi_env env, napi_callback_info info)
761 {
762     napi_value result = nullptr;
763     OH_NativeBuffer_Config nativeBufferConfig = {
764         .width = 0x100,
765         .height = 0x100,
766         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
767         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
768     };
769     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
770     int32_t ret = OH_NativeBuffer_Unmap(nativeBuffer);
771     napi_create_int32(env, ret, &result);
772     OH_NativeBuffer_Unreference(nativeBuffer);
773     return result;
774 }
OHNativeBufferGetColorSpaceFirst(napi_env env,napi_callback_info info)775 static napi_value OHNativeBufferGetColorSpaceFirst(napi_env env, napi_callback_info info)
776 {
777     napi_value result = nullptr;
778     OH_NativeBuffer_Config nativeBufferConfig = {
779         .width = 0x100,
780         .height = 0x100,
781         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
782         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
783     };
784     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
785     OH_NativeBuffer_ColorSpace colorSpace;
786     int32_t ret = OH_NativeBuffer_GetColorSpace(nativeBuffer, &colorSpace);
787     if (ret != NUMBER_50002000 && ret != NUMBER_50102000) {
788         napi_create_int32(env, NUMBER_1001, &result);
789         return result;
790     }
791     OH_NativeBuffer_Unreference(nativeBuffer);
792     napi_create_int32(env, SUCCESS, &result);
793     return result;
794 }
OHNativeBufferSetColorSpaceNormal(napi_env env,napi_callback_info info)795 static napi_value OHNativeBufferSetColorSpaceNormal(napi_env env, napi_callback_info info)
796 {
797     napi_value result = nullptr;
798     OH_NativeBuffer_Config nativeBufferConfig = {
799         .width = 0x100,
800         .height = 0x100,
801         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
802         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
803     };
804     for (uint32_t index = 0; index < sizeof(OH_NativeBuffer_ColorSpace); index++) {
805         OH_NativeBuffer_ColorSpace colorSpace1 = static_cast<OH_NativeBuffer_ColorSpace>(index);
806         OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
807         int32_t ret = OH_NativeBuffer_SetColorSpace(nativeBuffer, colorSpace1);
808         if (ret != 0) {
809             napi_create_int32(env, NUMBER_1000 * index + NUMBER_1, &result);
810             return result;
811         }
812         OH_NativeBuffer_ColorSpace colorspace;
813         ret = OH_NativeBuffer_GetColorSpace(nativeBuffer, &colorspace);
814         if (ret != 0) {
815             napi_create_int32(env, NUMBER_1000 * index + NUMBER_2, &result);
816             return result;
817         }
818         if (colorspace != colorSpace1) {
819             napi_create_int32(env, NUMBER_1000 * index + NUMBER_3, &result);
820             return result;
821         }
822         OH_NativeBuffer_Unreference(nativeBuffer);
823     }
824     napi_create_int32(env, SUCCESS, &result);
825     return result;
826 }
827 
OHNativeBufferSetColorSpaceNullptr(napi_env env,napi_callback_info info)828 static napi_value OHNativeBufferSetColorSpaceNullptr(napi_env env, napi_callback_info info)
829 {
830     napi_value result = nullptr;
831     OH_NativeBuffer_ColorSpace colorSpace = OH_NativeBuffer_ColorSpace::OH_COLORSPACE_ADOBERGB_LIMIT;
832     int32_t ret = OH_NativeBuffer_SetColorSpace(nullptr, colorSpace);
833     napi_create_int32(env, ret, &result);
834     return result;
835 }
OHNativeBufferSetColorSpaceAbnormal(napi_env env,napi_callback_info info)836 static napi_value OHNativeBufferSetColorSpaceAbnormal(napi_env env, napi_callback_info info)
837 {
838     napi_value result = nullptr;
839     OH_NativeBuffer_Config nativeBufferConfig = {
840         .width = 0x100,
841         .height = 0x100,
842         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
843         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
844     };
845     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
846     OH_NativeBuffer_ColorSpace colorSpace = (OH_NativeBuffer_ColorSpace)(-10);
847     int32_t ret = OH_NativeBuffer_SetColorSpace(nativeBuffer, colorSpace);
848     napi_create_int32(env, ret, &result);
849     OH_NativeBuffer_Unreference(nativeBuffer);
850     return result;
851 }
OHNativeBufferGetColorSpaceNullptr(napi_env env,napi_callback_info info)852 static napi_value OHNativeBufferGetColorSpaceNullptr(napi_env env, napi_callback_info info)
853 {
854     napi_value result = nullptr;
855     napi_value result1 = nullptr;
856     napi_create_array_with_length(env, NUMBER_4, &result);
857     OH_NativeBuffer_Config nativeBufferConfig = {
858         .width = 0x100,
859         .height = 0x100,
860         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
861         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
862     };
863     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
864     OH_NativeBuffer_ColorSpace colorSpace = OH_NativeBuffer_ColorSpace::OH_COLORSPACE_ADOBERGB_LIMIT;
865     int32_t ret = OH_NativeBuffer_SetColorSpace(nativeBuffer, colorSpace);
866     napi_create_int32(env, ret, &result1);
867     napi_set_element(env, result, NUMBER_0, result1);
868     ret = OH_NativeBuffer_GetColorSpace(nullptr, &colorSpace);
869     napi_create_int32(env, ret, &result1);
870     napi_set_element(env, result, NUMBER_1, result1);
871     ret = OH_NativeBuffer_GetColorSpace(nativeBuffer, nullptr);
872     napi_create_int32(env, ret, &result1);
873     napi_set_element(env, result, NUMBER_2, result1);
874     OH_NativeBuffer_ColorSpace colorSpaceGet;
875     ret = OH_NativeBuffer_GetColorSpace(nativeBuffer, &colorSpaceGet);
876     napi_create_int32(env, ret, &result1);
877     napi_set_element(env, result, NUMBER_3, result1);
878     OH_NativeBuffer_Unreference(nativeBuffer);
879     return result;
880 }
OHNativeBufferGetMetadataValueFirst(napi_env env,napi_callback_info info)881 static napi_value OHNativeBufferGetMetadataValueFirst(napi_env env, napi_callback_info info)
882 {
883     napi_value result = nullptr;
884     OH_NativeBuffer_Config nativeBufferConfig = {
885         .width = 0x100,
886         .height = 0x100,
887         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
888         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
889     };
890     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
891     OH_NativeBuffer_MetadataKey metadataKey = OH_NativeBuffer_MetadataKey::OH_HDR_DYNAMIC_METADATA;
892     int32_t size = 0;
893     uint8_t *metadata = nullptr;
894     int32_t ret = OH_NativeBuffer_GetMetadataValue(nativeBuffer, metadataKey, &size, &metadata);
895     if (ret != NUMBER_50002000 && ret != NUMBER_50102000) {
896         napi_create_int32(env, NUMBER_1001, &result);
897         return result;
898     }
899     napi_create_int32(env, SUCCESS, &result);
900     OH_NativeBuffer_Unreference(nativeBuffer);
901     return result;
902 }
903 
OHNativeBufferSetDynamicMetadataValue1(napi_env env,OH_NativeBuffer * nativeBuffer)904 napi_value OHNativeBufferSetDynamicMetadataValue1(napi_env env, OH_NativeBuffer *nativeBuffer)
905 {
906     napi_value result = nullptr;
907     int32_t bufferSize;
908     uint8_t *buffer;
909     int32_t X = NUMBER_MINUS_1;
910     uint8_t metaData[NUMBER_60];
911     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, X, metaData);
912     if (flag != NUMBER_40001000) {
913         napi_create_int32(env, NUMBER_1001, &result);
914         return result;
915     }
916     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, &bufferSize, &buffer);
917     if (flag != NUMBER_50002000 && flag != NUMBER_50102000) {
918         napi_create_int32(env, NUMBER_1002, &result);
919         return result;
920     }
921     X = 0;
922     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, X, metaData);
923     if (flag != NUMBER_40001000) {
924         napi_create_int32(env, NUMBER_2001, &result);
925         return result;
926     }
927     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, &bufferSize, &buffer);
928     if (flag != NUMBER_50002000 && flag != NUMBER_50102000) {
929         napi_create_int32(env, NUMBER_2002, &result);
930         return result;
931     }
932     X = 1;
933     metaData[0] = static_cast<uint8_t>(0);
934     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, X, metaData);
935     if (flag != 0) {
936         napi_create_int32(env, flag, &result);
937         return result;
938     }
939     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, &bufferSize, &buffer);
940     if (flag != 0) {
941         napi_create_int32(env, NUMBER_3002, &result);
942         return result;
943     }
944     if (bufferSize != X) {
945         napi_create_int32(env, NUMBER_3003, &result);
946         return result;
947     }
948     delete[] buffer;
949     napi_create_int32(env, SUCCESS, &result);
950     return result;
951 }
952 
OHNativeBufferSetDynamicMetadataValue2(napi_env env,OH_NativeBuffer * nativeBuffer)953 napi_value OHNativeBufferSetDynamicMetadataValue2(napi_env env, OH_NativeBuffer *nativeBuffer)
954 {
955     napi_value result = nullptr;
956     int32_t bufferSize;
957     uint8_t *buffer;
958     int32_t X = NUMBER_60;
959     uint8_t metaData[NUMBER_60];
960     for (int i = 0; i < X; ++i) {
961         metaData[i] = static_cast<uint8_t>(i);
962     }
963     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, X, metaData);
964     if (flag != 0) {
965         napi_create_int32(env, NUMBER_4001, &result);
966         return result;
967     }
968     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, &bufferSize, &buffer);
969     if (flag != 0) {
970         napi_create_int32(env, NUMBER_4002, &result);
971         return result;
972     }
973     if (bufferSize != X) {
974         napi_create_int32(env, NUMBER_4003, &result);
975         return result;
976     }
977     X = NUMBER_2999;
978     uint8_t metaData2[X];
979     for (int i = 0; i < X; ++i) {
980         metaData2[i] = static_cast<uint8_t>(i);
981     }
982     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, X, metaData2);
983     if (flag != 0) {
984         napi_create_int32(env, NUMBER_5001, &result);
985         return result;
986     }
987     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, &bufferSize, &buffer);
988     if (flag != 0) {
989         napi_create_int32(env, NUMBER_5002, &result);
990         return result;
991     }
992     if (bufferSize != X) {
993         napi_create_int32(env, NUMBER_5003, &result);
994         return result;
995     }
996     delete[] buffer;
997     napi_create_int32(env, SUCCESS, &result);
998     return result;
999 }
1000 
OHNativeBufferSetDynamicMetadataValue3(napi_env env,OH_NativeBuffer * nativeBuffer)1001 napi_value OHNativeBufferSetDynamicMetadataValue3(napi_env env, OH_NativeBuffer *nativeBuffer)
1002 {
1003     napi_value result = nullptr;
1004     int32_t bufferSize;
1005     uint8_t *buffer;
1006     int32_t X = NUMBER_3000;
1007     uint8_t metaData[NUMBER_60];
1008     uint8_t metaData3[X];
1009     for (int i = 0; i < X; ++i) {
1010         metaData3[i] = static_cast<uint8_t>(i);
1011     }
1012     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, X, metaData3);
1013     if (flag != 0) {
1014         napi_create_int32(env, NUMBER_6001, &result);
1015         return result;
1016     }
1017     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, &bufferSize, &buffer);
1018     if (flag != 0) {
1019         napi_create_int32(env, NUMBER_6002, &result);
1020         return result;
1021     }
1022     if (bufferSize != X) {
1023         napi_create_int32(env, NUMBER_6003, &result);
1024         return result;
1025     }
1026     X = NUMBER_3001;
1027     uint8_t metaData4[X];
1028     for (int i = 0; i < X; ++i) {
1029         metaData4[i] = static_cast<uint8_t>(i);
1030     }
1031     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, X, metaData4);
1032     if (flag != 0) {
1033         napi_create_int32(env, NUMBER_7001, &result);
1034         return result;
1035     }
1036     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, &bufferSize, &buffer);
1037     if (flag != 0) {
1038         napi_create_int32(env, NUMBER_7002, &result);
1039         return result;
1040     }
1041     X = NUMBER_10000;
1042     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, X, metaData);
1043     if (flag == 0) {
1044         napi_create_int32(env, NUMBER_8001, &result);
1045         return result;
1046     }
1047     delete[] buffer;
1048     napi_create_int32(env, SUCCESS, &result);
1049     return result;
1050 }
1051 
OHNativeBufferSetDynamicMetadataValue(napi_env env,napi_callback_info info)1052 static napi_value OHNativeBufferSetDynamicMetadataValue(napi_env env, napi_callback_info info)
1053 {
1054     napi_value result = nullptr;
1055     OH_NativeBuffer_Config nativeBufferConfig = {
1056         .width = 0x100,
1057         .height = 0x100,
1058         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1059         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1060     };
1061     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
1062     OH_NativeBuffer_MetadataKey metadataKey = OH_NativeBuffer_MetadataKey::OH_HDR_DYNAMIC_METADATA;
1063 
1064     result = OHNativeBufferSetDynamicMetadataValue1(env, nativeBuffer);
1065     if (result != NULL) {
1066         return result;
1067     }
1068     result = OHNativeBufferSetDynamicMetadataValue2(env, nativeBuffer);
1069     if (result != NULL) {
1070         return result;
1071     }
1072     result = OHNativeBufferSetDynamicMetadataValue3(env, nativeBuffer);
1073     if (result != NULL) {
1074         return result;
1075     }
1076 
1077     OH_NativeBuffer_Unreference(nativeBuffer);
1078     napi_create_int32(env, SUCCESS, &result);
1079     return result;
1080 }
OHNativeBufferSetMetadataValueTimes(napi_env env,napi_callback_info info)1081 static napi_value OHNativeBufferSetMetadataValueTimes(napi_env env, napi_callback_info info)
1082 {
1083     napi_value result = nullptr;
1084     OH_NativeBuffer_Config nativeBufferConfig = {
1085         .width = 0x100,
1086         .height = 0x100,
1087         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1088         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1089     };
1090     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
1091     OH_NativeBuffer_MetadataKey metadataKey = OH_NativeBuffer_MetadataKey::OH_HDR_DYNAMIC_METADATA;
1092     int32_t size = NUMBER_60;
1093     uint8_t metadata = NUMBER_2;
1094     for (uint32_t index = 0; index < NUMBER_50; index++) {
1095         int32_t ret = OH_NativeBuffer_SetMetadataValue(nativeBuffer, metadataKey, size, &metadata);
1096         if (ret != 0) {
1097             napi_create_int32(env, ret, &result);
1098             break;
1099         }
1100         int32_t size2 = 0;
1101         uint8_t *metadata2 = nullptr;
1102         ret = OH_NativeBuffer_GetMetadataValue(nativeBuffer, metadataKey, &size2, &metadata2);
1103         if (ret != 0) {
1104             napi_create_int32(env, ret, &result);
1105             break;
1106         }
1107         if (size != size2) {
1108             napi_create_int32(env, FAIL, &result);
1109             break;
1110         } else {
1111             napi_create_int32(env, SUCCESS, &result);
1112         }
1113     }
1114     OH_NativeBuffer_Unreference(nativeBuffer);
1115     napi_create_int32(env, SUCCESS, &result);
1116     return result;
1117 }
1118 
OHNativeBufferSetStaticMetadataValue1(napi_env env,OH_NativeBuffer * nativeBuffer)1119 napi_value OHNativeBufferSetStaticMetadataValue1(napi_env env, OH_NativeBuffer *nativeBuffer)
1120 {
1121     napi_value result = nullptr;
1122     int32_t bufferSize;
1123     uint8_t *buffer;
1124     int32_t X = NUMBER_MINUS_1;
1125     uint8_t metaData[NUMBER_60];
1126     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, X, metaData);
1127     if (flag != NUMBER_40001000) {
1128         napi_create_int32(env, NUMBER_1001, &result);
1129         return result;
1130     }
1131     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, &bufferSize, &buffer);
1132     if (flag != NUMBER_50002000 && flag != NUMBER_50102000) {
1133         napi_create_int32(env, NUMBER_1002, &result);
1134         return result;
1135     }
1136     X = 0;
1137     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, X, metaData);
1138     if (flag != NUMBER_40001000) {
1139         napi_create_int32(env, NUMBER_2001, &result);
1140         return result;
1141     }
1142     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, &bufferSize, &buffer);
1143     if (flag != NUMBER_50002000 && flag != NUMBER_50102000) {
1144         napi_create_int32(env, NUMBER_2002, &result);
1145         return result;
1146     }
1147     X = 1;
1148     metaData[0] = static_cast<uint8_t>(0);
1149     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, X, metaData);
1150     if (flag != 0) {
1151         napi_create_int32(env, flag, &result);
1152         return result;
1153     }
1154     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, &bufferSize, &buffer);
1155     if (flag != 0) {
1156         napi_create_int32(env, NUMBER_3002, &result);
1157         return result;
1158     }
1159     if (bufferSize != X) {
1160         napi_create_int32(env, NUMBER_3003, &result);
1161         return result;
1162     }
1163     delete[] buffer;
1164     napi_create_int32(env, SUCCESS, &result);
1165     return result;
1166 }
1167 
OHNativeBufferSetStaticMetadataValue2(napi_env env,OH_NativeBuffer * nativeBuffer)1168 napi_value OHNativeBufferSetStaticMetadataValue2(napi_env env, OH_NativeBuffer *nativeBuffer)
1169 {
1170     napi_value result = nullptr;
1171     int32_t bufferSize;
1172     uint8_t *buffer;
1173     int32_t X = NUMBER_60;
1174     uint8_t metaData[NUMBER_60];
1175     for (int i = 0; i < X; ++i) {
1176         metaData[i] = static_cast<uint8_t>(i);
1177     }
1178     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, X, metaData);
1179     if (flag != 0) {
1180         napi_create_int32(env, NUMBER_4001, &result);
1181         return result;
1182     }
1183     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, &bufferSize, &buffer);
1184     if (flag != 0) {
1185         napi_create_int32(env, NUMBER_4002, &result);
1186         return result;
1187     }
1188     if (bufferSize != X) {
1189         napi_create_int32(env, NUMBER_4003, &result);
1190         return result;
1191     }
1192     X = NUMBER_2999;
1193     uint8_t metaData2[X];
1194     for (int i = 0; i < X; ++i) {
1195         metaData2[i] = static_cast<uint8_t>(i);
1196     }
1197     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, X, metaData2);
1198     if (flag != 0) {
1199         napi_create_int32(env, NUMBER_5001, &result);
1200         return result;
1201     }
1202     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, &bufferSize, &buffer);
1203     if (flag != 0) {
1204         napi_create_int32(env, NUMBER_5002, &result);
1205         return result;
1206     }
1207     if (bufferSize != X) {
1208         napi_create_int32(env, NUMBER_5003, &result);
1209         return result;
1210     }
1211     delete[] buffer;
1212     napi_create_int32(env, SUCCESS, &result);
1213     return result;
1214 }
1215 
OHNativeBufferSetStaticMetadataValue3(napi_env env,OH_NativeBuffer * nativeBuffer)1216 napi_value OHNativeBufferSetStaticMetadataValue3(napi_env env, OH_NativeBuffer *nativeBuffer)
1217 {
1218     napi_value result = nullptr;
1219     int32_t bufferSize;
1220     uint8_t *buffer;
1221     int32_t X = NUMBER_3000;
1222     uint8_t metaData[NUMBER_60];
1223     uint8_t metaData3[X];
1224     for (int i = 0; i < X; ++i) {
1225         metaData3[i] = static_cast<uint8_t>(i);
1226     }
1227     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, X, metaData3);
1228     if (flag != 0) {
1229         napi_create_int32(env, NUMBER_6001, &result);
1230         return result;
1231     }
1232     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, &bufferSize, &buffer);
1233     if (flag != 0) {
1234         napi_create_int32(env, NUMBER_6002, &result);
1235         return result;
1236     }
1237     if (bufferSize != X) {
1238         napi_create_int32(env, NUMBER_6003, &result);
1239         return result;
1240     }
1241     X = NUMBER_3001;
1242     uint8_t metaData4[X];
1243     for (int i = 0; i < X; ++i) {
1244         metaData4[i] = static_cast<uint8_t>(i);
1245     }
1246     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, X, metaData4);
1247     if (flag != 0) {
1248         napi_create_int32(env, NUMBER_7001, &result);
1249         return result;
1250     }
1251     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, &bufferSize, &buffer);
1252     if (flag != 0) {
1253         napi_create_int32(env, NUMBER_7002, &result);
1254         return result;
1255     }
1256     X = NUMBER_10000;
1257     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_STATIC_METADATA, X, metaData);
1258     if (flag == 0) {
1259         napi_create_int32(env, NUMBER_8001, &result);
1260         return result;
1261     }
1262     delete[] buffer;
1263     napi_create_int32(env, SUCCESS, &result);
1264     return result;
1265 }
1266 
OHNativeBufferSetStaticMetadataValue(napi_env env,napi_callback_info info)1267 static napi_value OHNativeBufferSetStaticMetadataValue(napi_env env, napi_callback_info info)
1268 {
1269     napi_value result = nullptr;
1270     napi_create_array_with_length(env, NUMBER_20, &result);
1271     OH_NativeBuffer_Config nativeBufferConfig = {
1272         .width = 0x100,
1273         .height = 0x100,
1274         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1275         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1276     };
1277     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
1278     result = OHNativeBufferSetStaticMetadataValue1(env, nativeBuffer);
1279     if (result != NULL) {
1280         return result;
1281     }
1282     result = OHNativeBufferSetStaticMetadataValue2(env, nativeBuffer);
1283     if (result != NULL) {
1284         return result;
1285     }
1286     result = OHNativeBufferSetStaticMetadataValue3(env, nativeBuffer);
1287     if (result != NULL) {
1288         return result;
1289     }
1290 
1291     OH_NativeBuffer_Unreference(nativeBuffer);
1292     napi_create_int32(env, SUCCESS, &result);
1293     return result;
1294 }
1295 
OHNativeBufferSetMetadataValue1(napi_env env,OH_NativeBuffer * nativeBuffer)1296 napi_value OHNativeBufferSetMetadataValue1(napi_env env, OH_NativeBuffer *nativeBuffer)
1297 {
1298     napi_value result = nullptr;
1299     int32_t bufferSize;
1300     uint8_t *buffer;
1301     int32_t X = NUMBER_MINUS_1;
1302     uint8_t metaData[NUMBER_60];
1303     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, X, metaData);
1304     if (flag != NUMBER_40001000) {
1305         napi_create_int32(env, NUMBER_1001, &result);
1306         return result;
1307     }
1308     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, &bufferSize, &buffer);
1309     if (flag != NUMBER_50002000 && flag != NUMBER_50102000) {
1310         napi_create_int32(env, NUMBER_1002, &result);
1311         return result;
1312     }
1313     // 2. X=0 set调用失败 get调用失败
1314     X = 0;
1315     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, X, metaData);
1316     if (flag != NUMBER_40001000) {
1317         napi_create_int32(env, NUMBER_2001, &result);
1318         return result;
1319     }
1320     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, &bufferSize, &buffer);
1321     if (flag != NUMBER_50002000 && flag != NUMBER_50102000) {
1322         napi_create_int32(env, NUMBER_2002, &result);
1323         return result;
1324     }
1325     // 3. X=1 set调用成功 get调用成功 两者一致
1326     X = 1;
1327     metaData[0] = static_cast<uint8_t>(X);
1328     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, X, metaData);
1329     if (flag != 0) {
1330         napi_create_int32(env, flag, &result);
1331         return result;
1332     }
1333     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, &bufferSize, &buffer);
1334     if (flag != 0) {
1335         napi_create_int32(env, NUMBER_3002, &result);
1336         return result;
1337     }
1338     if (bufferSize != NUMBER_4) {
1339         napi_create_int32(env, NUMBER_6003, &result);
1340         return result;
1341     }
1342     delete[] buffer;
1343     napi_create_int32(env, SUCCESS, &result);
1344     return result;
1345 }
1346 
OHNativeBufferSetMetadataValue2(napi_env env,OH_NativeBuffer * nativeBuffer)1347 napi_value OHNativeBufferSetMetadataValue2(napi_env env, OH_NativeBuffer *nativeBuffer)
1348 {
1349     napi_value result = nullptr;
1350     int32_t bufferSize;
1351     uint8_t *buffer;
1352     int32_t X = NUMBER_4;
1353     uint8_t metaData[NUMBER_60];
1354     // 4. X=60 set调用成功 get调用成功 两者一致
1355     for (int i = 0; i < X; ++i) {
1356         metaData[i] = static_cast<uint8_t>(i);
1357     }
1358     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, X, metaData);
1359     if (flag != 0) {
1360         napi_create_int32(env, NUMBER_4001, &result);
1361         return result;
1362     }
1363     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, &bufferSize, &buffer);
1364     if (flag != 0) {
1365         napi_create_int32(env, NUMBER_4002, &result);
1366         return result;
1367     }
1368     if (bufferSize != NUMBER_4) {
1369         napi_create_int32(env, NUMBER_6003, &result);
1370         return result;
1371     }
1372     X = NUMBER_2999;
1373     uint8_t metaData2[X];
1374     for (int i = 0; i < X; ++i) {
1375         metaData2[i] = static_cast<uint8_t>(i);
1376     }
1377     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, X, metaData2);
1378     if (flag != 0) {
1379         napi_create_int32(env, NUMBER_5001, &result);
1380         return result;
1381     }
1382     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, &bufferSize, &buffer);
1383     if (flag != 0) {
1384         napi_create_int32(env, NUMBER_5002, &result);
1385         return result;
1386     }
1387     if (bufferSize != NUMBER_4) {
1388         napi_create_int32(env, NUMBER_6003, &result);
1389         return result;
1390     }
1391     delete[] buffer;
1392     napi_create_int32(env, SUCCESS, &result);
1393     return result;
1394 }
1395 
OHNativeBufferSetMetadataValue3(napi_env env,OH_NativeBuffer * nativeBuffer)1396 napi_value OHNativeBufferSetMetadataValue3(napi_env env, OH_NativeBuffer *nativeBuffer)
1397 {
1398     napi_value result = nullptr;
1399     int32_t bufferSize;
1400     uint8_t *buffer;
1401     int32_t X = NUMBER_3000;
1402     uint8_t metaData3[X];
1403     for (int i = 0; i < X; ++i) {
1404         metaData3[i] = static_cast<uint8_t>(i);
1405     }
1406     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, X, metaData3);
1407     if (flag != 0) {
1408         napi_create_int32(env, NUMBER_6001, &result);
1409         return result;
1410     }
1411     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, &bufferSize, &buffer);
1412     if (flag != 0) {
1413         napi_create_int32(env, NUMBER_6002, &result);
1414         return result;
1415     }
1416     if (bufferSize != NUMBER_4) {
1417         napi_create_int32(env, NUMBER_6003, &result);
1418         return result;
1419     }
1420 
1421     X = NUMBER_3001;
1422     uint8_t metaData4[X];
1423     for (int i = 0; i < X; ++i) {
1424         metaData4[i] = static_cast<uint8_t>(i);
1425     }
1426     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, X, metaData4);
1427     if (flag != 0) {
1428         napi_create_int32(env, NUMBER_7001, &result);
1429         return result;
1430     }
1431     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, &bufferSize, &buffer);
1432     if (flag != 0) {
1433         napi_create_int32(env, NUMBER_7002, &result);
1434         return result;
1435     }
1436     delete[] buffer;
1437     napi_create_int32(env, SUCCESS, &result);
1438     return result;
1439 }
1440 
OHNativeBufferSetMetadataValue4(napi_env env,OH_NativeBuffer * nativeBuffer)1441 napi_value OHNativeBufferSetMetadataValue4(napi_env env, OH_NativeBuffer *nativeBuffer)
1442 {
1443     napi_value result = nullptr;
1444     int32_t bufferSize;
1445     uint8_t *buffer;
1446     uint8_t metaData[NUMBER_60];
1447     int32_t X = NUMBER_100000000;
1448     auto flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, X, metaData);
1449     if (flag != 0) {
1450         napi_create_int32(env, NUMBER_8001, &result);
1451         return result;
1452     }
1453     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_METADATA_TYPE, &bufferSize, &buffer);
1454     if (flag != 0) {
1455         napi_create_int32(env, NUMBER_8002, &result);
1456         return result;
1457     }
1458     if (bufferSize != NUMBER_4) {
1459         napi_create_int32(env, NUMBER_8003, &result);
1460         return result;
1461     }
1462     delete[] buffer;
1463     napi_create_int32(env, SUCCESS, &result);
1464     return result;
1465 }
1466 
OHNativeBufferSetMetadataValue(napi_env env,napi_callback_info info)1467 static napi_value OHNativeBufferSetMetadataValue(napi_env env, napi_callback_info info)
1468 {
1469     napi_value result = nullptr;
1470     napi_create_array_with_length(env, NUMBER_20, &result);
1471     OH_NativeBuffer_Config nativeBufferConfig = {
1472         .width = 0x100,
1473         .height = 0x100,
1474         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1475         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1476     };
1477     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
1478 
1479     result = OHNativeBufferSetMetadataValue1(env, nativeBuffer);
1480     if (result != NULL) {
1481         return result;
1482     }
1483     result = OHNativeBufferSetMetadataValue2(env, nativeBuffer);
1484     if (result != NULL) {
1485         return result;
1486     }
1487     result = OHNativeBufferSetMetadataValue3(env, nativeBuffer);
1488     if (result != NULL) {
1489         return result;
1490     }
1491     result = OHNativeBufferSetMetadataValue4(env, nativeBuffer);
1492     if (result != NULL) {
1493         return result;
1494     }
1495 
1496     OH_NativeBuffer_Unreference(nativeBuffer);
1497     napi_create_int32(env, SUCCESS, &result);
1498     return result;
1499 }
OHNativeBufferSetNullMetadataValue(napi_env env,napi_callback_info info)1500 static napi_value OHNativeBufferSetNullMetadataValue(napi_env env, napi_callback_info info)
1501 {
1502     napi_value result = nullptr;
1503     OH_NativeBuffer_Config nativeBufferConfig = {
1504         .width = 0x100,
1505         .height = 0x100,
1506         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1507         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1508     };
1509     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
1510     OH_NativeBuffer_MetadataKey metadataKey = (OH_NativeBuffer_MetadataKey)(NUMBER_MINUS_1);
1511     int32_t size = NUMBER_60;
1512     uint8_t metadata = NUMBER_2;
1513     int32_t ret = OH_NativeBuffer_SetMetadataValue(nativeBuffer, metadataKey, size, &metadata);
1514     napi_create_int32(env, ret, &result);
1515     OH_NativeBuffer_Unreference(nativeBuffer);
1516     return result;
1517 }
OHNativeBufferSetMetadataValueNullptr(napi_env env,napi_callback_info info)1518 static napi_value OHNativeBufferSetMetadataValueNullptr(napi_env env, napi_callback_info info)
1519 {
1520     napi_value result = nullptr;
1521     napi_value result1 = nullptr;
1522     napi_create_array_with_length(env, NUMBER_2, &result);
1523     OH_NativeBuffer_Config nativeBufferConfig = {
1524         .width = 0x100,
1525         .height = 0x100,
1526         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1527         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1528     };
1529     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
1530     OH_NativeBuffer_MetadataKey metadataKey = OH_NativeBuffer_MetadataKey::OH_HDR_METADATA_TYPE;
1531     int32_t size = NUMBER_60;
1532     uint8_t metadata = NUMBER_2;
1533     int32_t ret = OH_NativeBuffer_SetMetadataValue(nullptr, metadataKey, size, &metadata);
1534     napi_create_int32(env, ret, &result1);
1535     napi_set_element(env, result, NUMBER_0, result1);
1536     ret = OH_NativeBuffer_SetMetadataValue(nativeBuffer, metadataKey, size, nullptr);
1537     napi_create_int32(env, ret, &result1);
1538     napi_set_element(env, result, NUMBER_1, result1);
1539     OH_NativeBuffer_Unreference(nativeBuffer);
1540     return result;
1541 }
OHNativeBufferGetMetadataValueAbnormal(napi_env env,napi_callback_info info)1542 static napi_value OHNativeBufferGetMetadataValueAbnormal(napi_env env, napi_callback_info info)
1543 {
1544     napi_value result = nullptr;
1545     napi_value result1 = nullptr;
1546     napi_create_array_with_length(env, NUMBER_2, &result);
1547     OH_NativeBuffer_Config nativeBufferConfig = {
1548         .width = 0x100,
1549         .height = 0x100,
1550         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1551         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1552     };
1553     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
1554     OH_NativeBuffer_MetadataKey metadataKey = OH_NativeBuffer_MetadataKey::OH_HDR_METADATA_TYPE;
1555     int32_t size = NUMBER_60;
1556     uint8_t *metadata = nullptr;
1557     int32_t ret = OH_NativeBuffer_GetMetadataValue(nullptr, metadataKey, &size, &metadata);
1558     napi_create_int32(env, ret, &result1);
1559     napi_set_element(env, result, NUMBER_0, result1);
1560     ret = OH_NativeBuffer_GetMetadataValue(nativeBuffer, metadataKey, &size, nullptr);
1561     napi_create_int32(env, ret, &result1);
1562     napi_set_element(env, result, NUMBER_1, result1);
1563     OH_NativeBuffer_Unreference(nativeBuffer);
1564     return result;
1565 }
OHNativeBufferGetMetadataValueNullptr(napi_env env,napi_callback_info info)1566 static napi_value OHNativeBufferGetMetadataValueNullptr(napi_env env, napi_callback_info info)
1567 {
1568     napi_value result = nullptr;
1569     napi_value result1 = nullptr;
1570     napi_create_array_with_length(env, NUMBER_6, &result);
1571     OH_NativeBuffer_Config nativeBufferConfig = {
1572         .width = 0x100,
1573         .height = 0x100,
1574         .format = NATIVEBUFFER_PIXEL_FMT_RGBA_8888,
1575         .usage = NATIVEBUFFER_USAGE_CPU_READ | NATIVEBUFFER_USAGE_CPU_WRITE | NATIVEBUFFER_USAGE_MEM_DMA,
1576     };
1577     OH_NativeBuffer *nativeBuffer = OH_NativeBuffer_Alloc(&nativeBufferConfig);
1578     int32_t flag;
1579     uint8_t *buffer = new uint8_t[NUMBER_60];
1580     int32_t ret1;
1581     uint8_t *ret2;
1582     // 1.
1583     flag = OH_NativeBuffer_SetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, NUMBER_60, buffer);
1584     if (flag != 0) {
1585         napi_create_int32(env, flag, &result);
1586         return result;
1587     }
1588     // 2.
1589     flag = OH_NativeBuffer_GetMetadataValue(nullptr, OH_HDR_DYNAMIC_METADATA, &ret1, &ret2);
1590     if (flag != NUMBER_40001000) {
1591         napi_create_int32(env, NUMBER_2, &result);
1592         return result;
1593     }
1594     // 3.
1595     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, nullptr, &ret2);
1596     if (flag != NUMBER_40001000) {
1597         napi_create_int32(env, NUMBER_3, &result);
1598         return result;
1599     }
1600     // 4.
1601     flag = OH_NativeBuffer_GetMetadataValue(nativeBuffer, OH_HDR_DYNAMIC_METADATA, &ret1, nullptr);
1602     if (flag != NUMBER_40001000) {
1603         napi_create_int32(env, NUMBER_4, &result);
1604         return result;
1605     }
1606     delete[] buffer;
1607     OH_NativeBuffer_Unreference(nativeBuffer);
1608     napi_create_int32(env, SUCCESS, &result);
1609     return result;
1610 }
1611 
NativeBufferInit(napi_env env,napi_value exports)1612 napi_value NativeBufferInit(napi_env env, napi_value exports)
1613 {
1614     napi_property_descriptor desc[] = {
1615         {"oHNativeBufferAlloc", nullptr, OHNativeBufferAlloc, nullptr, nullptr, nullptr, napi_default, nullptr},
1616         {"oHNativeBufferReference", nullptr, OHNativeBufferReference, nullptr, nullptr, nullptr, napi_default, nullptr},
1617         {"oHNativeBufferUnreference", nullptr, OHNativeBufferUnreference, nullptr, nullptr, nullptr, napi_default,
1618          nullptr},
1619         {"oHNativeBufferGetConfig", nullptr, OHNativeBufferGetConfig, nullptr, nullptr, nullptr, napi_default, nullptr},
1620         {"oHNativeBufferMap", nullptr, OHNativeBufferMap, nullptr, nullptr, nullptr, napi_default, nullptr},
1621         {"oHNativeBufferUnmap", nullptr, OHNativeBufferUnmap, nullptr, nullptr, nullptr, napi_default, nullptr},
1622         {"oHNativeBufferGetSeqNum", nullptr, OHNativeBufferGetSeqNum, nullptr, nullptr, nullptr, napi_default, nullptr},
1623         {"oHNativeBufferAllocAbnormal", nullptr, OHNativeBufferAllocAbnormal, nullptr, nullptr, nullptr, napi_default,
1624          nullptr},
1625         {"oHNativeBufferReferenceAbnormal", nullptr, OHNativeBufferReferenceAbnormal, nullptr, nullptr, nullptr,
1626          napi_default, nullptr},
1627         {"oHNativeBufferUnreferenceAbnormal", nullptr, OHNativeBufferUnreferenceAbnormal, nullptr, nullptr, nullptr,
1628          napi_default, nullptr},
1629         {"oHNativeBufferMapAbnormal", nullptr, OHNativeBufferMapAbnormal, nullptr, nullptr, nullptr, napi_default,
1630          nullptr},
1631         {"oHNativeBufferUnmapAbnormal", nullptr, OHNativeBufferUnmapAbnormal, nullptr, nullptr, nullptr, napi_default,
1632          nullptr},
1633         {"oHNativeBufferGetSeqNumAbnormal", nullptr, OHNativeBufferGetSeqNumAbnormal, nullptr, nullptr, nullptr,
1634          napi_default, nullptr},
1635         {"oHNativeBufferAllocNullptr", nullptr, OHNativeBufferAllocNullptr, nullptr, nullptr, nullptr, napi_default,
1636          nullptr},
1637         {"oHNativeBufferAllocNormal", nullptr, OHNativeBufferAllocNormal, nullptr, nullptr, nullptr, napi_default,
1638          nullptr},
1639     };
1640     napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc);
1641     return exports;
1642 }
1643 
NativeBufferInit2(napi_env env,napi_value exports)1644 napi_value NativeBufferInit2(napi_env env, napi_value exports)
1645 {
1646     napi_property_descriptor desc[] = {
1647         {"oHNativeBufferAllocAbormal", nullptr, OHNativeBufferAllocAbormal, nullptr, nullptr, nullptr, napi_default,
1648          nullptr},
1649         {"oHNativeBufferAllocMuch", nullptr, OHNativeBufferAllocMuch, nullptr, nullptr, nullptr, napi_default, nullptr},
1650         {"oHNativeBufferFromNativeWindowBufferNullptr", nullptr, OHNativeBufferFromNativeWindowBufferNullptr, nullptr,
1651          nullptr, nullptr, napi_default, nullptr},
1652         {"oHNativeBufferFromNativeWindowBufferNormal", nullptr, OHNativeBufferFromNativeWindowBufferNormal, nullptr,
1653          nullptr, nullptr, napi_default, nullptr},
1654         {"oHNativeBufferGetConfigNullptr", nullptr, OHNativeBufferGetConfigNullptr, nullptr, nullptr, nullptr,
1655          napi_default, nullptr},
1656         {"oHNativeBufferGetConfigNormal", nullptr, OHNativeBufferGetConfigNormal, nullptr, nullptr, nullptr,
1657          napi_default, nullptr},
1658         {"oHNativeBufferGetSeqNumNullptr", nullptr, OHNativeBufferGetSeqNumNullptr, nullptr, nullptr, nullptr,
1659          napi_default, nullptr},
1660         {"oHNativeBufferGetSeqNumNormal", nullptr, OHNativeBufferGetSeqNumNormal, nullptr, nullptr, nullptr,
1661          napi_default, nullptr},
1662         {"oHNativeBuffeMapNullptr", nullptr, OHNativeBuffeMapNullptr, nullptr, nullptr, nullptr, napi_default, nullptr},
1663         {"oHNativeBufferMapNormal", nullptr, OHNativeBufferMapNormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1664         {"oHNativeBuffeMapPlanesNullptr", nullptr, OHNativeBuffeMapPlanesNullptr, nullptr, nullptr, nullptr,
1665          napi_default, nullptr},
1666         {"oHNativeBufferMapPlanesAbNormal", nullptr, OHNativeBufferMapPlanesAbNormal, nullptr, nullptr, nullptr,
1667          napi_default, nullptr},
1668         {"oHNativeBufferMapPlanesNormal", nullptr, OHNativeBufferMapPlanesNormal, nullptr, nullptr, nullptr,
1669          napi_default, nullptr},
1670         {"oHNativeBuffeReferenceNullptr", nullptr, OHNativeBuffeReferenceNullptr, nullptr, nullptr, nullptr,
1671          napi_default, nullptr},
1672         {"oHNativeBuffeUnreferenceNullptr", nullptr, OHNativeBuffeUnreferenceNullptr, nullptr, nullptr, nullptr,
1673          napi_default, nullptr},
1674         {"oHNativeBufferReferenceNormal", nullptr, OHNativeBufferReferenceNormal, nullptr, nullptr, nullptr,
1675          napi_default, nullptr},
1676         {"oHNativeBufferReferenceMax", nullptr, OHNativeBufferReferenceMax, nullptr, nullptr, nullptr, napi_default,
1677          nullptr},
1678         {"oHNativeBufferUnreferenceNormal", nullptr, OHNativeBufferUnreferenceNormal, nullptr, nullptr, nullptr,
1679          napi_default, nullptr},
1680     };
1681     napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc);
1682     return exports;
1683 }
1684 
1685 EXTERN_C_START
Init(napi_env env,napi_value exports)1686 static napi_value Init(napi_env env, napi_value exports)
1687 {
1688     NativeBufferInit(env, exports);
1689     NativeBufferInit2(env, exports);
1690     napi_property_descriptor desc[] = {
1691         {"oHNativeBuffeUnmapNullptr", nullptr, OHNativeBuffeUnmapNullptr, nullptr, nullptr, nullptr, napi_default,
1692          nullptr},
1693         {"oHNativeBufferUnmapNormal", nullptr, OHNativeBufferUnmapNormal, nullptr, nullptr, nullptr, napi_default,
1694          nullptr},
1695         {"oHNativeBufferGetColorSpaceFirst", nullptr, OHNativeBufferGetColorSpaceFirst, nullptr, nullptr, nullptr,
1696          napi_default, nullptr},
1697         {"oHNativeBufferSetColorSpaceNormal", nullptr, OHNativeBufferSetColorSpaceNormal, nullptr, nullptr, nullptr,
1698          napi_default, nullptr},
1699         {"oHNativeBufferSetColorSpaceNullptr", nullptr, OHNativeBufferSetColorSpaceNullptr, nullptr, nullptr, nullptr,
1700          napi_default, nullptr},
1701         {"oHNativeBufferSetColorSpaceAbnormal", nullptr, OHNativeBufferSetColorSpaceAbnormal, nullptr, nullptr, nullptr,
1702          napi_default, nullptr},
1703         {"oHNativeBufferGetColorSpaceNullptr", nullptr, OHNativeBufferGetColorSpaceNullptr, nullptr, nullptr, nullptr,
1704          napi_default, nullptr},
1705         {"oHNativeBufferGetMetadataValueFirst", nullptr, OHNativeBufferGetMetadataValueFirst, nullptr, nullptr, nullptr,
1706          napi_default, nullptr},
1707         {"oHNativeBufferSetDynamicMetadataValue", nullptr, OHNativeBufferSetDynamicMetadataValue, nullptr, nullptr,
1708          nullptr, napi_default, nullptr},
1709         {"oHNativeBufferSetMetadataValueTimes", nullptr, OHNativeBufferSetMetadataValueTimes, nullptr, nullptr, nullptr,
1710          napi_default, nullptr},
1711         {"oHNativeBufferSetStaticMetadataValue", nullptr, OHNativeBufferSetStaticMetadataValue, nullptr, nullptr,
1712          nullptr, napi_default, nullptr},
1713         {"oHNativeBufferSetMetadataValue", nullptr, OHNativeBufferSetMetadataValue, nullptr, nullptr, nullptr,
1714          napi_default, nullptr},
1715         {"oHNativeBufferSetNullMetadataValue", nullptr, OHNativeBufferSetNullMetadataValue, nullptr, nullptr, nullptr,
1716          napi_default, nullptr},
1717         {"oHNativeBufferSetMetadataValueNullptr", nullptr, OHNativeBufferSetMetadataValueNullptr, nullptr, nullptr,
1718          nullptr, napi_default, nullptr},
1719         {"oHNativeBufferGetMetadataValueAbnormal", nullptr, OHNativeBufferGetMetadataValueAbnormal, nullptr, nullptr,
1720          nullptr, napi_default, nullptr},
1721         {"oHNativeBufferGetMetadataValueNullptr", nullptr, OHNativeBufferGetMetadataValueNullptr, nullptr, nullptr,
1722          nullptr, napi_default, nullptr},
1723     };
1724     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
1725     return exports;
1726 }
1727 EXTERN_C_END
1728 
1729 static napi_module demoModule = {
1730     .nm_version = 1,
1731     .nm_flags = 0,
1732     .nm_filename = nullptr,
1733     .nm_register_func = Init,
1734     .nm_modname = "nativebuffer",
1735     .nm_priv = ((void *)0),
1736     .reserved = {0},
1737 };
1738 
RegisterModule(void)1739 extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); };
1740