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