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