1  /*
2   * Copyright (C) 2023 Huawei Device Co., Ltd.
3   * Licensed under the Apache License, Version 2.0 (the "License");
4   * you may not use this file except in compliance with the License.
5   * You may obtain a copy of the License at
6   *
7   * http://www.apache.org/licenses/LICENSE-2.0
8   *
9   * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  #include <cstdio>
17  #include <iostream>
18  #include <atomic>
19  #include <fstream>
20  #include <mutex>
21  #include <queue>
22  #include <string>
23  #include <thread>
24  
25  #include "gtest/gtest.h"
26  #include "videodec_sample.h"
27  using namespace std;
28  using namespace OHOS;
29  using namespace OHOS::Media;
30  using namespace testing::ext;
31  namespace OHOS {
32  namespace Media {
33  class SwdecStateNdkTest : public testing::Test {
34  public:
35      // SetUpTestCase: Called before all test cases
36      static void SetUpTestCase(void);
37      // TearDownTestCase: Called after all test case
38      static void TearDownTestCase(void);
39      // SetUp: Called before each test cases
40      void SetUp(void);
41      // TearDown: Called after each test cases
42      void TearDown(void);
43  
44  protected:
45      const ::testing::TestInfo *testInfo_ = nullptr;
46      bool createCodecSuccess_ = false;
47  };
48  
SetUpTestCase(void)49  void SwdecStateNdkTest::SetUpTestCase(void) {}
TearDownTestCase(void)50  void SwdecStateNdkTest::TearDownTestCase(void) {}
51  VDecNdkSample *vDecSample = NULL;
52  
SetUp(void)53  void SwdecStateNdkTest::SetUp(void)
54  {
55      vDecSample = new VDecNdkSample();
56      string codeName = "OH.Media.Codec.Decoder.Video.AVC";
57      int32_t ret = vDecSample->CreateVideoDecoder(codeName);
58      ASSERT_EQ(AV_ERR_OK, ret);
59      ret = vDecSample->SetVideoDecoderCallback();
60      ASSERT_EQ(AV_ERR_OK, ret);
61      ret = vDecSample->ConfigureVideoDecoder();
62      ASSERT_EQ(AV_ERR_OK, ret);
63      vDecSample->INP_DIR = "/data/test/media/1920_1080_10_30Mb.h264";
64  }
65  
TearDown(void)66  void SwdecStateNdkTest::TearDown(void)
67  {
68      vDecSample->Release();
69      delete vDecSample;
70      vDecSample = nullptr;
71  }
72  } // namespace Media
73  } // namespace OHOS
74  
75  namespace {
76  /**
77   * @tc.number    : VIDEO_SWDEC_STATE_0100
78   * @tc.name      : create-configure-error
79   * @tc.desc      : function test
80   */
81  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0100, TestSize.Level2)
82  {
83      int32_t ret = vDecSample->Flush();
84      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
85      ret = vDecSample->SetVideoDecoderCallback();
86      ASSERT_EQ(AV_ERR_OK, ret);
87  }
88  
89  /**
90   * @tc.number    : VIDEO_SWDEC_STATE_0101
91   * @tc.name      : create-configure-stop
92   * @tc.desc      : function test
93   */
94  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0101, TestSize.Level2)
95  {
96      int32_t ret = vDecSample->Stop();
97      ASSERT_EQ(AV_ERR_OK, ret);
98  }
99  
100  /**
101   * @tc.number    : VIDEO_SWDEC_STATE_0200
102   * @tc.name      : create-configure-start-stop-start
103   * @tc.desc      : function test
104   */
105  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0200, TestSize.Level2)
106  {
107      int32_t ret = vDecSample->Start();
108      ASSERT_EQ(AV_ERR_OK, ret);
109      ret = vDecSample->Stop();
110      ASSERT_EQ(AV_ERR_OK, ret);
111      ret = vDecSample->Start();
112      ASSERT_EQ(AV_ERR_OK, ret);
113  }
114  
115  /**
116   * @tc.number    : VIDEO_SWDEC_STATE_0300
117   * @tc.name      : create-configure-start-stop-release
118   * @tc.desc      : function test
119   */
120  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0300, TestSize.Level2)
121  {
122      int32_t ret = vDecSample->Start();
123      ASSERT_EQ(AV_ERR_OK, ret);
124      ret = vDecSample->Stop();
125      ASSERT_EQ(AV_ERR_OK, ret);
126      ret = vDecSample->Release();
127      ASSERT_EQ(AV_ERR_OK, ret);
128  }
129  
130  /**
131   * @tc.number    : VIDEO_SWDEC_STATE_0400
132   * @tc.name      : create-configure-start-stop-reset
133   * @tc.desc      : function test
134   */
135  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0400, TestSize.Level2)
136  {
137      int32_t ret = vDecSample->Start();
138      ASSERT_EQ(AV_ERR_OK, ret);
139      ret = vDecSample->Stop();
140      ASSERT_EQ(AV_ERR_OK, ret);
141      ret = vDecSample->Reset();
142      ASSERT_EQ(AV_ERR_OK, ret);
143  }
144  
145  /**
146   * @tc.number    : VIDEO_SWDEC_STATE_0500
147   * @tc.name      : create-configure-start-stop-error
148   * @tc.desc      : function test
149   */
150  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0500, TestSize.Level2)
151  {
152      int32_t ret = vDecSample->Start();
153      ASSERT_EQ(AV_ERR_OK, ret);
154      ret = vDecSample->Stop();
155      ASSERT_EQ(AV_ERR_OK, ret);
156      ret = vDecSample->Flush();
157      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
158      ret = vDecSample->SetVideoDecoderCallback();
159      ASSERT_EQ(AV_ERR_OK, ret);
160  }
161  
162  /**
163   * @tc.number    : VIDEO_SWDEC_STATE_0600
164   * @tc.name      : create-configure-start-EOS-stop-start
165   * @tc.desc      : function test
166   */
167  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0600, TestSize.Level2)
168  {
169      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
170      int32_t ret = vDecSample->StartVideoDecoder();
171      ASSERT_EQ(AV_ERR_OK, ret);
172      vDecSample->WaitForEOS();
173      ASSERT_EQ(AV_ERR_OK, ret);
174      ASSERT_EQ(0, vDecSample->errCount);
175      ret = vDecSample->Stop();
176      ASSERT_EQ(AV_ERR_OK, ret);
177      ret = vDecSample->Start();
178      ASSERT_EQ(AV_ERR_OK, ret);
179  }
180  
181  /**
182   * @tc.number    : VIDEO_SWDEC_STATE_0700
183   * @tc.name      : create-configure-start-EOS-stop-release
184   * @tc.desc      : function test
185   */
186  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0700, TestSize.Level2)
187  {
188      int32_t ret = vDecSample->StartVideoDecoder();
189      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
190      vDecSample->WaitForEOS();
191      ASSERT_EQ(AV_ERR_OK, ret);
192      ASSERT_EQ(0, vDecSample->errCount);
193      ret = vDecSample->Stop();
194      ASSERT_EQ(AV_ERR_OK, ret);
195      ret = vDecSample->Release();
196      ASSERT_EQ(AV_ERR_OK, ret);
197  }
198  
199  /**
200   * @tc.number    : VIDEO_SWDEC_STATE_0800
201   * @tc.name      : create-configure-start-EOS-stop-reset
202   * @tc.desc      : function test
203   */
204  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0800, TestSize.Level2)
205  {
206      int32_t ret = vDecSample->StartVideoDecoder();
207      ASSERT_EQ(AV_ERR_OK, ret);
208      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
209      vDecSample->WaitForEOS();
210      ASSERT_EQ(AV_ERR_OK, ret);
211      ASSERT_EQ(0, vDecSample->errCount);
212      ret = vDecSample->Stop();
213      ASSERT_EQ(AV_ERR_OK, ret);
214      ret = vDecSample->Reset();
215      ASSERT_EQ(AV_ERR_OK, ret);
216  }
217  
218  /**
219   * @tc.number    : VIDEO_SWDEC_STATE_0900
220   * @tc.name      : create-configure-start-EOS-flush
221   * @tc.desc      : function test
222   */
223  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_0900, TestSize.Level2)
224  {
225      int32_t ret = vDecSample->StartVideoDecoder();
226      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
227      vDecSample->WaitForEOS();
228      ASSERT_EQ(AV_ERR_OK, ret);
229      ASSERT_EQ(0, vDecSample->errCount);
230      ret = vDecSample->Flush();
231      ASSERT_EQ(AV_ERR_OK, ret);
232  }
233  
234  /**
235   * @tc.number    : VIDEO_SWDEC_STATE_1000
236   * @tc.name      : create-configure-start-EOS-flush-start
237   * @tc.desc      : function test
238   */
239  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1000, TestSize.Level2)
240  {
241      int32_t ret = vDecSample->StartVideoDecoder();
242      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
243      vDecSample->WaitForEOS();
244      ASSERT_EQ(AV_ERR_OK, ret);
245      ASSERT_EQ(0, vDecSample->errCount);
246      ret = vDecSample->Flush();
247      ASSERT_EQ(AV_ERR_OK, ret);
248      ret = vDecSample->Start();
249      ASSERT_EQ(AV_ERR_OK, ret);
250  }
251  
252  /**
253   * @tc.number    : VIDEO_SWDEC_STATE_1100
254   * @tc.name      : create-configure-start-EOS-flush-stop
255   * @tc.desc      : function test
256   */
257  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1100, TestSize.Level2)
258  {
259      int32_t ret = vDecSample->StartVideoDecoder();
260      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
261      vDecSample->WaitForEOS();
262      ASSERT_EQ(AV_ERR_OK, ret);
263      ASSERT_EQ(0, vDecSample->errCount);
264      ret = vDecSample->Flush();
265      ASSERT_EQ(AV_ERR_OK, ret);
266      ret = vDecSample->Stop();
267      ASSERT_EQ(AV_ERR_OK, ret);
268  }
269  
270  /**
271   * @tc.number    : VIDEO_SWDEC_STATE_1200
272   * @tc.name      : create-configure-start-EOS-flush-reset
273   * @tc.desc      : function test
274   */
275  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1200, TestSize.Level2)
276  {
277      int32_t ret = vDecSample->StartVideoDecoder();
278      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
279      vDecSample->WaitForEOS();
280      ASSERT_EQ(AV_ERR_OK, ret);
281      ASSERT_EQ(0, vDecSample->errCount);
282      ret = vDecSample->Flush();
283      ASSERT_EQ(AV_ERR_OK, ret);
284      ret = vDecSample->Reset();
285      ASSERT_EQ(AV_ERR_OK, ret);
286  }
287  
288  /**
289   * @tc.number    : VIDEO_SWDEC_STATE_1300
290   * @tc.name      : create-configure-start-EOS-flush-error
291   * @tc.desc      : function test
292   */
293  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1300, TestSize.Level2)
294  {
295      int32_t ret = vDecSample->StartVideoDecoder();
296      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
297      vDecSample->WaitForEOS();
298      ASSERT_EQ(AV_ERR_OK, ret);
299      ASSERT_EQ(0, vDecSample->errCount);
300      ret = vDecSample->Flush();
301      ASSERT_EQ(AV_ERR_OK, ret);
302      ret = vDecSample->Release();
303      ASSERT_EQ(AV_ERR_OK, ret);
304      ret = vDecSample->ConfigureVideoDecoder();
305      ASSERT_EQ(AV_ERR_INVALID_VAL, ret);
306  }
307  
308  /**
309   * @tc.number    : VIDEO_SWDEC_STATE_1400
310   * @tc.name      : create-configure-start-EOS-reset-configure
311   * @tc.desc      : function test
312   */
313  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1400, TestSize.Level2)
314  {
315      int32_t ret = vDecSample->StartVideoDecoder();
316      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
317      vDecSample->WaitForEOS();
318      ASSERT_EQ(AV_ERR_OK, ret);
319      ASSERT_EQ(0, vDecSample->errCount);
320      ret = vDecSample->Reset();
321      ASSERT_EQ(AV_ERR_OK, ret);
322      ret = vDecSample->ConfigureVideoDecoder();
323      ASSERT_EQ(AV_ERR_OK, ret);
324  }
325  
326  /**
327   * @tc.number    : VIDEO_SWDEC_STATE_1500
328   * @tc.name      : create-configure-start-EOS-reset-release
329   * @tc.desc      : function test
330   */
331  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1500, TestSize.Level2)
332  {
333      int32_t ret = vDecSample->StartVideoDecoder();
334      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
335      vDecSample->WaitForEOS();
336      ASSERT_EQ(AV_ERR_OK, ret);
337      ASSERT_EQ(0, vDecSample->errCount);
338      ret = vDecSample->Reset();
339      ASSERT_EQ(AV_ERR_OK, ret);
340      ret = vDecSample->Release();
341      ASSERT_EQ(AV_ERR_OK, ret);
342  }
343  
344  /**
345   * @tc.number    : VIDEO_SWDEC_STATE_1600
346   * @tc.name      : create-configure-start-EOS-reset-error
347   * @tc.desc      : function test
348   */
349  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1600, TestSize.Level2)
350  {
351      int32_t ret = vDecSample->StartVideoDecoder();
352      vDecSample->AFTER_EOS_DESTORY_CODEC = false;
353      vDecSample->WaitForEOS();
354      ASSERT_EQ(AV_ERR_OK, ret);
355      ASSERT_EQ(0, vDecSample->errCount);
356      ret = vDecSample->Reset();
357      ASSERT_EQ(AV_ERR_OK, ret);
358      ret = vDecSample->Start();
359      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
360      ret = vDecSample->Stop();
361      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
362      ret = vDecSample->Flush();
363      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
364  }
365  
366  /**
367   * @tc.number    : VIDEO_SWDEC_STATE_1700
368   * @tc.name      : create-configure-start-flush-start-flush
369   * @tc.desc      : function test
370   */
371  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1700, TestSize.Level2)
372  {
373      int32_t ret = vDecSample->Start();
374      ASSERT_EQ(AV_ERR_OK, ret);
375      ret = vDecSample->Flush();
376      ASSERT_EQ(AV_ERR_OK, ret);
377      ret = vDecSample->Start();
378      ASSERT_EQ(AV_ERR_OK, ret);
379      ret = vDecSample->Flush();
380      ASSERT_EQ(AV_ERR_OK, ret);
381  }
382  
383  /**
384   * @tc.number    : VIDEO_SWDEC_STATE_1800
385   * @tc.name      : create-configure-start-flush-start-eos
386   * @tc.desc      : function test
387   */
388  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1800, TestSize.Level2)
389  {
390      int32_t ret = vDecSample->Start();
391      ASSERT_EQ(AV_ERR_OK, ret);
392      ret = vDecSample->Flush();
393      ASSERT_EQ(AV_ERR_OK, ret);
394      ret = vDecSample->Start();
395      ASSERT_EQ(AV_ERR_OK, ret);
396      ret = vDecSample->state_EOS();
397      ASSERT_EQ(AV_ERR_OK, ret);
398  }
399  
400  /**
401   * @tc.number    : VIDEO_SWDEC_STATE_1900
402   * @tc.name      : create-configure-start-flush-start-stop
403   * @tc.desc      : function test
404   */
405  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_1900, TestSize.Level2)
406  {
407      int32_t ret = vDecSample->Start();
408      ASSERT_EQ(AV_ERR_OK, ret);
409      ret = vDecSample->Flush();
410      ASSERT_EQ(AV_ERR_OK, ret);
411      ret = vDecSample->Start();
412      ASSERT_EQ(AV_ERR_OK, ret);
413      ret = vDecSample->Stop();
414      ASSERT_EQ(AV_ERR_OK, ret);
415  }
416  
417  /**
418   * @tc.number    : VIDEO_SWDEC_STATE_2000
419   * @tc.name      : create-configure-start-flush-start-reset
420   * @tc.desc      : function test
421   */
422  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2000, TestSize.Level2)
423  {
424      int32_t ret = vDecSample->Start();
425      ASSERT_EQ(AV_ERR_OK, ret);
426      ret = vDecSample->Flush();
427      ASSERT_EQ(AV_ERR_OK, ret);
428      ret = vDecSample->Start();
429      ASSERT_EQ(AV_ERR_OK, ret);
430      ret = vDecSample->Reset();
431      ASSERT_EQ(AV_ERR_OK, ret);
432  }
433  
434  /**
435   * @tc.number    : VIDEO_SWDEC_STATE_2100
436   * @tc.name      : create-configure-start-flush-start-error
437   * @tc.desc      : function test
438   */
439  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2100, TestSize.Level2)
440  {
441      int32_t ret = vDecSample->Start();
442      ASSERT_EQ(AV_ERR_OK, ret);
443      ret = vDecSample->Flush();
444      ASSERT_EQ(AV_ERR_OK, ret);
445      ret = vDecSample->Start();
446      ASSERT_EQ(AV_ERR_OK, ret);
447      ret = vDecSample->ConfigureVideoDecoder();
448      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
449      ret = vDecSample->SetVideoDecoderCallback();
450      ASSERT_EQ(AV_ERR_OK, ret);
451      ret = vDecSample->Release();
452      ASSERT_EQ(AV_ERR_OK, ret);
453  }
454  
455  /**
456   * @tc.number    : VIDEO_SWDEC_STATE_2200
457   * @tc.name      : create-configure-start-flush-start
458   * @tc.desc      : function test
459   */
460  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2200, TestSize.Level2)
461  {
462      int32_t ret = vDecSample->Start();
463      ASSERT_EQ(AV_ERR_OK, ret);
464      ret = vDecSample->Flush();
465      ASSERT_EQ(AV_ERR_OK, ret);
466      ret = vDecSample->Stop();
467      ASSERT_EQ(AV_ERR_OK, ret);
468      ret = vDecSample->Start();
469      ASSERT_EQ(AV_ERR_OK, ret);
470  }
471  
472  /**
473   * @tc.number    : VIDEO_SWDEC_STATE_2300
474   * @tc.name      : create-configure-start-flush-stop-start
475   * @tc.desc      : function test
476   */
477  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2300, TestSize.Level2)
478  {
479      int32_t ret = vDecSample->Start();
480      ASSERT_EQ(AV_ERR_OK, ret);
481      ret = vDecSample->Flush();
482      ASSERT_EQ(AV_ERR_OK, ret);
483      ret = vDecSample->Stop();
484      ASSERT_EQ(AV_ERR_OK, ret);
485      ret = vDecSample->Release();
486      ASSERT_EQ(AV_ERR_OK, ret);
487  }
488  
489  /**
490   * @tc.number    : VIDEO_SWDEC_STATE_2400
491   * @tc.name      : create-configure-start-flush-stop-reset
492   * @tc.desc      : function test
493   */
494  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2400, TestSize.Level2)
495  {
496      int32_t ret = vDecSample->Start();
497      ASSERT_EQ(AV_ERR_OK, ret);
498      ret = vDecSample->Flush();
499      ASSERT_EQ(AV_ERR_OK, ret);
500      ret = vDecSample->Stop();
501      ASSERT_EQ(AV_ERR_OK, ret);
502      ret = vDecSample->Reset();
503      ASSERT_EQ(AV_ERR_OK, ret);
504  }
505  
506  /**
507   * @tc.number    : VIDEO_SWDEC_STATE_2500
508   * @tc.name      : create-configure-start-flush-stop-error
509   * @tc.desc      : function test
510   */
511  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2500, TestSize.Level2)
512  {
513      int32_t ret = vDecSample->Start();
514      ASSERT_EQ(AV_ERR_OK, ret);
515      ret = vDecSample->Flush();
516      ASSERT_EQ(AV_ERR_OK, ret);
517      ret = vDecSample->Stop();
518      ASSERT_EQ(AV_ERR_OK, ret);
519      ret = vDecSample->Flush();
520      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
521      ret = vDecSample->SetVideoDecoderCallback();
522      ASSERT_EQ(AV_ERR_OK, ret);
523  }
524  
525  /**
526   * @tc.number    : VIDEO_SWDEC_STATE_2600
527   * @tc.name      : create-configure-start-flush-reset-configure
528   * @tc.desc      : function test
529   */
530  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2600, TestSize.Level2)
531  {
532      int32_t ret = vDecSample->Start();
533      ASSERT_EQ(AV_ERR_OK, ret);
534      ret = vDecSample->Flush();
535      ASSERT_EQ(AV_ERR_OK, ret);
536      ret = vDecSample->Reset();
537      ASSERT_EQ(AV_ERR_OK, ret);
538      ret = vDecSample->ConfigureVideoDecoder();
539      ASSERT_EQ(AV_ERR_OK, ret);
540  }
541  
542  /**
543   * @tc.number    : VIDEO_SWDEC_STATE_2700
544   * @tc.name      : create-configure-start-flush-reset-release
545   * @tc.desc      : function test
546   */
547  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2700, TestSize.Level2)
548  {
549      int32_t ret = vDecSample->Start();
550      ASSERT_EQ(AV_ERR_OK, ret);
551      ret = vDecSample->Flush();
552      ASSERT_EQ(AV_ERR_OK, ret);
553      ret = vDecSample->Reset();
554      ASSERT_EQ(AV_ERR_OK, ret);
555      ret = vDecSample->Release();
556      ASSERT_EQ(AV_ERR_OK, ret);
557  }
558  
559  /**
560   * @tc.number    : VIDEO_SWDEC_STATE_2800
561   * @tc.name      : create-configure-start-flush-reset-error
562   * @tc.desc      : function test
563   */
564  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2800, TestSize.Level2)
565  {
566      int32_t ret = vDecSample->Start();
567      ASSERT_EQ(AV_ERR_OK, ret);
568      ret = vDecSample->Flush();
569      ASSERT_EQ(AV_ERR_OK, ret);
570      ret = vDecSample->Reset();
571      ASSERT_EQ(AV_ERR_OK, ret);
572      ret = vDecSample->Start();
573      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
574      ret = vDecSample->Stop();
575      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
576      ret = vDecSample->Flush();
577      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
578      ret = vDecSample->SetVideoDecoderCallback();
579      ASSERT_EQ(AV_ERR_OK, ret);
580  }
581  
582  /**
583   * @tc.number    : VIDEO_SWDEC_STATE_2900
584   * @tc.name      : create-configure-start-reset-configure
585   * @tc.desc      : function test
586   */
587  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_2900, TestSize.Level2)
588  {
589      int32_t ret = vDecSample->Start();
590      ASSERT_EQ(AV_ERR_OK, ret);
591      ret = vDecSample->Reset();
592      ASSERT_EQ(AV_ERR_OK, ret);
593      ret = vDecSample->ConfigureVideoDecoder();
594      ASSERT_EQ(AV_ERR_OK, ret);
595  }
596  
597  /**
598   * @tc.number    : VIDEO_SWDEC_STATE_3000
599   * @tc.name      : create-configure-start-reset-release
600   * @tc.desc      : function test
601   */
602  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_3000, TestSize.Level2)
603  {
604      int32_t ret = vDecSample->Start();
605      ASSERT_EQ(AV_ERR_OK, ret);
606      ret = vDecSample->Reset();
607      ASSERT_EQ(AV_ERR_OK, ret);
608      ret = vDecSample->Release();
609      ASSERT_EQ(AV_ERR_OK, ret);
610  }
611  
612  /**
613   * @tc.number    : VIDEO_SWDEC_STATE_3100
614   * @tc.name      : create-configure-start-reset-error
615   * @tc.desc      : function test
616   */
617  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_3100, TestSize.Level2)
618  {
619      int32_t ret = vDecSample->Start();
620      ASSERT_EQ(AV_ERR_OK, ret);
621      ret = vDecSample->Reset();
622      ASSERT_EQ(AV_ERR_OK, ret);
623      ret = vDecSample->Start();
624      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
625      ret = vDecSample->Stop();
626      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
627      ret = vDecSample->Flush();
628      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
629      ret = vDecSample->SetVideoDecoderCallback();
630      ASSERT_EQ(AV_ERR_OK, ret);
631  }
632  
633  /**
634   * @tc.number    : VIDEO_SWDEC_STATE_3200
635   * @tc.name      : create-configure-start-error
636   * @tc.desc      : function test
637   */
638  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_3200, TestSize.Level2)
639  {
640      int32_t ret = vDecSample->Start();
641      ASSERT_EQ(AV_ERR_OK, ret);
642      ret = vDecSample->ConfigureVideoDecoder();
643      ASSERT_EQ(AV_ERR_INVALID_STATE, ret);
644      ret = vDecSample->SetVideoDecoderCallback();
645      ASSERT_EQ(AV_ERR_OK, ret);
646      ret = vDecSample->Release();
647      ASSERT_EQ(AV_ERR_OK, ret);
648  }
649  
650  /**
651   * @tc.number    : VIDEO_SWDEC_STATE_3300
652   * @tc.name      : create-configure-reset-configure
653   * @tc.desc      : function test
654   */
655  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_3300, TestSize.Level2)
656  {
657      int32_t ret = vDecSample->Reset();
658      ASSERT_EQ(AV_ERR_OK, ret);
659      ret = vDecSample->ConfigureVideoDecoder();
660      ASSERT_EQ(AV_ERR_OK, ret);
661  }
662  
663  /**
664   * @tc.number    : VIDEO_SWDEC_STATE_3400
665   * @tc.name      : create-configure-release
666   * @tc.desc      : function test
667   */
668  HWTEST_F(SwdecStateNdkTest, VIDEO_SWDEC_STATE_3400, TestSize.Level2)
669  {
670      int32_t ret = vDecSample->Release();
671      ASSERT_EQ(AV_ERR_OK, ret);
672  }
673  } // namespace