• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 #include "napi/native_api.h"
16 #include <cstdint>
17 #include <hilog/log.h>
18 #include <multimedia/player_framework/native_avcodec_base.h>
19 #include <native_image/native_image.h>
20 #include <native_window/external_window.h>
21 #include <native_buffer/native_buffer.h>
22 #include "ace/xcomponent/native_interface_xcomponent.h"
23 #include "NativeBufferTest.h"
24 #include "nativewindow.h"
25 #define SUCCESS 0
addNativeBufferTest1(std::vector<napi_property_descriptor> & descData)26 void addNativeBufferTest1(std::vector<napi_property_descriptor>& descData)
27 {
28     descData.push_back({"testNativeBufferEBUFULL", nullptr, testNativeBufferEBUFULL,
29             nullptr, nullptr, nullptr, napi_default, nullptr});
30     descData.push_back({"testNativeBufferSMPTECFULL", nullptr, testNativeBufferSMPTECFULL,
31             nullptr, nullptr, nullptr, napi_default, nullptr});
32     descData.push_back({"testNativeBufferEBULIMIT", nullptr, testNativeBufferEBULIMIT,
33              nullptr, nullptr, nullptr, napi_default, nullptr});
34     descData.push_back({"testNativeBufferSMPTECLIMIT", nullptr, testNativeBufferSMPTECLIMIT,
35             nullptr, nullptr, nullptr, napi_default, nullptr});
36     descData.push_back({"testNativeBufferADOBERGBFULL", nullptr, testNativeBufferADOBERGBFULL,
37             nullptr, nullptr, nullptr, napi_default, nullptr});
38     descData.push_back({"testNativeLINEARSRGB", nullptr, testNativeLINEARSRGB,
39             nullptr, nullptr, nullptr, napi_default, nullptr});
40     descData.push_back({"testNativeBufferLINEARBT709", nullptr, testNativeBufferLINEARBT709,
41             nullptr, nullptr, nullptr, napi_default, nullptr});
42     descData.push_back({"testNativeLINEARP3", nullptr, testNativeLINEARP3,
43             nullptr, nullptr, nullptr, napi_default, nullptr});
44     descData.push_back({"testNativeBufferLINEARBT2020", nullptr, testNativeBufferLINEARBT2020,
45             nullptr, nullptr, nullptr, napi_default, nullptr});
46     descData.push_back({"testNativeBufferDISPLAYSRGB", nullptr, testNativeBufferDISPLAYSRGB,
47             nullptr, nullptr, nullptr, napi_default, nullptr});
48     descData.push_back({"testNativeBufferDISPLAYP3SRGB", nullptr, testNativeBufferDISPLAYP3SRGB,
49             nullptr, nullptr, nullptr, napi_default, nullptr});
50 }
addNativeBufferTest(std::vector<napi_property_descriptor> & descData)51 void addNativeBufferTest(std::vector<napi_property_descriptor>& descData)
52 {
53     addNativeBufferTest1(descData);
54     descData.push_back({"testNativeBufferDISPLAYP3HLG", nullptr, testNativeBufferDISPLAYP3HLG,
55             nullptr, nullptr, nullptr, napi_default, nullptr});
56     descData.push_back({"testNativeBufferDISPLAYP3PQ", nullptr, testNativeBufferDISPLAYP3PQ,
57             nullptr, nullptr, nullptr, napi_default, nullptr});
58     descData.push_back({"testNativeBufferDISPLAYBT2020SRGB", nullptr, testNativeBufferDISPLAYBT2020SRGB,
59             nullptr, nullptr, nullptr, napi_default, nullptr});
60     descData.push_back({"testNativeBufferDISPLAYBT2020HLG", nullptr, testNativeBufferDISPLAYBT2020HLG,
61             nullptr, nullptr, nullptr, napi_default, nullptr});
62     descData.push_back({"testNativeBufferDISPLAYBT2020PQ", nullptr, testNativeBufferDISPLAYBT2020PQ,
63             nullptr, nullptr, nullptr, napi_default, nullptr});
64     descData.push_back({"ColorX", nullptr, ColorX, nullptr, nullptr, nullptr, napi_default, nullptr});
65     descData.push_back({"ColorY", nullptr, ColorY, nullptr, nullptr, nullptr, napi_default, nullptr});
66     descData.push_back({"Smpte2086Red", nullptr, Smpte2086Red, nullptr, nullptr, nullptr, napi_default, nullptr});
67     descData.push_back({"Smpte2086Green", nullptr, Smpte2086Green, nullptr, nullptr, nullptr, napi_default, nullptr});
68     descData.push_back({"Smpte2086Blue", nullptr, Smpte2086Blue, nullptr, nullptr, nullptr, napi_default, nullptr});
69     descData.push_back({"Smpte2086WhitePoint", nullptr, Smpte2086WhitePoint,
70             nullptr, nullptr, nullptr, napi_default, nullptr});
71     descData.push_back({"Smpte2086MaxLum", nullptr, Smpte2086MaxLum,
72             nullptr, nullptr, nullptr, napi_default, nullptr});
73     descData.push_back({"Smpte2086MinLum", nullptr, Smpte2086MinLum,
74             nullptr, nullptr, nullptr, napi_default, nullptr});
75     descData.push_back({"Cta861MaxContentLightLevel", nullptr, Cta861MaxContentLightLevel,
76             nullptr, nullptr, nullptr, napi_default, nullptr});
77     descData.push_back({"Cta861MaxFrameAverageLightLevel", nullptr, Cta861MaxFrameAverageLightLevel,
78             nullptr, nullptr, nullptr, napi_default, nullptr});
79 }
testNativeBufferEBUFULL(napi_env env,napi_callback_info info)80 napi_value testNativeBufferEBUFULL(napi_env env, napi_callback_info info)
81 {
82     napi_value result = nullptr;
83     InitNativeWindow *initNative = new InitNativeWindow();
84     OHNativeWindow *nativeWindow = nullptr;
85     nativeWindow = initNative->returnNativeWindow();
86     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_BT601_EBU_FULL);
87     napi_create_int32(env, res, &result);
88     return result;
89 }
90 
testNativeBufferSMPTECFULL(napi_env env,napi_callback_info info)91 napi_value testNativeBufferSMPTECFULL(napi_env env, napi_callback_info info)
92 {
93     napi_value result = nullptr;
94     InitNativeWindow *initNative = new InitNativeWindow();
95     OHNativeWindow *nativeWindow = nullptr;
96     nativeWindow = initNative->returnNativeWindow();
97     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_BT601_SMPTE_C_FULL);
98     napi_create_int32(env, res, &result);
99     return result;
100 }
101 
testNativeBufferEBULIMIT(napi_env env,napi_callback_info info)102 napi_value testNativeBufferEBULIMIT(napi_env env, napi_callback_info info)
103 {
104     napi_value result = nullptr;
105     InitNativeWindow *initNative = new InitNativeWindow();
106     OHNativeWindow *nativeWindow = nullptr;
107     nativeWindow = initNative->returnNativeWindow();
108     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_BT601_EBU_LIMIT);
109     napi_create_int32(env, res, &result);
110     return result;
111 }
112 
testNativeBufferSMPTECLIMIT(napi_env env,napi_callback_info info)113 napi_value testNativeBufferSMPTECLIMIT(napi_env env, napi_callback_info info)
114 {
115     napi_value result = nullptr;
116     InitNativeWindow *initNative = new InitNativeWindow();
117     OHNativeWindow *nativeWindow = nullptr;
118     nativeWindow = initNative->returnNativeWindow();
119     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_BT601_SMPTE_C_LIMIT);
120     napi_create_int32(env, res, &result);
121     return result;
122 }
123 
testNativeBufferADOBERGBFULL(napi_env env,napi_callback_info info)124 napi_value testNativeBufferADOBERGBFULL(napi_env env, napi_callback_info info)
125 {
126     napi_value result = nullptr;
127     InitNativeWindow *initNative = new InitNativeWindow();
128     OHNativeWindow *nativeWindow = nullptr;
129     nativeWindow = initNative->returnNativeWindow();
130     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_ADOBERGB_FULL);
131     napi_create_int32(env, res, &result);
132     return result;
133 }
134 
testNativeLINEARSRGB(napi_env env,napi_callback_info info)135 napi_value testNativeLINEARSRGB(napi_env env, napi_callback_info info)
136 {
137     napi_value result = nullptr;
138     InitNativeWindow *initNative = new InitNativeWindow();
139     OHNativeWindow *nativeWindow = nullptr;
140     nativeWindow = initNative->returnNativeWindow();
141     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_LINEAR_SRGB);
142     napi_create_int32(env, res, &result);
143     return result;
144 }
145 
testNativeBufferLINEARBT709(napi_env env,napi_callback_info info)146 napi_value testNativeBufferLINEARBT709(napi_env env, napi_callback_info info)
147 {
148     napi_value result = nullptr;
149     InitNativeWindow *initNative = new InitNativeWindow();
150     OHNativeWindow *nativeWindow = nullptr;
151     nativeWindow = initNative->returnNativeWindow();
152     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_LINEAR_BT709);
153     napi_create_int32(env, res, &result);
154     return result;
155 }
156 
testNativeLINEARP3(napi_env env,napi_callback_info info)157 napi_value testNativeLINEARP3(napi_env env, napi_callback_info info)
158 {
159     napi_value result = nullptr;
160     InitNativeWindow *initNative = new InitNativeWindow();
161     OHNativeWindow *nativeWindow = nullptr;
162     nativeWindow = initNative->returnNativeWindow();
163     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_LINEAR_P3);
164     napi_create_int32(env, res, &result);
165     return result;
166 }
167 
testNativeBufferLINEARBT2020(napi_env env,napi_callback_info info)168 napi_value testNativeBufferLINEARBT2020(napi_env env, napi_callback_info info)
169 {
170     napi_value result = nullptr;
171     InitNativeWindow *initNative = new InitNativeWindow();
172     OHNativeWindow *nativeWindow = nullptr;
173     nativeWindow = initNative->returnNativeWindow();
174     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_LINEAR_BT2020);
175     napi_create_int32(env, res, &result);
176     return result;
177 }
178 
testNativeBufferDISPLAYSRGB(napi_env env,napi_callback_info info)179 napi_value testNativeBufferDISPLAYSRGB(napi_env env, napi_callback_info info)
180 {
181     napi_value result = nullptr;
182     InitNativeWindow *initNative = new InitNativeWindow();
183     OHNativeWindow *nativeWindow = nullptr;
184     nativeWindow = initNative->returnNativeWindow();
185     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_DISPLAY_SRGB);
186     napi_create_int32(env, res, &result);
187     return result;
188 }
189 
testNativeBufferDISPLAYP3SRGB(napi_env env,napi_callback_info info)190 napi_value testNativeBufferDISPLAYP3SRGB(napi_env env, napi_callback_info info)
191 {
192     napi_value result = nullptr;
193     InitNativeWindow *initNative = new InitNativeWindow();
194     OHNativeWindow *nativeWindow = nullptr;
195     nativeWindow = initNative->returnNativeWindow();
196     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_DISPLAY_P3_SRGB);
197     napi_create_int32(env, res, &result);
198     return result;
199 }
200 
testNativeBufferDISPLAYP3HLG(napi_env env,napi_callback_info info)201 napi_value testNativeBufferDISPLAYP3HLG(napi_env env, napi_callback_info info)
202 {
203     napi_value result = nullptr;
204     InitNativeWindow *initNative = new InitNativeWindow();
205     OHNativeWindow *nativeWindow = nullptr;
206     nativeWindow = initNative->returnNativeWindow();
207     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_DISPLAY_P3_HLG);
208     napi_create_int32(env, res, &result);
209     return result;
210 }
211 
testNativeBufferDISPLAYP3PQ(napi_env env,napi_callback_info info)212 napi_value testNativeBufferDISPLAYP3PQ(napi_env env, napi_callback_info info)
213 {
214     napi_value result = nullptr;
215     InitNativeWindow *initNative = new InitNativeWindow();
216     OHNativeWindow *nativeWindow = nullptr;
217     nativeWindow = initNative->returnNativeWindow();
218     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_DISPLAY_P3_PQ);
219     napi_create_int32(env, res, &result);
220     return result;
221 }
222 
testNativeBufferDISPLAYBT2020SRGB(napi_env env,napi_callback_info info)223 napi_value testNativeBufferDISPLAYBT2020SRGB(napi_env env, napi_callback_info info)
224 {
225     napi_value result = nullptr;
226     InitNativeWindow *initNative = new InitNativeWindow();
227     OHNativeWindow *nativeWindow = nullptr;
228     nativeWindow = initNative->returnNativeWindow();
229     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_DISPLAY_BT2020_SRGB);
230     napi_create_int32(env, res, &result);
231     return result;
232 }
233 
testNativeBufferDISPLAYBT2020HLG(napi_env env,napi_callback_info info)234 napi_value testNativeBufferDISPLAYBT2020HLG(napi_env env, napi_callback_info info)
235 {
236     napi_value result = nullptr;
237     InitNativeWindow *initNative = new InitNativeWindow();
238     OHNativeWindow *nativeWindow = nullptr;
239     nativeWindow = initNative->returnNativeWindow();
240     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_DISPLAY_BT2020_HLG);
241     napi_create_int32(env, res, &result);
242     return result;
243 }
244 
testNativeBufferDISPLAYBT2020PQ(napi_env env,napi_callback_info info)245 napi_value testNativeBufferDISPLAYBT2020PQ(napi_env env, napi_callback_info info)
246 {
247     napi_value result = nullptr;
248     InitNativeWindow *initNative = new InitNativeWindow();
249     OHNativeWindow *nativeWindow = nullptr;
250     nativeWindow = initNative->returnNativeWindow();
251     int32_t res = OH_NativeWindow_SetColorSpace(nativeWindow, OH_COLORSPACE_DISPLAY_BT2020_PQ);
252     napi_create_int32(env, res, &result);
253     return result;
254 }
255 
ColorX(napi_env env,napi_callback_info info)256 napi_value ColorX(napi_env env, napi_callback_info info)
257 {
258     OH_NativeBuffer_ColorXY *pColor = new OH_NativeBuffer_ColorXY();
259     pColor->x = 0.1f;
260     pColor->y = 0.9f;
261     if (pColor->x == 0.1f) {
262         napi_value result = nullptr;
263         napi_create_int32(env, 0, &result);
264         return result;
265     } else {
266         napi_value result = nullptr;
267         napi_create_int32(env, -1, &result);
268         return result;
269     }
270 }
271 
ColorY(napi_env env,napi_callback_info info)272 napi_value ColorY(napi_env env, napi_callback_info info)
273 {
274     OH_NativeBuffer_ColorXY *pColor = new OH_NativeBuffer_ColorXY();
275     pColor->x = 0.1f;
276     pColor->y = 0.9f;
277     if (pColor->y == 0.9f) {
278         napi_value result = nullptr;
279         napi_create_int32(env, 0, &result);
280         return result;
281     } else {
282         napi_value result = nullptr;
283         napi_create_int32(env, -1, &result);
284         return result;
285     }
286 }
287 
Smpte2086Red(napi_env env,napi_callback_info info)288 napi_value Smpte2086Red(napi_env env, napi_callback_info info)
289 {
290     // 构造测试数据
291     OH_NativeBuffer_ColorXY red;
292     red.x = 0.7f;
293     red.y = 0.3f;
294 
295     OH_NativeBuffer_Smpte2086 metadata;
296     metadata.displayPrimaryRed = red;
297     if (metadata.displayPrimaryRed.x == 0.7f && metadata.displayPrimaryRed.y == 0.3f) {
298         napi_value result = nullptr;
299         napi_create_int32(env, 0, &result);
300         return result;
301     } else {
302         napi_value result = nullptr;
303         napi_create_int32(env, -1, &result);
304         return result;
305     }
306 }
307 
Smpte2086Green(napi_env env,napi_callback_info info)308 napi_value Smpte2086Green(napi_env env, napi_callback_info info)
309 {
310     OH_NativeBuffer_ColorXY green;
311     green.x = 0.2f;
312     green.y = 0.8f;
313     OH_NativeBuffer_Smpte2086 metadata;
314     metadata.displayPrimaryGreen = green;
315     if (metadata.displayPrimaryGreen.x == 0.2f && metadata.displayPrimaryGreen.y == 0.8f) {
316         napi_value result = nullptr;
317         napi_create_int32(env, 0, &result);
318         return result;
319     } else {
320         napi_value result = nullptr;
321         napi_create_int32(env, -1, &result);
322         return result;
323     }
324 }
325 
Smpte2086Blue(napi_env env,napi_callback_info info)326 napi_value Smpte2086Blue(napi_env env, napi_callback_info info)
327 {
328     OH_NativeBuffer_ColorXY blue;
329     blue.x = 0.1f;
330     blue.y = 0.1f;
331     OH_NativeBuffer_Smpte2086 metadata;
332     metadata.displayPrimaryBlue = blue;
333     if (metadata.displayPrimaryBlue.x == 0.1f && metadata.displayPrimaryBlue.y == 0.1f) {
334         napi_value result = nullptr;
335         napi_create_int32(env, 0, &result);
336         return result;
337     } else {
338         napi_value result = nullptr;
339         napi_create_int32(env, -1, &result);
340         return result;
341     }
342 }
343 
Smpte2086WhitePoint(napi_env env,napi_callback_info info)344 napi_value Smpte2086WhitePoint(napi_env env, napi_callback_info info)
345 {
346     OH_NativeBuffer_ColorXY whitePoint;
347     whitePoint.x = 0.3127f;
348     whitePoint.y = 0.3290f;
349     OH_NativeBuffer_Smpte2086 metadata;
350     metadata.whitePoint = whitePoint;
351     if (metadata.whitePoint.x == 0.3127f && metadata.whitePoint.y == 0.3290f) {
352         napi_value result = nullptr;
353         napi_create_int32(env, 0, &result);
354         return result;
355     } else {
356         napi_value result = nullptr;
357         napi_create_int32(env, -1, &result);
358         return result;
359     }
360 }
361 
Smpte2086MaxLum(napi_env env,napi_callback_info info)362 napi_value Smpte2086MaxLum(napi_env env, napi_callback_info info)
363 {
364     float maxLum = 1000.0f;
365     OH_NativeBuffer_Smpte2086 metadata;
366     metadata.maxLuminance = maxLum;
367     if (metadata.maxLuminance == 1000.0f) {
368         napi_value result = nullptr;
369         napi_create_int32(env, 0, &result);
370         return result;
371     } else {
372         napi_value result = nullptr;
373         napi_create_int32(env, -1, &result);
374         return result;
375     }
376 }
377 
Smpte2086MinLum(napi_env env,napi_callback_info info)378 napi_value Smpte2086MinLum(napi_env env, napi_callback_info info)
379 {
380     float minLum = 1000.0f;
381     OH_NativeBuffer_Smpte2086 metadata;
382     metadata.minLuminance = minLum;
383     if (metadata.minLuminance == 1000.0f) {
384         napi_value result = nullptr;
385         napi_create_int32(env, 0, &result);
386         return result;
387     } else {
388         napi_value result = nullptr;
389         napi_create_int32(env, -1, &result);
390         return result;
391     }
392 }
393 
Cta861MaxContentLightLevel(napi_env env,napi_callback_info info)394 napi_value Cta861MaxContentLightLevel(napi_env env, napi_callback_info info)
395 {
396     float maxContentLight = 1000.0f;
397     OH_NativeBuffer_Cta861 metadata;
398     metadata.maxContentLightLevel = maxContentLight;
399     if (metadata.maxContentLightLevel == 1000.0f) {
400         napi_value result = nullptr;
401         napi_create_int32(env, 0, &result);
402         return result;
403     } else {
404         napi_value result = nullptr;
405         napi_create_int32(env, -1, &result);
406         return result;
407     }
408 }
409 
Cta861MaxFrameAverageLightLevel(napi_env env,napi_callback_info info)410 napi_value Cta861MaxFrameAverageLightLevel(napi_env env, napi_callback_info info)
411 {
412     float maxFrameAverageLight = 200.0f;
413     OH_NativeBuffer_Cta861 metadata;
414     metadata.maxFrameAverageLightLevel = maxFrameAverageLight;
415     if (metadata.maxFrameAverageLightLevel == 200.0f) {
416         napi_value result = nullptr;
417         napi_create_int32(env, 0, &result);
418         return result;
419     } else {
420         napi_value result = nullptr;
421         napi_create_int32(env, -1, &result);
422         return result;
423     }
424 }
425 
smpte2086(napi_env env,napi_callback_info info)426 napi_value smpte2086(napi_env env, napi_callback_info info)
427 {
428     OH_NativeBuffer_StaticMetadata metadata;
429     metadata.smpte2086 = {.displayPrimaryRed = {0.7f, 0.3f},
430                           .displayPrimaryGreen = {0.2f, 0.8f},
431                           .displayPrimaryBlue = {0.1f, 0.1f},
432                           .whitePoint = {0.3127f, 0.3290f},
433                           .maxLuminance = 1000.0f,
434                           .minLuminance = 0.0001f};
435     if (metadata.smpte2086.displayPrimaryRed.x == 0.7f && metadata.smpte2086.displayPrimaryRed.y == 0.3f &&
436         metadata.smpte2086.displayPrimaryGreen.x == 0.2f && metadata.smpte2086.displayPrimaryGreen.y == 0.8f &&
437         metadata.smpte2086.displayPrimaryBlue.x == 0.1f && metadata.smpte2086.displayPrimaryBlue.y == 0.1f &&
438         metadata.smpte2086.whitePoint.x == 0.3127f && metadata.smpte2086.whitePoint.y == 0.3290f &&
439         metadata.smpte2086.maxLuminance == 1000.0f && metadata.smpte2086.minLuminance == 0.0001f) {
440         napi_value result = nullptr;
441         napi_create_int32(env, 0, &result);
442         return result;
443     } else {
444         napi_value result = nullptr;
445         napi_create_int32(env, -1, &result);
446         return result;
447     }
448 }
449 
cta861(napi_env env,napi_callback_info info)450 napi_value cta861(napi_env env, napi_callback_info info)
451 {
452     OH_NativeBuffer_StaticMetadata metadata;
453     metadata.cta861 = {.maxContentLightLevel = 1000.0f, .maxFrameAverageLightLevel = 200.0f};
454     if (metadata.cta861.maxContentLightLevel == 1000.0f && metadata.cta861.maxFrameAverageLightLevel == 200.0f) {
455         napi_value result = nullptr;
456         napi_create_int32(env, 0, &result);
457         return result;
458     } else {
459         napi_value result = nullptr;
460         napi_create_int32(env, -1, &result);
461         return result;
462     }
463 }