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
16 #include <iostream>
17 #include <cstdio>
18
19 #include <atomic>
20 #include <fstream>
21 #include <thread>
22 #include <mutex>
23 #include <queue>
24 #include <string>
25
26 #include "gtest/gtest.h"
27 #include "videodec_sample.h"
28 using namespace std;
29 using namespace OHOS;
30 using namespace OHOS::Media;
31 using namespace testing::ext;
32 namespace OHOS {
33 namespace Media {
34 class Mpeg2SwdecCompNdkTest : public testing::Test {
35 public:
36 // SetUpTestCase: Called before all test cases
37 static void SetUpTestCase(void);
38 // TearDownTestCase: Called after all test case
39 static void TearDownTestCase(void);
40 // SetUp: Called before each test cases
41 void SetUp(void);
42 // TearDown: Called after each test cases
43 void TearDown(void);
44
45 protected:
46 const ::testing::TestInfo *testInfo_ = nullptr;
47 bool createCodecSuccess_ = false;
48 };
49
SetUpTestCase(void)50 void Mpeg2SwdecCompNdkTest::SetUpTestCase(void) {}
TearDownTestCase(void)51 void Mpeg2SwdecCompNdkTest::TearDownTestCase(void) {}
SetUp(void)52 void Mpeg2SwdecCompNdkTest::SetUp(void) {}
TearDown(void)53 void Mpeg2SwdecCompNdkTest::TearDown(void) {}
54 } // namespace Media
55 } // namespace OHOS
56
57 namespace {
58 /**
59 * @tc.number : VIDEO_SWDEC_MPEG2_IPB_0100
60 * @tc.name : software decode all i frame mpeg2 stream
61 * @tc.desc : function test
62 */
63 HWTEST_F(Mpeg2SwdecCompNdkTest, VIDEO_SWDEC_MPEG2_IPB_0100, TestSize.Level2)
64 {
65 VDecNdkSample *vDecSample = new VDecNdkSample();
66 int32_t ret = vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.MPEG2");
67 ASSERT_EQ(AV_ERR_OK, ret);
68 vDecSample->INP_DIR = "/data/test/media/all_i_main@high14_level_1280_720_30.m2v";
69 vDecSample->DEFAULT_WIDTH = 1280;
70 vDecSample->DEFAULT_HEIGHT = 720;
71 ret = vDecSample->SetVideoDecoderCallback();
72 ASSERT_EQ(AV_ERR_OK, ret);
73 ret = vDecSample->ConfigureVideoDecoder();
74 ASSERT_EQ(AV_ERR_OK, ret);
75 ret = vDecSample->StartVideoDecoder();
76 ASSERT_EQ(AV_ERR_OK, ret);
77 vDecSample->WaitForEOS();
78 ASSERT_EQ(0, vDecSample->errCount);
79 }
80
81 /**
82 * @tc.number : VIDEO_SWDEC_MPEG2_IPB_0200
83 * @tc.name : software decode i/p frame mpeg2 stream
84 * @tc.desc : function test
85 */
86 HWTEST_F(Mpeg2SwdecCompNdkTest, VIDEO_SWDEC_MPEG2_IPB_0200, TestSize.Level2)
87 {
88 VDecNdkSample *vDecSample = new VDecNdkSample();
89 int32_t ret = vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.MPEG2");
90 ASSERT_EQ(AV_ERR_OK, ret);
91 vDecSample->INP_DIR = "/data/test/media/ip_main@high14_level_1280_720_30.m2v";
92 vDecSample->DEFAULT_WIDTH = 1280;
93 vDecSample->DEFAULT_HEIGHT = 720;
94 ret = vDecSample->SetVideoDecoderCallback();
95 ASSERT_EQ(AV_ERR_OK, ret);
96 ret = vDecSample->ConfigureVideoDecoder();
97 ASSERT_EQ(AV_ERR_OK, ret);
98 ret = vDecSample->StartVideoDecoder();
99 ASSERT_EQ(AV_ERR_OK, ret);
100 vDecSample->WaitForEOS();
101 ASSERT_EQ(0, vDecSample->errCount);
102 }
103
104 /**
105 * @tc.number : VIDEO_SWDEC_MPEG2_IPB_0300
106 * @tc.name : software decode i/p/b frame mpeg2 stream
107 * @tc.desc : function test
108 */
109 HWTEST_F(Mpeg2SwdecCompNdkTest, VIDEO_SWDEC_MPEG2_IPB_0300, TestSize.Level2)
110 {
111 VDecNdkSample *vDecSample = new VDecNdkSample();
112 int32_t ret = vDecSample->CreateVideoDecoder("OH.Media.Codec.Decoder.Video.MPEG2");
113 ASSERT_EQ(AV_ERR_OK, ret);
114 vDecSample->INP_DIR = "/data/test/media/ipb_main@high14_level_1280_720_30.m2v";
115 vDecSample->DEFAULT_WIDTH = 1280;
116 vDecSample->DEFAULT_HEIGHT = 720;
117 ret = vDecSample->SetVideoDecoderCallback();
118 ASSERT_EQ(AV_ERR_OK, ret);
119 ret = vDecSample->ConfigureVideoDecoder();
120 ASSERT_EQ(AV_ERR_OK, ret);
121 ret = vDecSample->StartVideoDecoder();
122 ASSERT_EQ(AV_ERR_OK, ret);
123 vDecSample->WaitForEOS();
124 ASSERT_EQ(0, vDecSample->errCount);
125 }
126 } // namespace