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_window/graphic_error_code.h>
22 #include <native_buffer/native_buffer.h>
23 #include "ace/xcomponent/native_interface_xcomponent.h"
24 #include "ExternalWindowTest.h"
25 #include "nativewindow.h"
26 #define SUCCESS 0
27 #define CONSTANT_100000 100000
28 #define CONSTANT_60 60
addExternalWindowTest(std::vector<napi_property_descriptor> & descData)29 void addExternalWindowTest(std::vector<napi_property_descriptor>& descData)
30 {
31 descData.push_back({"testOHScalingModeToWindow", nullptr, testOHScalingModeToWindow,
32 nullptr, nullptr, nullptr, napi_default, nullptr});
33 descData.push_back({"testOHScalingModeCrop", nullptr, testOHScalingModeCrop,
34 nullptr, nullptr, nullptr, napi_default, nullptr});
35 descData.push_back({"testOHScalingModeNoCrop", nullptr, testOHScalingModeNoCrop,
36 nullptr, nullptr, nullptr, napi_default, nullptr});
37 descData.push_back({"testOhMetakeyRedPrimaryY", nullptr, testOhMetakeyRedPrimaryY,
38 nullptr, nullptr, nullptr, napi_default, nullptr});
39 descData.push_back({"testOhMetakeyGreenPrimaryX", nullptr, testOhMetakeyGreenPrimaryX,
40 nullptr, nullptr, nullptr, napi_default, nullptr});
41 descData.push_back({"testOhMetakeyGreenPrimaryY", nullptr, testOhMetakeyGreenPrimaryY,
42 nullptr, nullptr, nullptr, napi_default, nullptr});
43 descData.push_back({"testOhMetakeyBluePrimaryX", nullptr, testOhMetakeyBluePrimaryX,
44 nullptr, nullptr, nullptr, napi_default, nullptr});
45 descData.push_back({"testOhMetakeyBluePrimaryY", nullptr, testOhMetakeyBluePrimaryY,
46 nullptr, nullptr, nullptr, napi_default, nullptr});
47 descData.push_back({"testOhMetakeyWhitePrimaryX", nullptr, testOhMetakeyWhitePrimaryX,
48 nullptr, nullptr, nullptr, napi_default, nullptr});
49 descData.push_back({"testOhMetakeyWhitePrimaryY", nullptr, testOhMetakeyWhitePrimaryY,
50 nullptr, nullptr, nullptr, napi_default, nullptr});
51 descData.push_back({"testOhMetakeyMaxLuminance", nullptr, testOhMetakeyMaxLuminance,
52 nullptr, nullptr, nullptr, napi_default, nullptr});
53 descData.push_back({"testOhMetakeyMinLuminance", nullptr, testOhMetakeyMinLuminance,
54 nullptr, nullptr, nullptr, napi_default, nullptr});
55 descData.push_back({"testOhMetakeyMaxContentLightLevel", nullptr, testOhMetakeyMaxContentLightLevel,
56 nullptr, nullptr, nullptr, napi_default, nullptr});
57 descData.push_back({"testOhMetakeyMaxFrameAverageLightLevel", nullptr, testOhMetakeyMaxFrameAverageLightLevel,
58 nullptr, nullptr, nullptr, napi_default, nullptr});
59 descData.push_back({"testOhMetakeyHdrVivid", nullptr, testOhMetakeyHdrVivid,
60 nullptr, nullptr, nullptr, napi_default, nullptr});
61 descData.push_back({"testNativeWindowWTParcelSuccess", nullptr, testNativeWindowWTParcelSuccess,
62 nullptr, nullptr, nullptr, napi_default, nullptr});
63 descData.push_back({"testNativeWindowWTParcelInvalidArguments", nullptr, testNativeWindowWTParcelInvalidArguments,
64 nullptr, nullptr, nullptr, napi_default, nullptr});
65 descData.push_back({"testNativeWindowRFParcelSuccess", nullptr, testNativeWindowRFParcelSuccess,
66 nullptr, nullptr, nullptr, napi_default, nullptr});
67 descData.push_back({"testNativeWindowRFParcelInvalidArguments", nullptr, testNativeWindowRFParcelInvalidArguments,
68 nullptr, nullptr, nullptr, napi_default, nullptr});
69 descData.push_back({"testNativeWindowWindowHandleOptSetTimeOut", nullptr, testNativeWindowWindowHandleOptSetTimeOut,
70 nullptr, nullptr, nullptr, napi_default, nullptr});
71 descData.push_back({"testNativeWindowWindowHandleOptGetTimeOut", nullptr, testNativeWindowWindowHandleOptGetTimeOut,
72 nullptr, nullptr, nullptr, napi_default, nullptr});
73 }
testOHScalingModeToWindow(napi_env env,napi_callback_info info)74 napi_value testOHScalingModeToWindow(napi_env env, napi_callback_info info)
75 {
76 napi_value result = nullptr;
77 InitNativeWindow *initNative = new InitNativeWindow();
78 OHNativeWindow *nativeWindow = nullptr;
79 nativeWindow = initNative->returnNativeWindow();
80 uint32_t sequence = 1000;
81 int32_t res = OH_NativeWindow_NativeWindowSetScalingMode(nullptr, sequence, OH_SCALING_MODE_SCALE_TO_WINDOW);
82 delete initNative;
83 napi_create_int32(env, res, &result);
84 return result;
85 }
86
testOHScalingModeCrop(napi_env env,napi_callback_info info)87 napi_value testOHScalingModeCrop(napi_env env, napi_callback_info info)
88 {
89 napi_value result = nullptr;
90 InitNativeWindow *initNative = new InitNativeWindow();
91 OHNativeWindow *nativeWindow = nullptr;
92 uint32_t sequence = 1000;
93 nativeWindow = initNative->returnNativeWindow();
94 int32_t res = OH_NativeWindow_NativeWindowSetScalingMode(nullptr, sequence, OH_SCALING_MODE_SCALE_CROP);
95 napi_create_int32(env, res, &result);
96 return result;
97 }
98
testOHScalingModeNoCrop(napi_env env,napi_callback_info info)99 napi_value testOHScalingModeNoCrop(napi_env env, napi_callback_info info)
100 {
101 napi_value result = nullptr;
102 InitNativeWindow *initNative = new InitNativeWindow();
103 OHNativeWindow *nativeWindow = nullptr;
104 uint32_t sequence = 1000;
105 nativeWindow = initNative->returnNativeWindow();
106 int32_t res = OH_NativeWindow_NativeWindowSetScalingMode(nullptr, sequence, OH_SCALING_MODE_NO_SCALE_CROP);
107 napi_create_int32(env, res, &result);
108 return result;
109 }
110
testOhMetakeyRedPrimaryY(napi_env env,napi_callback_info info)111 napi_value testOhMetakeyRedPrimaryY(napi_env env, napi_callback_info info)
112 {
113 napi_value result = nullptr;
114 InitNativeWindow *initNative = new InitNativeWindow();
115 uint32_t sequence = 1000;
116 const OHHDRMetaData metaData[] = {{OH_METAKEY_RED_PRIMARY_Y, 0}};
117 OHNativeWindow *nativeWindow = nullptr;
118 nativeWindow = initNative->returnNativeWindow();
119 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
120 napi_create_int32(env, res, &result);
121 return result;
122 }
123
testOhMetakeyGreenPrimaryX(napi_env env,napi_callback_info info)124 napi_value testOhMetakeyGreenPrimaryX(napi_env env, napi_callback_info info)
125 {
126 napi_value result = nullptr;
127 InitNativeWindow *initNative = new InitNativeWindow();
128 uint32_t sequence = 1000;
129 const OHHDRMetaData metaData[] = {{OH_METAKEY_GREEN_PRIMARY_X, 0}};
130 OHNativeWindow *nativeWindow = nullptr;
131 nativeWindow = initNative->returnNativeWindow();
132 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
133 napi_create_int32(env, res, &result);
134 return result;
135 }
136
testOhMetakeyGreenPrimaryY(napi_env env,napi_callback_info info)137 napi_value testOhMetakeyGreenPrimaryY(napi_env env, napi_callback_info info)
138 {
139 napi_value result = nullptr;
140 InitNativeWindow *initNative = new InitNativeWindow();
141 uint32_t sequence = 1000;
142 const OHHDRMetaData metaData[] = {{OH_METAKEY_GREEN_PRIMARY_Y, 0}};
143 OHNativeWindow *nativeWindow = nullptr;
144 nativeWindow = initNative->returnNativeWindow();
145 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
146 napi_create_int32(env, res, &result);
147 return result;
148 }
149
testOhMetakeyBluePrimaryX(napi_env env,napi_callback_info info)150 napi_value testOhMetakeyBluePrimaryX(napi_env env, napi_callback_info info)
151 {
152 napi_value result = nullptr;
153 InitNativeWindow *initNative = new InitNativeWindow();
154 uint32_t sequence = 1000;
155 const OHHDRMetaData metaData[] = {{OH_METAKEY_BLUE_PRIMARY_X, 0}};
156 OHNativeWindow *nativeWindow = nullptr;
157 nativeWindow = initNative->returnNativeWindow();
158 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
159 napi_create_int32(env, res, &result);
160 return result;
161 }
162
testOhMetakeyBluePrimaryY(napi_env env,napi_callback_info info)163 napi_value testOhMetakeyBluePrimaryY(napi_env env, napi_callback_info info)
164 {
165 napi_value result = nullptr;
166 InitNativeWindow *initNative = new InitNativeWindow();
167 uint32_t sequence = 1000;
168 const OHHDRMetaData metaData[] = {{OH_METAKEY_BLUE_PRIMARY_Y, 0}};
169 OHNativeWindow *nativeWindow = nullptr;
170 nativeWindow = initNative->returnNativeWindow();
171 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
172 napi_create_int32(env, res, &result);
173 return result;
174 }
175
testOhMetakeyWhitePrimaryX(napi_env env,napi_callback_info info)176 napi_value testOhMetakeyWhitePrimaryX(napi_env env, napi_callback_info info)
177 {
178 napi_value result = nullptr;
179 InitNativeWindow *initNative = new InitNativeWindow();
180 uint32_t sequence = 1000;
181 const OHHDRMetaData metaData[] = {{OH_METAKEY_WHITE_PRIMARY_X, 0}};
182 OHNativeWindow *nativeWindow = nullptr;
183 nativeWindow = initNative->returnNativeWindow();
184 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
185 napi_create_int32(env, res, &result);
186 return result;
187 }
188
testOhMetakeyWhitePrimaryY(napi_env env,napi_callback_info info)189 napi_value testOhMetakeyWhitePrimaryY(napi_env env, napi_callback_info info)
190 {
191 napi_value result = nullptr;
192 InitNativeWindow *initNative = new InitNativeWindow();
193 uint32_t sequence = 1000;
194 const OHHDRMetaData metaData[] = {{OH_METAKEY_WHITE_PRIMARY_Y, 0}};
195 OHNativeWindow *nativeWindow = nullptr;
196 nativeWindow = initNative->returnNativeWindow();
197 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
198 napi_create_int32(env, res, &result);
199 return result;
200 }
201
testOhMetakeyMaxLuminance(napi_env env,napi_callback_info info)202 napi_value testOhMetakeyMaxLuminance(napi_env env, napi_callback_info info)
203 {
204 napi_value result = nullptr;
205 InitNativeWindow *initNative = new InitNativeWindow();
206 uint32_t sequence = 1000;
207 const OHHDRMetaData metaData[] = {{OH_METAKEY_MAX_LUMINANCE, 0}};
208 OHNativeWindow *nativeWindow = nullptr;
209 nativeWindow = initNative->returnNativeWindow();
210 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
211 napi_create_int32(env, res, &result);
212 return result;
213 }
214
testOhMetakeyMinLuminance(napi_env env,napi_callback_info info)215 napi_value testOhMetakeyMinLuminance(napi_env env, napi_callback_info info)
216 {
217 napi_value result = nullptr;
218 InitNativeWindow *initNative = new InitNativeWindow();
219 uint32_t sequence = 1000;
220 const OHHDRMetaData metaData[] = {{OH_METAKEY_MIN_LUMINANCE, 0}};
221 OHNativeWindow *nativeWindow = nullptr;
222 nativeWindow = initNative->returnNativeWindow();
223 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
224 napi_create_int32(env, res, &result);
225 return result;
226 }
227
testOhMetakeyMaxContentLightLevel(napi_env env,napi_callback_info info)228 napi_value testOhMetakeyMaxContentLightLevel(napi_env env, napi_callback_info info)
229 {
230 napi_value result = nullptr;
231 InitNativeWindow *initNative = new InitNativeWindow();
232 uint32_t sequence = 1000;
233 const OHHDRMetaData metaData[] = {{OH_METAKEY_MAX_CONTENT_LIGHT_LEVEL, 0}};
234 OHNativeWindow *nativeWindow = nullptr;
235 nativeWindow = initNative->returnNativeWindow();
236 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
237 napi_create_int32(env, res, &result);
238 return result;
239 }
240
testOhMetakeyMaxFrameAverageLightLevel(napi_env env,napi_callback_info info)241 napi_value testOhMetakeyMaxFrameAverageLightLevel(napi_env env, napi_callback_info info)
242 {
243 napi_value result = nullptr;
244 InitNativeWindow *initNative = new InitNativeWindow();
245 uint32_t sequence = 1000;
246 const OHHDRMetaData metaData[] = {{OH_METAKEY_MAX_FRAME_AVERAGE_LIGHT_LEVEL, 0}};
247 OHNativeWindow *nativeWindow = nullptr;
248 nativeWindow = initNative->returnNativeWindow();
249 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
250 napi_create_int32(env, res, &result);
251 return result;
252 }
253
testOhMetakeyHdrVivid(napi_env env,napi_callback_info info)254 napi_value testOhMetakeyHdrVivid(napi_env env, napi_callback_info info)
255 {
256 napi_value result = nullptr;
257 InitNativeWindow *initNative = new InitNativeWindow();
258 uint32_t sequence = 1000;
259 const OHHDRMetaData metaData[] = {{OH_METAKEY_HDR_VIVID, 0}};
260 OHNativeWindow *nativeWindow = nullptr;
261 nativeWindow = initNative->returnNativeWindow();
262 int32_t res = OH_NativeWindow_NativeWindowSetMetaData(nullptr, sequence, sizeof(metaData), metaData);
263 napi_create_int32(env, res, &result);
264 return result;
265 }
266
testNativeWindowWTParcelSuccess(napi_env env,napi_callback_info info)267 napi_value testNativeWindowWTParcelSuccess(napi_env env, napi_callback_info info)
268 {
269 napi_value result = nullptr;
270 InitNativeWindow* initNative = new InitNativeWindow();
271 OHNativeWindow *nativeWindow = nullptr;
272 nativeWindow = initNative->returnNativeWindow();
273 OHIPCParcel *parcel = OH_IPCParcel_Create();
274 int32_t res = OH_NativeWindow_WriteToParcel(nativeWindow, parcel);
275 napi_create_int32(env, res, &result);
276 return result;
277 }
278
testNativeWindowWTParcelInvalidArguments(napi_env env,napi_callback_info info)279 napi_value testNativeWindowWTParcelInvalidArguments(napi_env env, napi_callback_info info)
280 {
281 napi_value result = nullptr;
282 InitNativeWindow* initNative = new InitNativeWindow();
283 OHNativeWindow *nativeWindow = nullptr;
284 nativeWindow = initNative->returnNativeWindow();
285 int32_t res = OH_NativeWindow_WriteToParcel(nativeWindow, nullptr);
286 napi_create_int32(env, res, &result);
287 return result;
288 }
289
testNativeWindowRFParcelSuccess(napi_env env,napi_callback_info info)290 napi_value testNativeWindowRFParcelSuccess(napi_env env, napi_callback_info info)
291 {
292 napi_value result = nullptr;
293 InitNativeWindow* initNative = new InitNativeWindow();
294 OHNativeWindow *nativeWindow = nullptr;
295 nativeWindow = initNative->returnNativeWindow();
296 OHIPCParcel *parcel = OH_IPCParcel_Create();
297 OH_NativeWindow_WriteToParcel(nativeWindow, parcel);
298 int32_t res = OH_NativeWindow_ReadFromParcel(parcel, &nativeWindow);
299 napi_create_int32(env, res, &result);
300 return result;
301 }
302
testNativeWindowRFParcelInvalidArguments(napi_env env,napi_callback_info info)303 napi_value testNativeWindowRFParcelInvalidArguments(napi_env env, napi_callback_info info)
304 {
305 napi_value result = nullptr;
306 InitNativeWindow* initNative = new InitNativeWindow();
307 OHNativeWindow *nativeWindow = nullptr;
308 nativeWindow = initNative->returnNativeWindow();
309 int32_t res = OH_NativeWindow_ReadFromParcel(nullptr, nullptr);
310 napi_create_int32(env, res, &result);
311 return result;
312 }
313
testNativeWindowWindowHandleOptSetTimeOut(napi_env env,napi_callback_info info)314 napi_value testNativeWindowWindowHandleOptSetTimeOut(napi_env env, napi_callback_info info)
315 {
316 napi_value result = nullptr;
317 int32_t flag;
318 int32_t timeout = 5000;
319 InitNativeWindow* initNative = new InitNativeWindow();
320 OHNativeWindow *nativeWindow = nullptr;
321 nativeWindow = initNative->returnNativeWindow();
322 int32_t res = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, SET_TIMEOUT, &timeout);
323 delete initNative;
324 napi_create_int32(env, res, &result);
325 return result;
326 }
327
testNativeWindowWindowHandleOptGetTimeOut(napi_env env,napi_callback_info info)328 napi_value testNativeWindowWindowHandleOptGetTimeOut(napi_env env, napi_callback_info info)
329 {
330 napi_value result = nullptr;
331 int32_t timeout = 5000;
332 InitNativeWindow* initNative = new InitNativeWindow();
333 OHNativeWindow *nativeWindow = nullptr;
334 nativeWindow = initNative->returnNativeWindow();
335 int32_t res = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, GET_TIMEOUT, &timeout);
336 delete initNative;
337 napi_create_int32(env, res, &result);
338 return result;
339 }