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 int32_t WAIT_TIME = 5;
61 constexpr int64_t DEC_COST_TIME_MS = 6L;
62 /**
63 * @tc.number : RP_FUNC_SEEK_IPB_0_0100
64 * @tc.name : do accurate seek
65 * @tc.desc : func test
66 */
67 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPB_0_0100, TestSize.Level1)
68 {
69 if (!access("/system/lib64/media/", 0)) {
70 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
71 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPB_0));
72 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(1566)); // 1566 is frame 99
73 sleep(WAIT_TIME);
74 }
75 }
76
77 /**
78 * @tc.number : RP_FUNC_SEEK_IPB_0_0100
79 * @tc.name : do accurate seek
80 * @tc.desc : func test
81 */
82 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPB_1_0100, TestSize.Level1)
83 {
84 if (!access("/system/lib64/media/", 0)) {
85 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
86 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPB_1));
87 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(1599)); // 1599 is frame 50
88 sleep(WAIT_TIME);
89 }
90 }
91
92 /**
93 * @tc.number : RP_FUNC_SEEK_IPPP_0_0100
94 * @tc.name : do accurate seek
95 * @tc.desc : func test
96 */
97 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPPP_0_0100, TestSize.Level1)
98 {
99 if (!access("/system/lib64/media/", 0)) {
100 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
101 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_0));
102 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(500)); // 500 is frame 30
103 sleep(WAIT_TIME);
104 }
105 }
106
107 /**
108 * @tc.number : RP_FUNC_SEEK_IPPP_1_0100
109 * @tc.name : do accurate seek
110 * @tc.desc : func test
111 */
112 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPPP_1_0100, TestSize.Level1)
113 {
114 if (!access("/system/lib64/media/", 0)) {
115 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
116 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_1));
117 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(27840)); // 27840 is frame 696
118 sleep(WAIT_TIME);
119 }
120 }
121
122 /**
123 * @tc.number : RP_FUNC_SEEK_IPPP_SCALA_0_0100
124 * @tc.name : do accurate seek
125 * @tc.desc : func test
126 */
127 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPPP_SCALA_0_0100, TestSize.Level1)
128 {
129 if (!access("/system/lib64/media/", 0)) {
130 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
131 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_SCALA_0));
132 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(20040)); // 20040 is frame 501
133 sleep(WAIT_TIME);
134 }
135 }
136
137 /**
138 * @tc.number : RP_FUNC_SEEK_IPPP_SCALA_1_0100
139 * @tc.name : do accurate seek
140 * @tc.desc : func test
141 */
142 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_IPPP_SCALA_1_0100, TestSize.Level1)
143 {
144 if (!access("/system/lib64/media/", 0)) {
145 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
146 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_SCALA_1));
147 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(200)); // 200 is frame 5
148 sleep(WAIT_TIME);
149 }
150 }
151
152 /**
153 * @tc.number : RP_FUNC_SEEK_SDTP_0100
154 * @tc.name : do accurate seek
155 * @tc.desc : func test
156 */
157 HWTEST_F(ReferenceParserTest, RP_FUNC_SEEK_SDTP_0100, TestSize.Level1)
158 {
159 if (!access("/system/lib64/media/", 0)) {
160 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
161 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::SDTP));
162 ASSERT_EQ(true, refParserDemo_->DoAccurateSeek(10266)); // 10266 is frame 310
163 sleep(WAIT_TIME);
164 }
165 }
166
167 /**
168 * @tc.number : RP_FUNC_VAR_SPEED_IPB_0_0100
169 * @tc.name : do var speed
170 * @tc.desc : func test
171 */
172 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPB_0_0100, TestSize.Level1)
173 {
174 if (!access("/system/lib64/media/", 0)) {
175 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
176 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPB_0));
177 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(416)); // 416 is frame 30
178 sleep(WAIT_TIME);
179 }
180 }
181
182 /**
183 * @tc.number : RP_FUNC_VAR_SPEED_IPB_1_0100
184 * @tc.name : do var speed
185 * @tc.desc : func test
186 */
187 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPB_1_0100, TestSize.Level1)
188 {
189 if (!access("/system/lib64/media/", 0)) {
190 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
191 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPB_1));
192 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(1133)); // 1133 is frame 36
193 sleep(WAIT_TIME);
194 }
195 }
196
197 /**
198 * @tc.number : RP_FUNC_VAR_SPEED_IPPP_0_0100
199 * @tc.name : do var speed
200 * @tc.desc : func test
201 */
202 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPPP_0_0100, TestSize.Level1)
203 {
204 if (!access("/system/lib64/media/", 0)) {
205 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
206 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_0));
207 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(23966)); // 23966 is frame 1438
208 sleep(WAIT_TIME);
209 }
210 }
211
212 /**
213 * @tc.number : RP_FUNC_VAR_SPEED_IPPP_1_0100
214 * @tc.name : do var speed
215 * @tc.desc : func test
216 */
217 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPPP_1_0100, TestSize.Level1)
218 {
219 if (!access("/system/lib64/media/", 0)) {
220 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
221 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_1));
222 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(23880)); // 23880 is frame 597
223 sleep(WAIT_TIME);
224 }
225 }
226
227 /**
228 * @tc.number : RP_FUNC_VAR_SPEED_IPPP_SCALA_0_0100
229 * @tc.name : do var speed
230 * @tc.desc : func test
231 */
232 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPPP_SCALA_0_0100, TestSize.Level1)
233 {
234 if (!access("/system/lib64/media/", 0)) {
235 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
236 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_SCALA_0));
237 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(10680)); // 10680 is frame 267
238 sleep(WAIT_TIME);
239 }
240 }
241
242 /**
243 * @tc.number : RP_FUNC_VAR_SPEED_IPPP_SCALA_1_0100
244 * @tc.name : do var speed
245 * @tc.desc : func test
246 */
247 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_IPPP_SCALA_1_0100, TestSize.Level1)
248 {
249 if (!access("/system/lib64/media/", 0)) {
250 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
251 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::IPPP_SCALA_1));
252 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(400)); // 400 is frame 10
253 sleep(WAIT_TIME);
254 }
255 }
256
257 /**
258 * @tc.number : RP_FUNC_VAR_SPEED_SDTP_0100
259 * @tc.name : do var speed
260 * @tc.desc : func test
261 */
262 HWTEST_F(ReferenceParserTest, RP_FUNC_VAR_SPEED_SDTP_0100, TestSize.Level1)
263 {
264 if (!access("/system/lib64/media/", 0)) {
265 refParserDemo_->SetDecIntervalMs(DEC_COST_TIME_MS);
266 ASSERT_EQ(0, refParserDemo_->InitScene(MP4Scene::SDTP));
267 ASSERT_EQ(true, refParserDemo_->DoVariableSpeedPlay(8233)); // 8233 is frame 249
268 sleep(WAIT_TIME);
269 }
270 }
271 } // namespace