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 #include <string>
16 #include "gtest/gtest.h"
17 #include "native_avcodec_videodecoder.h"
18 #include "native_averrors.h"
19 #include "videodec_sample.h"
20 #include "videodec_api11_sample.h"
21 #include "native_avcodec_base.h"
22 #include "avcodec_codec_name.h"
23 #include "native_avcapability.h"
24 #include "native_avformat.h"
25 #include "openssl/sha.h"
26
27 #ifdef SUPPORT_DRM
28 #include "native_mediakeysession.h"
29 #include "native_mediakeysystem.h"
30 #endif
31
32 #define MAX_THREAD 16
33
34 using namespace std;
35 using namespace OHOS;
36 using namespace OHOS::Media;
37 using namespace testing::ext;
38
39 namespace OHOS {
40 namespace Media {
41 class SwdecFuncNdkTest : public testing::Test {
42 public:
43 static void SetUpTestCase();
44 static void TearDownTestCase();
45 void SetUp() override;
46 void TearDown() override;
47 void InputFunc();
48 void OutputFunc();
49 void Release();
50 int32_t Stop();
51
52 protected:
53 const string CODEC_NAME = "video_decoder.avc";
54 const char *INP_DIR_720_30 = "/data/test/media/1280_720_30_10Mb.h264";
55 const char *INP_DIR_1080_30 = "/data/test/media/1920_1080_10_30Mb.h264";
56 };
57 } // namespace Media
58 } // namespace OHOS
59
60 namespace {
61 static OH_AVCapability *cap_avc = nullptr;
62 static string g_codecName_avc = "";
63 } // namespace
64
SetUpTestCase()65 void SwdecFuncNdkTest::SetUpTestCase()
66 {
67 cap_avc = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, SOFTWARE);
68 g_codecName_avc = OH_AVCapability_GetName(cap_avc);
69 cout << "g_codecName_avc: " << g_codecName_avc << endl;
70 }
71
TearDownTestCase()72 void SwdecFuncNdkTest::TearDownTestCase() {}
SetUp()73 void SwdecFuncNdkTest::SetUp() {}
TearDown()74 void SwdecFuncNdkTest::TearDown() {}
75
76 namespace {
77 /**
78 * @tc.number : API11_SURF_CHANGE_FUNC_001
79 * @tc.name : surf model change in normal state
80 * @tc.desc : function test
81 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_001, TestSize.Level0)82 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_001, TestSize.Level0)
83 {
84 if (!access("/system/lib64/media/", 0)) {
85 auto vDecSample = make_shared<VDecAPI11Sample>();
86 vDecSample->INP_DIR = INP_DIR_1080_30;
87 vDecSample->DEFAULT_WIDTH = 1920;
88 vDecSample->DEFAULT_HEIGHT = 1080;
89 vDecSample->DEFAULT_FRAME_RATE = 30;
90 vDecSample->SURFACE_OUTPUT = true;
91 vDecSample->autoSwitchSurface = true;
92 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
93 vDecSample->sleepOnFPS = true;
94 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName_avc));
95 vDecSample->WaitForEOS();
96 ASSERT_EQ(AV_ERR_OK, vDecSample->Reset());
97 ASSERT_EQ(AV_ERR_INVALID_STATE, vDecSample->SwitchSurface());
98 ASSERT_EQ(AV_ERR_OK, vDecSample->Release());
99 }
100 }
101
102 /**
103 * @tc.number : API11_SURF_CHANGE_FUNC_002
104 * @tc.name : surf model change in flushed state
105 * @tc.desc : function test
106 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_002, TestSize.Level0)107 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_002, TestSize.Level0)
108 {
109 if (!access("/system/lib64/media/", 0)) {
110 auto vDecSample = make_shared<VDecAPI11Sample>();
111 vDecSample->INP_DIR = INP_DIR_1080_30;
112 vDecSample->DEFAULT_WIDTH = 1920;
113 vDecSample->DEFAULT_HEIGHT = 1080;
114 vDecSample->DEFAULT_FRAME_RATE = 30;
115 vDecSample->SURFACE_OUTPUT = true;
116 vDecSample->autoSwitchSurface = true;
117 vDecSample->sleepOnFPS = true;
118 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName_avc));
119 ASSERT_EQ(AV_ERR_OK, vDecSample->Flush());
120 ASSERT_EQ(AV_ERR_OK, vDecSample->SwitchSurface());
121 ASSERT_EQ(AV_ERR_OK, vDecSample->Stop());
122 }
123 }
124
125 /**
126 * @tc.number : API11_SURF_CHANGE_FUNC_003
127 * @tc.name : surf model change in runing state
128 * @tc.desc : function test
129 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_003, TestSize.Level0)130 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_003, TestSize.Level0)
131 {
132 if (!access("/system/lib64/media/", 0)) {
133 auto vDecSample = make_shared<VDecAPI11Sample>();
134 vDecSample->INP_DIR = INP_DIR_1080_30;
135 vDecSample->DEFAULT_WIDTH = 1920;
136 vDecSample->DEFAULT_HEIGHT = 1080;
137 vDecSample->DEFAULT_FRAME_RATE = 30;
138 vDecSample->SURFACE_OUTPUT = false;
139 vDecSample->autoSwitchSurface = false;
140 vDecSample->CreateSurface();
141 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName_avc));
142 ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vDecSample->SwitchSurface());
143 vDecSample->WaitForEOS();
144 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
145 }
146 }
147
148 /**
149 * @tc.number : API11_SURF_CHANGE_FUNC_004
150 * @tc.name : repeat call setSurface fastly
151 * @tc.desc : function test
152 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_004, TestSize.Level0)153 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_004, TestSize.Level0)
154 {
155 if (!access("/system/lib64/media/", 0)) {
156 auto vDecSample = make_shared<VDecAPI11Sample>();
157 vDecSample->INP_DIR = INP_DIR_1080_30;
158 vDecSample->DEFAULT_WIDTH = 1920;
159 vDecSample->DEFAULT_HEIGHT = 1080;
160 vDecSample->DEFAULT_FRAME_RATE = 30;
161 vDecSample->SURFACE_OUTPUT = true;
162 vDecSample->autoSwitchSurface = true;
163 vDecSample->sleepOnFPS = true;
164 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName_avc));
165 ASSERT_EQ(AV_ERR_OK, vDecSample->SwitchSurface());
166 vDecSample->WaitForEOS();
167 }
168 }
169
170 /**
171 * @tc.number : API11_SURF_CHANGE_FUNC_005
172 * @tc.name : surf model change in flush to runnig state
173 * @tc.desc : function test
174 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_005, TestSize.Level0)175 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_005, TestSize.Level0)
176 {
177 if (!access("/system/lib64/media/", 0)) {
178 auto vDecSample = make_shared<VDecAPI11Sample>();
179 vDecSample->INP_DIR = INP_DIR_1080_30;
180 vDecSample->DEFAULT_WIDTH = 1920;
181 vDecSample->DEFAULT_HEIGHT = 1080;
182 vDecSample->DEFAULT_FRAME_RATE = 30;
183 vDecSample->SURFACE_OUTPUT = true;
184 vDecSample->autoSwitchSurface = true;
185 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
186 vDecSample->sleepOnFPS = true;
187 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName_avc));
188 ASSERT_EQ(AV_ERR_OK, vDecSample->Flush());
189 ASSERT_EQ(AV_ERR_OK, vDecSample->Start());
190 ASSERT_EQ(AV_ERR_OK, vDecSample->SwitchSurface());
191 }
192 }
193
194 /**
195 * @tc.number : API11_SURF_CHANGE_FUNC_006
196 * @tc.name : surf model change in decoder finish to End-of-Stream state
197 * @tc.desc : function test
198 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_006, TestSize.Level0)199 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_006, TestSize.Level0)
200 {
201 if (!access("/system/lib64/media/", 0)) {
202 auto vDecSample = make_shared<VDecAPI11Sample>();
203 vDecSample->INP_DIR = INP_DIR_1080_30;
204 vDecSample->DEFAULT_WIDTH = 1920;
205 vDecSample->DEFAULT_HEIGHT = 1080;
206 vDecSample->DEFAULT_FRAME_RATE = 30;
207 vDecSample->SURFACE_OUTPUT = true;
208 vDecSample->autoSwitchSurface = true;
209 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
210 vDecSample->sleepOnFPS = true;
211 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName_avc));
212 vDecSample->WaitForEOS();
213 ASSERT_EQ(AV_ERR_OK, vDecSample->SwitchSurface());
214 }
215 }
216
217 /**
218 * @tc.number : API11_SURF_CHANGE_FUNC_007
219 * @tc.name : buffer model change in decoder finish to End-of-Stream state
220 * @tc.desc : function test
221 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_007, TestSize.Level0)222 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_007, TestSize.Level0)
223 {
224 if (!access("/system/lib64/media/", 0)) {
225 auto vDecSample = make_shared<VDecAPI11Sample>();
226 vDecSample->INP_DIR = INP_DIR_1080_30;
227 vDecSample->DEFAULT_WIDTH = 1920;
228 vDecSample->DEFAULT_HEIGHT = 1080;
229 vDecSample->DEFAULT_FRAME_RATE = 30;
230 vDecSample->SURFACE_OUTPUT = false;
231 vDecSample->autoSwitchSurface = false;
232 vDecSample->CreateSurface();
233 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName_avc));
234 vDecSample->WaitForEOS();
235 ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vDecSample->SwitchSurface());
236 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
237 }
238 }
239
240 /**
241 * @tc.number : API11_SURF_CHANGE_FUNC_008
242 * @tc.name : buffer model change in runing to flushed state
243 * @tc.desc : function test
244 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_008, TestSize.Level0)245 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_008, TestSize.Level0)
246 {
247 if (!access("/system/lib64/media/", 0)) {
248 auto vDecSample = make_shared<VDecAPI11Sample>();
249 vDecSample->INP_DIR = INP_DIR_1080_30;
250 vDecSample->DEFAULT_WIDTH = 1920;
251 vDecSample->DEFAULT_HEIGHT = 1080;
252 vDecSample->DEFAULT_FRAME_RATE = 30;
253 vDecSample->SURFACE_OUTPUT = false;
254 vDecSample->autoSwitchSurface = false;
255 vDecSample->CreateSurface();
256 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName_avc));
257 ASSERT_EQ(AV_ERR_OK, vDecSample->Flush());
258 ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vDecSample->SwitchSurface());
259 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
260 }
261 }
262
263 /**
264 * @tc.number : API11_SURF_CHANGE_FUNC_009
265 * @tc.name : buffer model change in flushed to runing state
266 * @tc.desc : function test
267 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_009, TestSize.Level0)268 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_009, TestSize.Level0)
269 {
270 if (!access("/system/lib64/media/", 0)) {
271 auto vDecSample = make_shared<VDecAPI11Sample>();
272 vDecSample->INP_DIR = INP_DIR_1080_30;
273 vDecSample->DEFAULT_WIDTH = 1920;
274 vDecSample->DEFAULT_HEIGHT = 1080;
275 vDecSample->DEFAULT_FRAME_RATE = 30;
276 vDecSample->SURFACE_OUTPUT = false;
277 vDecSample->autoSwitchSurface = false;
278 vDecSample->CreateSurface();
279 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName_avc));
280 ASSERT_EQ(AV_ERR_OK, vDecSample->Flush());
281 ASSERT_EQ(AV_ERR_OK, vDecSample->Start());
282 ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vDecSample->SwitchSurface());
283 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
284 }
285 }
286
287 /**
288 * @tc.number : API11_SURF_CHANGE_FUNC_012
289 * @tc.name : buffer model change in normal state
290 * @tc.desc : function test
291 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_012, TestSize.Level0)292 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_012, TestSize.Level0)
293 {
294 if (!access("/system/lib64/media/", 0)) {
295 auto vDecSample = make_shared<VDecAPI11Sample>();
296 vDecSample->INP_DIR = INP_DIR_1080_30;
297 vDecSample->DEFAULT_WIDTH = 1920;
298 vDecSample->DEFAULT_HEIGHT = 1080;
299 vDecSample->DEFAULT_FRAME_RATE = 30;
300 vDecSample->SURFACE_OUTPUT = false;
301 vDecSample->autoSwitchSurface = false;
302 vDecSample->CreateSurface();
303 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName_avc));
304 vDecSample->WaitForEOS();
305 ASSERT_EQ(AV_ERR_OK, vDecSample->Reset());
306 ASSERT_EQ(AV_ERR_INVALID_STATE, vDecSample->SwitchSurface());
307 ASSERT_EQ(AV_ERR_OK, vDecSample->Release());
308 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
309 }
310 }
311
312 /**
313 * @tc.number : API11_SURF_CHANGE_FUNC_013
314 * @tc.name : surf model change in config state
315 * @tc.desc : function test
316 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_013, TestSize.Level1)317 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_013, TestSize.Level1)
318 {
319 if (!access("/system/lib64/media/", 0)) {
320 auto vDecSample = make_shared<VDecAPI11Sample>();
321 vDecSample->INP_DIR = INP_DIR_1080_30;
322 vDecSample->DEFAULT_WIDTH = 1920;
323 vDecSample->DEFAULT_HEIGHT = 1080;
324 vDecSample->DEFAULT_FRAME_RATE = 30;
325 vDecSample->SURFACE_OUTPUT = false;
326 vDecSample->autoSwitchSurface = false;
327 vDecSample->CreateSurface();
328 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName_avc));
329 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
330 ASSERT_EQ(AV_ERR_OK, vDecSample->SwitchSurface());
331 vDecSample->WaitForEOS();
332 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
333 }
334 }
335
336 /**
337 * @tc.number : API11_SURF_CHANGE_FUNC_014
338 * @tc.name : surf model change in config state
339 * @tc.desc : function test
340 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_014, TestSize.Level1)341 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_014, TestSize.Level1)
342 {
343 if (!access("/system/lib64/media/", 0)) {
344 auto vDecSample = make_shared<VDecAPI11Sample>();
345 vDecSample->INP_DIR = INP_DIR_1080_30;
346 vDecSample->DEFAULT_WIDTH = 1920;
347 vDecSample->DEFAULT_HEIGHT = 1080;
348 vDecSample->DEFAULT_FRAME_RATE = 30;
349 vDecSample->SURFACE_OUTPUT = false;
350 vDecSample->autoSwitchSurface = false;
351 vDecSample->CreateSurface();
352 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName_avc));;
353 ASSERT_EQ(AV_ERR_INVALID_STATE, vDecSample->SwitchSurface());
354 vDecSample->WaitForEOS();
355 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
356 }
357 }
358
359 /**
360 * @tc.number : API11_SURF_CHANGE_FUNC_015
361 * @tc.name : Two object repeat call setSurface fastly
362 * @tc.desc : function test
363 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_015, TestSize.Level0)364 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_015, TestSize.Level0)
365 {
366 if (!access("/system/lib64/media/", 0)) {
367 auto vDecSample = make_shared<VDecAPI11Sample>();
368 vDecSample->INP_DIR = INP_DIR_1080_30;
369 vDecSample->DEFAULT_WIDTH = 1920;
370 vDecSample->DEFAULT_HEIGHT = 1080;
371 vDecSample->DEFAULT_FRAME_RATE = 30;
372 vDecSample->SURFACE_OUTPUT = true;
373 vDecSample->autoSwitchSurface = true;
374 vDecSample->sleepOnFPS = true;
375 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName_avc));
376 ASSERT_EQ(AV_ERR_OK, vDecSample->SwitchSurface());
377 vDecSample->WaitForEOS();
378
379 auto vDecSample_1 = make_shared<VDecAPI11Sample>();
380 vDecSample_1->INP_DIR = INP_DIR_1080_30;
381 vDecSample_1->DEFAULT_WIDTH = 1920;
382 vDecSample_1->DEFAULT_HEIGHT = 1080;
383 vDecSample_1->DEFAULT_FRAME_RATE = 30;
384 vDecSample_1->SURFACE_OUTPUT = true;
385 vDecSample_1->autoSwitchSurface = true;
386 vDecSample_1->sleepOnFPS = true;
387 ASSERT_EQ(AV_ERR_OK, vDecSample_1->RunVideoDec_Surface(g_codecName_avc));
388 ASSERT_EQ(AV_ERR_OK, vDecSample_1->SwitchSurface());
389 vDecSample_1->WaitForEOS();
390 }
391 }
392
393 /**
394 * @tc.number : API11_SURF_CHANGE_FUNC_016
395 * @tc.name : repeat call setSurface fastly 2 time
396 * @tc.desc : function test
397 */
HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_016, TestSize.Level0)398 HWTEST_F(SwdecFuncNdkTest, API11_SURF_CHANGE_FUNC_016, TestSize.Level0)
399 {
400 if (!access("/system/lib64/media/", 0)) {
401 for (int i = 0; i < 2; i++) {
402 auto vDecSample = make_shared<VDecAPI11Sample>();
403 vDecSample->INP_DIR = INP_DIR_1080_30;
404 vDecSample->DEFAULT_WIDTH = 1920;
405 vDecSample->DEFAULT_HEIGHT = 1080;
406 vDecSample->DEFAULT_FRAME_RATE = 30;
407 vDecSample->SURFACE_OUTPUT = true;
408 vDecSample->autoSwitchSurface = true;
409 vDecSample->sleepOnFPS = true;
410 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName_avc));
411 ASSERT_EQ(AV_ERR_OK, vDecSample->RepeatCallSetSurface());
412 vDecSample->WaitForEOS();
413 }
414 }
415 }
416
417
418 /**
419 * @tc.number : VIDEO_SWDEC_FUNCTION_0200
420 * @tc.name : create nonexist decoder
421 * @tc.desc : function test
422 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0200, TestSize.Level1)423 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0200, TestSize.Level1)
424 {
425 OH_AVCodec *vdec_ = OH_VideoDecoder_CreateByName("OMX.h264.decode.111.222.333");
426 ASSERT_EQ(nullptr, vdec_);
427 }
428
429 /**
430 * @tc.number : VIDEO_SWDEC_FUNCTION_0300
431 * @tc.name : test h264 decode buffer
432 * @tc.desc : function test
433 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0300, TestSize.Level0)434 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0300, TestSize.Level0)
435 {
436 auto vDecSample = make_shared<VDecNdkSample>();
437 vDecSample->INP_DIR = INP_DIR_1080_30;
438 vDecSample->DEFAULT_WIDTH = 1920;
439 vDecSample->DEFAULT_HEIGHT = 1080;
440 vDecSample->DEFAULT_FRAME_RATE = 30;
441 vDecSample->SURFACE_OUTPUT = false;
442 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec("OH.Media.Codec.Decoder.Video.AVC"));
443 vDecSample->WaitForEOS();
444 ASSERT_EQ(0, vDecSample->errCount);
445 }
446
447 /**
448 * @tc.number : VIDEO_SWDEC_FUNCTION_0400
449 * @tc.name : test h264 decode surface
450 * @tc.desc : function test
451 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0400, TestSize.Level0)452 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0400, TestSize.Level0)
453 {
454 auto vDecSample = make_shared<VDecNdkSample>();
455 vDecSample->INP_DIR = INP_DIR_1080_30;
456 vDecSample->SURFACE_OUTPUT = true;
457 vDecSample->DEFAULT_WIDTH = 1920;
458 vDecSample->DEFAULT_HEIGHT = 1080;
459 vDecSample->DEFAULT_FRAME_RATE = 30;
460 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface("OH.Media.Codec.Decoder.Video.AVC"));
461 vDecSample->WaitForEOS();
462 bool isVaild = false;
463 OH_VideoDecoder_IsValid(vDecSample->vdec_, &isVaild);
464 ASSERT_EQ(false, isVaild);
465 ASSERT_EQ(0, vDecSample->errCount);
466 }
467
468 /**
469 * @tc.number : VIDEO_SWDEC_FUNCTION_0700
470 * @tc.name : test set EOS when last frame
471 * @tc.desc : function test
472 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0700, TestSize.Level1)473 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0700, TestSize.Level1)
474 {
475 auto vDecSample = make_shared<VDecNdkSample>();
476 vDecSample->INP_DIR = INP_DIR_1080_30;
477 vDecSample->DEFAULT_WIDTH = 1920;
478 vDecSample->DEFAULT_HEIGHT = 1080;
479 vDecSample->DEFAULT_FRAME_RATE = 30;
480 vDecSample->SURFACE_OUTPUT = false;
481 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
482 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
483 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
484 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
485 vDecSample->WaitForEOS();
486 ASSERT_EQ(0, vDecSample->errCount);
487 }
488
489 /**
490 * @tc.number : VIDEO_SWDEC_FUNCTION_0800
491 * @tc.name : test set EOS before last frame then stop
492 * @tc.desc : function test
493 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0800, TestSize.Level1)494 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_0800, TestSize.Level1)
495 {
496 auto vDecSample = make_shared<VDecNdkSample>();
497 vDecSample->INP_DIR = INP_DIR_1080_30;
498 vDecSample->DEFAULT_WIDTH = 1920;
499 vDecSample->DEFAULT_HEIGHT = 1080;
500 vDecSample->DEFAULT_FRAME_RATE = 30;
501 vDecSample->SURFACE_OUTPUT = false;
502 vDecSample->BEFORE_EOS_INPUT = true;
503 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
504 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
505 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
506 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
507 vDecSample->WaitForEOS();
508 ASSERT_EQ(0, vDecSample->errCount);
509 }
510 /**
511 * @tc.number : VIDEO_SWDEC_FUNCTION_4000
512 * @tc.name : test set EOS before last frame then stop surface
513 * @tc.desc : function test
514 */
515
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_4000, TestSize.Level1)516 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_4000, TestSize.Level1)
517 {
518 auto vDecSample = make_shared<VDecNdkSample>();
519 vDecSample->INP_DIR = INP_DIR_1080_30;
520 vDecSample->DEFAULT_WIDTH = 1920;
521 vDecSample->DEFAULT_HEIGHT = 1080;
522 vDecSample->DEFAULT_FRAME_RATE = 30;
523 vDecSample->SURFACE_OUTPUT = true;
524 vDecSample->BEFORE_EOS_INPUT = true;
525 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface("OH.Media.Codec.Decoder.Video.AVC"));
526 vDecSample->WaitForEOS();
527 ASSERT_EQ(0, vDecSample->errCount);
528 }
529
530 /**
531 * @tc.number : VIDEO_SWDEC_FUNCTION_1000
532 * @tc.name : test reconfigure for new file with one decoder
533 * @tc.desc : function test
534 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1000, TestSize.Level1)535 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1000, TestSize.Level1)
536 {
537 auto vDecSample = make_shared<VDecNdkSample>();
538 vDecSample->INP_DIR = INP_DIR_1080_30;
539 vDecSample->DEFAULT_WIDTH = 1920;
540 vDecSample->DEFAULT_HEIGHT = 1080;
541 vDecSample->DEFAULT_FRAME_RATE = 30;
542 vDecSample->SURFACE_OUTPUT = false;
543 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
544 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
545 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
546 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
547 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
548 vDecSample->WaitForEOS();
549 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
550 ASSERT_EQ(AV_ERR_OK, vDecSample->Reset());
551 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
552 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
553 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
554 vDecSample->WaitForEOS();
555 ASSERT_EQ(0, vDecSample->errCount);
556 }
557
558 /**
559 * @tc.number : VIDEO_SWDEC_FUNCTION_1100
560 * @tc.name : test reconfigure for new file with the recreated decoder
561 * @tc.desc : function test
562 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1100, TestSize.Level1)563 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1100, TestSize.Level1)
564 {
565 auto vDecSample = make_shared<VDecNdkSample>();
566 vDecSample->INP_DIR = INP_DIR_1080_30;
567 vDecSample->DEFAULT_WIDTH = 1920;
568 vDecSample->DEFAULT_HEIGHT = 1080;
569 vDecSample->DEFAULT_FRAME_RATE = 30;
570 vDecSample->SURFACE_OUTPUT = false;
571 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
572 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
573 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
574 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
575 vDecSample->WaitForEOS();
576 ASSERT_EQ(0, vDecSample->errCount);
577 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
578 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
579 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
580 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
581 vDecSample->WaitForEOS();
582 ASSERT_EQ(0, vDecSample->errCount);
583 }
584
585 /**
586 * @tc.number : VIDEO_SWDEC_FUNCTION_1200
587 * @tc.name : repeat start and stop 5 times before EOS
588 * @tc.desc : function test
589 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1200, TestSize.Level2)590 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1200, TestSize.Level2)
591 {
592 auto vDecSample = make_shared<VDecNdkSample>();
593 vDecSample->INP_DIR = INP_DIR_1080_30;
594 vDecSample->DEFAULT_WIDTH = 1920;
595 vDecSample->DEFAULT_HEIGHT = 1080;
596 vDecSample->DEFAULT_FRAME_RATE = 30;
597 vDecSample->SURFACE_OUTPUT = false;
598 vDecSample->REPEAT_START_STOP_BEFORE_EOS = 5;
599 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
600 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
601 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
602 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
603 vDecSample->WaitForEOS();
604 ASSERT_EQ(0, vDecSample->errCount);
605 }
606
607 /**
608 * @tc.number : VIDEO_SWDEC_FUNCTION_1300
609 * @tc.name : repeat start and flush 5 times before EOS
610 * @tc.desc : function test
611 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1300, TestSize.Level2)612 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1300, TestSize.Level2)
613 {
614 auto vDecSample = make_shared<VDecNdkSample>();
615 vDecSample->INP_DIR = INP_DIR_1080_30;
616 vDecSample->DEFAULT_WIDTH = 1920;
617 vDecSample->DEFAULT_HEIGHT = 1080;
618 vDecSample->DEFAULT_FRAME_RATE = 30;
619 vDecSample->SURFACE_OUTPUT = false;
620 vDecSample->REPEAT_START_FLUSH_BEFORE_EOS = 5;
621 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
622 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
623 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
624 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
625 vDecSample->WaitForEOS();
626 ASSERT_EQ(0, vDecSample->errCount);
627 }
628
629 /**
630 * @tc.number : VIDEO_SWDEC_FUNCTION_1400
631 * @tc.name : set larger width and height
632 * @tc.desc : function test
633 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1400, TestSize.Level2)634 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1400, TestSize.Level2)
635 {
636 auto vDecSample = make_shared<VDecNdkSample>();
637 vDecSample->INP_DIR = INP_DIR_720_30;
638 vDecSample->DEFAULT_WIDTH = 1920;
639 vDecSample->DEFAULT_HEIGHT = 1080;
640 vDecSample->DEFAULT_FRAME_RATE = 30;
641 vDecSample->SURFACE_OUTPUT = false;
642 vDecSample->checkOutPut = false;
643 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
644 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
645 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
646 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
647 vDecSample->WaitForEOS();
648 ASSERT_EQ(0, vDecSample->errCount);
649 }
650
651 /**
652 * @tc.number : VIDEO_SWDEC_FUNCTION_1500
653 * @tc.name : set the width and height to a samller value
654 * @tc.desc : function test
655 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1500, TestSize.Level2)656 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1500, TestSize.Level2)
657 {
658 auto vDecSample = make_shared<VDecNdkSample>();
659 vDecSample->INP_DIR = INP_DIR_1080_30;
660 vDecSample->DEFAULT_WIDTH = 1280;
661 vDecSample->DEFAULT_HEIGHT = 720;
662 vDecSample->DEFAULT_FRAME_RATE = 30;
663 vDecSample->SURFACE_OUTPUT = false;
664 vDecSample->checkOutPut = false;
665 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
666 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
667 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
668 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
669 vDecSample->WaitForEOS();
670 ASSERT_EQ(0, vDecSample->errCount);
671 }
672
673 /**
674 * @tc.number : VIDEO_SWDEC_FUNCTION_1600
675 * @tc.name : resolution change
676 * @tc.desc : function test
677 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1600, TestSize.Level2)678 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1600, TestSize.Level2)
679 {
680 auto vDecSample = make_shared<VDecNdkSample>();
681 vDecSample->INP_DIR = "/data/test/media/resolutionChange.h264";
682 vDecSample->DEFAULT_WIDTH = 1104;
683 vDecSample->DEFAULT_HEIGHT = 622;
684 vDecSample->DEFAULT_FRAME_RATE = 30;
685 vDecSample->SURFACE_OUTPUT = false;
686 vDecSample->checkOutPut = false;
687 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
688 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
689 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
690 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
691 vDecSample->WaitForEOS();
692 ASSERT_EQ(0, vDecSample->errCount);
693 }
694
695 /**
696 * @tc.number : VIDEO_SWDEC_FUNCTION_1700
697 * @tc.name : decode h264 stream ,output pixel format is nv21
698 * @tc.desc : function test
699 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1700, TestSize.Level2)700 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1700, TestSize.Level2)
701 {
702 auto vDecSample = make_shared<VDecNdkSample>();
703 vDecSample->INP_DIR = INP_DIR_1080_30;
704 vDecSample->DEFAULT_WIDTH = 1920;
705 vDecSample->DEFAULT_HEIGHT = 1080;
706 vDecSample->DEFAULT_FRAME_RATE = 30;
707 vDecSample->DEFAULT_PIXEL_FORMAT = AV_PIXEL_FORMAT_NV21;
708 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec("OH.Media.Codec.Decoder.Video.AVC"));
709 vDecSample->WaitForEOS();
710 ASSERT_EQ(0, vDecSample->errCount);
711 }
712
713 /**
714 * @tc.number : VIDEO_SWDEC_FUNCTION_1800
715 * @tc.name : decode h264 stream ,output pixel format is rgba
716 * @tc.desc : function test
717 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1800, TestSize.Level2)718 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1800, TestSize.Level2)
719 {
720 auto vDecSample = make_shared<VDecNdkSample>();
721 vDecSample->INP_DIR = INP_DIR_1080_30;
722 vDecSample->DEFAULT_WIDTH = 1920;
723 vDecSample->DEFAULT_HEIGHT = 1080;
724 vDecSample->DEFAULT_FRAME_RATE = 30;
725 vDecSample->DEFAULT_PIXEL_FORMAT = AV_PIXEL_FORMAT_RGBA;
726 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec("OH.Media.Codec.Decoder.Video.AVC"));
727 vDecSample->WaitForEOS();
728 ASSERT_EQ(0, vDecSample->errCount);
729 }
730
731 /**
732 * @tc.number : VIDEO_SWDEC_FUNCTION_ATTIME_0010
733 * @tc.name : test h264 asyn decode surface,use at time
734 * @tc.desc : function test
735 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_ATTIME_0010, TestSize.Level0)736 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_ATTIME_0010, TestSize.Level0)
737 {
738 auto vDecSample = make_shared<VDecAPI11Sample>();
739 vDecSample->INP_DIR = INP_DIR_720_30;
740 vDecSample->DEFAULT_WIDTH = 1280;
741 vDecSample->DEFAULT_HEIGHT = 720;
742 vDecSample->DEFAULT_FRAME_RATE = 30;
743 vDecSample->SURFACE_OUTPUT = true;
744 vDecSample->rsAtTime = true;
745 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface("OH.Media.Codec.Decoder.Video.AVC"));
746 vDecSample->WaitForEOS();
747 ASSERT_EQ(0, vDecSample->errCount);
748 }
749
750 /**
751 * @tc.number : VIDEO_SWDEC_FUNCTION_1900
752 * @tc.name : Increase frame rate judgment
753 * @tc.desc : function test
754 */
HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1910, TestSize.Level2)755 HWTEST_F(SwdecFuncNdkTest, VIDEO_SWDEC_FUNCTION_1910, TestSize.Level2)
756 {
757 auto vDecSample = make_shared<VDecAPI11Sample>();
758 vDecSample->INP_DIR = INP_DIR_720_30;
759 vDecSample->OUT_DIR = "/data/test/media/SW_720_30.yuv";
760 vDecSample->DEFAULT_WIDTH = 1920;
761 vDecSample->DEFAULT_HEIGHT = 1080;
762 vDecSample->DEFAULT_FRAME_RATE = 30;
763 vDecSample->SURFACE_OUTPUT = false;
764 vDecSample->outputYuvFlag = true;
765 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.AVC"));
766 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
767 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
768 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
769 vDecSample->WaitForEOS();
770 ASSERT_EQ(101, vDecSample->outFrameCount);
771 ASSERT_EQ(0, vDecSample->errCount);
772 }
773 } // namespace