1 /*
2 * Copyright (c) 2024 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 "gtest/gtest.h"
17 #include "meta/format.h"
18 #include "avcodec_errors.h"
19 #include "avcodec_common.h"
20 #include "securec.h"
21 #include "reference_parser_demo.h"
22
23 using namespace std;
24 using namespace OHOS;
25 using namespace OHOS::MediaAVCodec;
26 using namespace testing::ext;
27
28 namespace {
29 class ReferenceParserTest : public testing::Test {
30 public:
31 // SetUpTestCase: CALLed before all test cases
32 static void SetUpTestCase(void);
33 // TearDownTestCase: CALLed after all test cases
34 static void TearDownTestCase(void);
35 // SetUp: Called before each test cases
36 void SetUp(void);
37 // TearDown: Called after each test cases;
38 void TearDown(void);
39
40 private:
41 shared_ptr<ReferenceParserDemo> refParserDemo_ = nullptr;
42 };
43
SetUpTestCase()44 void ReferenceParserTest::SetUpTestCase() {}
45
TearDownTestCase()46 void ReferenceParserTest::TearDownTestCase() {}
47
SetUp()48 void ReferenceParserTest::SetUp()
49 {
50 refParserDemo_ = make_shared<ReferenceParserDemo>();
51 }
52
TearDown()53 void ReferenceParserTest::TearDown()
54 {
55 refParserDemo_ = nullptr;
56 }
57 } // namespace
58
59 namespace {
60 constexpr int64_t DEC_COST_TIME_MS = 6L;
61 /**
62 * @tc.number : RP_FUNC_SEEK_IPB_0_0100
63 * @tc.name : do accurate seek
64 * @tc.desc : func test
65 */
66 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPB_0_0100, TestSize.Level1)
67 {
68 if (!access("/system/lib64/media/", 0)) {
69 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
70 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPB_0));
71 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(1566)); // 1566 is frame 99
72 }
73 }
74
75 /**
76 * @tc.number : RP_FUNC_SEEK_IPB_0_0100
77 * @tc.name : do accurate seek
78 * @tc.desc : func test
79 */
80 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPB_1_0100, TestSize.Level1)
81 {
82 if (!access("/system/lib64/media/", 0)) {
83 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
84 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPB_1));
85 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(1599)); // 1599 is frame 50
86 }
87 }
88
89 /**
90 * @tc.number : RP_FUNC_SEEK_IPPP_0_0100
91 * @tc.name : do accurate seek
92 * @tc.desc : func test
93 */
94 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPPP_0_0100, TestSize.Level1)
95 {
96 if (!access("/system/lib64/media/", 0)) {
97 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
98 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_0));
99 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(500)); // 500 is frame 30
100 }
101 }
102
103 /**
104 * @tc.number : RP_FUNC_SEEK_IPPP_1_0100
105 * @tc.name : do accurate seek
106 * @tc.desc : func test
107 */
108 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPPP_1_0100, TestSize.Level1)
109 {
110 if (!access("/system/lib64/media/", 0)) {
111 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
112 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_1));
113 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(27840)); // 27840 is frame 696
114 }
115 }
116
117 /**
118 * @tc.number : RP_FUNC_SEEK_IPPP_SCALA_0_0100
119 * @tc.name : do accurate seek
120 * @tc.desc : func test
121 */
122 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPPP_SCALA_0_0100, TestSize.Level1)
123 {
124 if (!access("/system/lib64/media/", 0)) {
125 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
126 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_SCALA_0));
127 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(20040)); // 20040 is frame 501
128 }
129 }
130
131 /**
132 * @tc.number : RP_FUNC_SEEK_IPPP_SCALA_1_0100
133 * @tc.name : do accurate seek
134 * @tc.desc : func test
135 */
136 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPPP_SCALA_1_0100, TestSize.Level1)
137 {
138 if (!access("/system/lib64/media/", 0)) {
139 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
140 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_SCALA_1));
141 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(200)); // 200 is frame 5
142 }
143 }
144
145 /**
146 * @tc.number : RP_FUNC_SEEK_SDTP_0100
147 * @tc.name : do accurate seek
148 * @tc.desc : func test
149 */
150 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_SDTP_0100, TestSize.Level1)
151 {
152 if (!access("/system/lib64/media/", 0)) {
153 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
154 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::SDTP));
155 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(10266)); // 10266 is frame 310
156 }
157 }
158
159 /**
160 * @tc.number : RP_FUNC_VAR_SPEED_IPB_0_0100
161 * @tc.name : do var speed
162 * @tc.desc : func test
163 */
164 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPB_0_0100, TestSize.Level1)
165 {
166 if (!access("/system/lib64/media/", 0)) {
167 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
168 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPB_0));
169 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(416)); // 416 is frame 30
170 }
171 }
172
173 /**
174 * @tc.number : RP_FUNC_VAR_SPEED_IPB_1_0100
175 * @tc.name : do var speed
176 * @tc.desc : func test
177 */
178 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPB_1_0100, TestSize.Level1)
179 {
180 if (!access("/system/lib64/media/", 0)) {
181 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
182 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPB_1));
183 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(1133)); // 1133 is frame 36
184 }
185 }
186
187 /**
188 * @tc.number : RP_FUNC_VAR_SPEED_IPPP_0_0100
189 * @tc.name : do var speed
190 * @tc.desc : func test
191 */
192 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPPP_0_0100, TestSize.Level1)
193 {
194 if (!access("/system/lib64/media/", 0)) {
195 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
196 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_0));
197 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(23966)); // 23966 is frame 1438
198 }
199 }
200
201 /**
202 * @tc.number : RP_FUNC_VAR_SPEED_IPPP_1_0100
203 * @tc.name : do var speed
204 * @tc.desc : func test
205 */
206 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPPP_1_0100, TestSize.Level1)
207 {
208 if (!access("/system/lib64/media/", 0)) {
209 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
210 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_1));
211 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(23880)); // 23880 is frame 597
212 }
213 }
214
215 /**
216 * @tc.number : RP_FUNC_VAR_SPEED_IPPP_SCALA_0_0100
217 * @tc.name : do var speed
218 * @tc.desc : func test
219 */
220 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPPP_SCALA_0_0100, TestSize.Level1)
221 {
222 if (!access("/system/lib64/media/", 0)) {
223 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
224 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_SCALA_0));
225 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(10680)); // 10680 is frame 267
226 }
227 }
228
229 /**
230 * @tc.number : RP_FUNC_VAR_SPEED_IPPP_SCALA_1_0100
231 * @tc.name : do var speed
232 * @tc.desc : func test
233 */
234 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPPP_SCALA_1_0100, TestSize.Level1)
235 {
236 if (!access("/system/lib64/media/", 0)) {
237 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
238 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_SCALA_1));
239 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(400)); // 400 is frame 10
240 }
241 }
242
243 /**
244 * @tc.number : RP_FUNC_VAR_SPEED_SDTP_0100
245 * @tc.name : do var speed
246 * @tc.desc : func test
247 */
248 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_SDTP_0100, TestSize.Level1)
249 {
250 if (!access("/system/lib64/media/", 0)) {
251 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
252 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::SDTP));
253 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(8233)); // 8233 is frame 249
254 }
255 }
256 } // namespace