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 #include <string>
16 #include "gtest/gtest.h"
17 #include "native_avcodec_videodecoder.h"
18 #include "native_averrors.h"
19 #include "videodec_sample.h"
20 #include "videodec_api11_sample.h"
21 #include "native_avcodec_base.h"
22 #include "avcodec_codec_name.h"
23 #include "native_avcapability.h"
24
25 #define MAX_THREAD 16
26
27 using namespace std;
28 using namespace OHOS;
29 using namespace OHOS::Media;
30 using namespace testing::ext;
31
32 namespace OHOS {
33 namespace Media {
34 class HwdecFuncNdkTest : public testing::Test {
35 public:
36 static void SetUpTestCase();
37 static void TearDownTestCase();
38 void SetUp() override;
39 void TearDown() override;
40 void InputFunc();
41 void OutputFunc();
42 void Release();
43 int32_t Stop();
44
45 protected:
46 const char *INP_DIR_720_30 = "/data/test/media/1280_720_30_10Mb.h264";
47 const char *INP_DIR_1080_30 = "/data/test/media/1920_1080_10_30Mb.h264";
48 const char *INP_DIR_1080_20 = "/data/test/media/1920_1080_20M_30.h265";
49 const char *inpDirVivid = "/data/test/media/hlg_vivid_4k.h265";
50 const char *INP_DIR_VVC_1080 = "/data/test/media/1920_1080_10bit.vvc";
51 const char *inpDirVvcResolution = "/data/test/media/resolution.vvc";
52 const char *inpDirVvcResolution8Bit = "/data/test/media/resolution_8bit.vvc";
53 const char *inpDirVvcResolution10Bit = "/data/test/media/resolution_10bit.vvc";
54 const char *inpDirVvcResolutionHdr10Bit = "/data/test/media/resolution_hdr_10bit.vvc";
55 };
56 } // namespace Media
57 } // namespace OHOS
58
59 namespace {
60 static OH_AVCapability *cap = nullptr;
61 static OH_AVCapability *cap_hevc = nullptr;
62 static OH_AVCapability *cap_vvc = nullptr;
63 static string g_codecName = "";
64 static string g_codecNameHEVC = "";
65 static string g_codecNameVVC = "";
66 constexpr int32_t DEFAULT_WIDTH = 1920;
67 constexpr int32_t DEFAULT_HEIGHT = 1080;
68 constexpr int32_t MAX_NALU_LEN = 12000;
69 constexpr int32_t UHD_RESOLUTION[2] = {3840, 2160};
70 constexpr int32_t HD_RESOLUTION[2] = {1104, 622};
71 constexpr uint32_t CHANGE_AVC_FRAME = 1500;
72 constexpr uint32_t CHANGE_HEVC_FRAME = 3006;
73 constexpr uint32_t CHANGE_HEVC_TEN_FRAME = 1800;
74 constexpr uint32_t CHANGE_VVC_FRAME = 1524;
75 } // namespace
76
SetUpTestCase()77 void HwdecFuncNdkTest::SetUpTestCase()
78 {
79 cap = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
80 g_codecName = OH_AVCapability_GetName(cap);
81 cout << "codecname: " << g_codecName << endl;
82 cap_hevc = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
83 g_codecNameHEVC = OH_AVCapability_GetName(cap_hevc);
84 cout << "g_codecNameHEVC: " << g_codecNameHEVC << endl;
85 cap_vvc = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_VVC, false, HARDWARE);
86 g_codecNameVVC = OH_AVCapability_GetName(cap_vvc);
87 cout << "g_codecNameVVC: " << g_codecNameVVC << endl;
88 }
TearDownTestCase()89 void HwdecFuncNdkTest::TearDownTestCase() {}
SetUp()90 void HwdecFuncNdkTest::SetUp() {}
TearDown()91 void HwdecFuncNdkTest::TearDown() {}
92
93 namespace {
94 /**
95 * @tc.number : VIDEO_HWDEC_FUNCTION_0200
96 * @tc.name : create nonexist decoder
97 * @tc.desc : function test
98 */
99 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0200, TestSize.Level1)
100 {
101 OH_AVCodec *vdec_ = OH_VideoDecoder_CreateByName("OMX.h264.decode.111.222.333");
102 ASSERT_EQ(nullptr, vdec_);
103 }
104
105 /**
106 * @tc.number : VIDEO_HWDEC_FUNCTION_0300
107 * @tc.name : test h264 asyn decode buffer, pixel foramt nv12
108 * @tc.desc : function test
109 */
110 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0300, TestSize.Level0)
111 {
112 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
113 vDecSample->INP_DIR = INP_DIR_1080_30;
114 vDecSample->DEFAULT_WIDTH = 1920;
115 vDecSample->DEFAULT_HEIGHT = 1080;
116 vDecSample->DEFAULT_FRAME_RATE = 30;
117 vDecSample->SF_OUTPUT = false;
118 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName));
119 vDecSample->WaitForEOS();
120 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
121 }
122
123 /**
124 * @tc.number : VIDEO_HWDEC_FUNCTION_0310
125 * @tc.name : test h26 asyn decode buffer, pixel foramt nv21
126 * @tc.desc : function test
127 */
128 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0310, TestSize.Level0)
129 {
130 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
131 vDecSample->INP_DIR = INP_DIR_1080_30;
132 vDecSample->DEFAULT_WIDTH = 1920;
133 vDecSample->DEFAULT_HEIGHT = 1080;
134 vDecSample->DEFAULT_FRAME_RATE = 30;
135 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
136 vDecSample->SF_OUTPUT = false;
137 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName));
138 vDecSample->WaitForEOS();
139 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
140 }
141
142 /**
143 * @tc.number : VIDEO_HWDEC_FUNCTION_0320
144 * @tc.name : test h265 decode buffer, pixel foramt nv12
145 * @tc.desc : function test
146 */
147 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0320, TestSize.Level0)
148 {
149 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
150 vDecSample->INP_DIR = INP_DIR_1080_30;
151 vDecSample->DEFAULT_WIDTH = 1920;
152 vDecSample->DEFAULT_HEIGHT = 1080;
153 vDecSample->DEFAULT_FRAME_RATE = 30;
154 vDecSample->SF_OUTPUT = false;
155 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecNameHEVC));
156 vDecSample->WaitForEOS();
157 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
158 }
159
160 /**
161 * @tc.number : VIDEO_HWDEC_FUNCTION_0330
162 * @tc.name : test h265 decode buffer, pixel foramt nv21
163 * @tc.desc : function test
164 */
165 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0330, TestSize.Level0)
166 {
167 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
168 vDecSample->INP_DIR = INP_DIR_1080_30;
169 vDecSample->DEFAULT_WIDTH = 1920;
170 vDecSample->DEFAULT_HEIGHT = 1080;
171 vDecSample->DEFAULT_FRAME_RATE = 30;
172 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
173 vDecSample->SF_OUTPUT = false;
174 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecNameHEVC));
175 vDecSample->WaitForEOS();
176 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
177 }
178
179 /**
180 * @tc.number : VIDEO_HWDEC_FUNCTION_0400
181 * @tc.name : test h264 asyn decode surface, pixel foramt nv12
182 * @tc.desc : function test
183 */
184 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0400, TestSize.Level0)
185 {
186 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
187 vDecSample->INP_DIR = INP_DIR_1080_30;
188 vDecSample->SF_OUTPUT = true;
189 vDecSample->DEFAULT_WIDTH = 1920;
190 vDecSample->DEFAULT_HEIGHT = 1080;
191 vDecSample->DEFAULT_FRAME_RATE = 30;
192 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName));
193 vDecSample->WaitForEOS();
194 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
195 }
196
197 /**
198 * @tc.number : VIDEO_HWDEC_FUNCTION_0410
199 * @tc.name : test h264 asyn decode surface, pixel foramt nv21
200 * @tc.desc : function test
201 */
202 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0410, TestSize.Level0)
203 {
204 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
205 vDecSample->INP_DIR = INP_DIR_1080_30;
206 vDecSample->SF_OUTPUT = true;
207 vDecSample->DEFAULT_WIDTH = 1920;
208 vDecSample->DEFAULT_HEIGHT = 1080;
209 vDecSample->DEFAULT_FRAME_RATE = 30;
210 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
211 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName));
212 vDecSample->WaitForEOS();
213 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
214 }
215
216 /**
217 * @tc.number : VIDEO_HWDEC_FUNCTION_0420
218 * @tc.name : test h265 asyn decode surface, pixel foramt nv12
219 * @tc.desc : function test
220 */
221 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0420, TestSize.Level0)
222 {
223 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
224 vDecSample->INP_DIR = INP_DIR_1080_30;
225 vDecSample->SF_OUTPUT = true;
226 vDecSample->DEFAULT_WIDTH = 1920;
227 vDecSample->DEFAULT_HEIGHT = 1080;
228 vDecSample->DEFAULT_FRAME_RATE = 30;
229 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
230 vDecSample->WaitForEOS();
231 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
232 }
233
234 /**
235 * @tc.number : VIDEO_HWDEC_FUNCTION_0430
236 * @tc.name : test h265 asyn decode surface, pixel foramt nv21
237 * @tc.desc : function test
238 */
239 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0430, TestSize.Level0)
240 {
241 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
242 vDecSample->INP_DIR = INP_DIR_1080_30;
243 vDecSample->SF_OUTPUT = true;
244 vDecSample->DEFAULT_WIDTH = 1920;
245 vDecSample->DEFAULT_HEIGHT = 1080;
246 vDecSample->DEFAULT_FRAME_RATE = 30;
247 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
248 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
249 vDecSample->WaitForEOS();
250 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
251 }
252
253 /**
254 * @tc.number : VIDEO_HWDEC_FUNCTION_0700
255 * @tc.name : test set EOS when last frame
256 * @tc.desc : function test
257 */
258 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0700, TestSize.Level1)
259 {
260 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
261 vDecSample->INP_DIR = INP_DIR_1080_30;
262 vDecSample->DEFAULT_WIDTH = 1920;
263 vDecSample->DEFAULT_HEIGHT = 1080;
264 vDecSample->DEFAULT_FRAME_RATE = 30;
265 vDecSample->SF_OUTPUT = false;
266 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
267 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
268 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
269 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
270 vDecSample->WaitForEOS();
271 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
272 }
273
274 /**
275 * @tc.number : VIDEO_HWDEC_FUNCTION_0800
276 * @tc.name : test set EOS before last frame then stop
277 * @tc.desc : function test
278 */
279 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0800, TestSize.Level1)
280 {
281 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
282 vDecSample->INP_DIR = INP_DIR_1080_30;
283 vDecSample->DEFAULT_WIDTH = 1920;
284 vDecSample->DEFAULT_HEIGHT = 1080;
285 vDecSample->DEFAULT_FRAME_RATE = 30;
286 vDecSample->SF_OUTPUT = false;
287 vDecSample->BEFORE_EOS_INPUT = true;
288 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
289 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
290 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
291 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
292 vDecSample->WaitForEOS();
293 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
294 }
295
296 /**
297 * @tc.number : VIDEO_HWDEC_FUNCTION_0900
298 * @tc.name : test set EOS before last frame then input frames
299 * @tc.desc : function test
300 */
301 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_0900, TestSize.Level1)
302 {
303 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
304 vDecSample->INP_DIR = INP_DIR_1080_30;
305 vDecSample->DEFAULT_WIDTH = 1920;
306 vDecSample->DEFAULT_HEIGHT = 1080;
307 vDecSample->DEFAULT_FRAME_RATE = 30;
308 vDecSample->SF_OUTPUT = false;
309 vDecSample->BEFORE_EOS_INPUT_INPUT = true;
310 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
311 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
312 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
313 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
314 vDecSample->WaitForEOS();
315 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
316 }
317
318 /**
319 * @tc.number : VIDEO_HWDEC_FUNCTION_1000
320 * @tc.name : test reconfigure for new file with one decoder
321 * @tc.desc : function test
322 */
323 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1000, TestSize.Level1)
324 {
325 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
326 vDecSample->INP_DIR = INP_DIR_1080_30;
327 vDecSample->DEFAULT_WIDTH = 1920;
328 vDecSample->DEFAULT_HEIGHT = 1080;
329 vDecSample->DEFAULT_FRAME_RATE = 30;
330 vDecSample->SF_OUTPUT = false;
331 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
332 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
333 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
334 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
335 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
336 vDecSample->WaitForEOS();
337 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
338 ASSERT_EQ(AV_ERR_OK, vDecSample->Reset());
339 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
340 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
341 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
342 vDecSample->WaitForEOS();
343 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
344 }
345
346 /**
347 * @tc.number : VIDEO_HWDEC_FUNCTION_1100
348 * @tc.name : test reconfigure for new file with the recreated decoder
349 * @tc.desc : function test
350 */
351 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1100, TestSize.Level1)
352 {
353 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
354 vDecSample->INP_DIR = INP_DIR_1080_30;
355 vDecSample->DEFAULT_WIDTH = 1920;
356 vDecSample->DEFAULT_HEIGHT = 1080;
357 vDecSample->DEFAULT_FRAME_RATE = 30;
358 vDecSample->SF_OUTPUT = false;
359 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
360 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
361 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
362 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
363 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
364 vDecSample->WaitForEOS();
365 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
366 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
367 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
368 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
369 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
370 vDecSample->WaitForEOS();
371 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
372 }
373
374 /**
375 * @tc.number : VIDEO_HWDEC_FUNCTION_1200
376 * @tc.name : repeat start and stop 5 times before EOS
377 * @tc.desc : function test
378 */
379 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1200, TestSize.Level2)
380 {
381 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
382 vDecSample->INP_DIR = INP_DIR_1080_30;
383 vDecSample->DEFAULT_WIDTH = 1920;
384 vDecSample->DEFAULT_HEIGHT = 1080;
385 vDecSample->DEFAULT_FRAME_RATE = 30;
386 vDecSample->SF_OUTPUT = false;
387 vDecSample->REPEAT_START_STOP_BEFORE_EOS = 5;
388 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
389 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
390 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
391 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
392 vDecSample->WaitForEOS();
393 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
394 }
395
396 /**
397 * @tc.number : VIDEO_HWDEC_FUNCTION_1300
398 * @tc.name : repeat start and flush 5 times before EOS
399 * @tc.desc : function test
400 */
401 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1300, TestSize.Level2)
402 {
403 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
404 vDecSample->INP_DIR = INP_DIR_1080_30;
405 vDecSample->DEFAULT_WIDTH = 1920;
406 vDecSample->DEFAULT_HEIGHT = 1080;
407 vDecSample->DEFAULT_FRAME_RATE = 30;
408 vDecSample->SF_OUTPUT = false;
409 vDecSample->REPEAT_START_FLUSH_BEFORE_EOS = 5;
410 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
411 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
412 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
413 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
414 vDecSample->WaitForEOS();
415 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
416 }
417
418 /**
419 * @tc.number : VIDEO_HWDEC_FUNCTION_1400
420 * @tc.name : set larger width and height
421 * @tc.desc : function test
422 */
423 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1400, TestSize.Level2)
424 {
425 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
426 vDecSample->INP_DIR = INP_DIR_720_30;
427 vDecSample->DEFAULT_WIDTH = 1920;
428 vDecSample->DEFAULT_HEIGHT = 1080;
429 vDecSample->DEFAULT_FRAME_RATE = 30;
430 vDecSample->SF_OUTPUT = false;
431 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
432 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
433 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
434 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
435 vDecSample->WaitForEOS();
436 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
437 }
438
439 /**
440 * @tc.number : VIDEO_HWDEC_FUNCTION_1600
441 * @tc.name : 265 decode
442 * @tc.desc : function test
443 */
444 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1600, TestSize.Level2)
445 {
446 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
447 vDecSample->INP_DIR = "/data/test/media/1920_1080_20M_30.h265";
448 vDecSample->DEFAULT_WIDTH = 1920;
449 vDecSample->DEFAULT_HEIGHT = 1080;
450 vDecSample->DEFAULT_FRAME_RATE = 30;
451 vDecSample->SF_OUTPUT = false;
452 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameHEVC));
453 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
454 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
455 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
456 vDecSample->WaitForEOS();
457 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
458 }
459
460 /**
461 * @tc.number : VIDEO_HWDEC_FUNCTION_1700
462 * @tc.name : resolution change
463 * @tc.desc : function test
464 */
465 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1700, TestSize.Level2)
466 {
467 if (g_codecName.find("hisi") != string::npos) {
468 auto vDecSample = make_shared<VDecAPI11Sample>();
469 vDecSample->INP_DIR = "/data/test/media/resolutionChange.h264";
470 vDecSample->DEFAULT_WIDTH = 1104;
471 vDecSample->DEFAULT_HEIGHT = 622;
472 vDecSample->DEFAULT_FRAME_RATE = 30;
473 vDecSample->SF_OUTPUT = false;
474 vDecSample->NocaleHash = true;
475 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
476 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
477 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
478 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
479 vDecSample->WaitForEOS();
480 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
481 ASSERT_EQ(CHANGE_AVC_FRAME, vDecSample->outFrameCount);
482 } else {
483 cout << "hardware encoder is rk,skip." << endl;
484 }
485 }
486 /**
487 * @tc.number : SURF_CHANGE_FUNC_001
488 * @tc.name : surf change in normal state
489 * @tc.desc : function test
490 */
491 HWTEST_F(HwdecFuncNdkTest, SURF_CHANGE_FUNC_001, TestSize.Level0)
492 {
493 auto vDecSample = make_shared<VDecNdkSample>();
494 vDecSample->INP_DIR = INP_DIR_1080_30;
495 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
496 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
497 vDecSample->DEFAULT_FRAME_RATE = 30;
498 vDecSample->SF_OUTPUT = true;
499 vDecSample->autoSwitchSurface = true;
500 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
501 vDecSample->sleepOnFPS = true;
502 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName));
503 vDecSample->WaitForEOS();
504 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
505 ASSERT_EQ(AV_ERR_OK, vDecSample->Reset());
506 ASSERT_EQ(AV_ERR_INVALID_STATE, vDecSample->SwitchSurface());
507 ASSERT_EQ(AV_ERR_OK, vDecSample->Release());
508 }
509 /**
510 * @tc.number : SURF_CHANGE_FUNC_002
511 * @tc.name : surf change in flushed state
512 * @tc.desc : function test
513 */
514 HWTEST_F(HwdecFuncNdkTest, SURF_CHANGE_FUNC_002, TestSize.Level0)
515 {
516 auto vDecSample = make_shared<VDecNdkSample>();
517 vDecSample->INP_DIR = INP_DIR_1080_30;
518 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
519 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
520 vDecSample->DEFAULT_FRAME_RATE = 30;
521 vDecSample->SF_OUTPUT = true;
522 vDecSample->autoSwitchSurface = true;
523 vDecSample->sleepOnFPS = true;
524 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName));
525 ASSERT_EQ(AV_ERR_OK, vDecSample->Flush());
526 ASSERT_EQ(AV_ERR_OK, vDecSample->SwitchSurface());
527 ASSERT_EQ(AV_ERR_OK, vDecSample->Stop());
528 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
529 }
530 /**
531 * @tc.number : SURF_CHANGE_FUNC_003
532 * @tc.name : surf change in buffer mode
533 * @tc.desc : function test
534 */
535 HWTEST_F(HwdecFuncNdkTest, SURF_CHANGE_FUNC_003, TestSize.Level0)
536 {
537 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
538 vDecSample->INP_DIR = INP_DIR_1080_30;
539 vDecSample->DEFAULT_WIDTH = 1920;
540 vDecSample->DEFAULT_HEIGHT = 1080;
541 vDecSample->DEFAULT_FRAME_RATE = 30;
542 vDecSample->SF_OUTPUT = false;
543 vDecSample->CreateSurface();
544 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName));
545 ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vDecSample->SwitchSurface());
546 vDecSample->WaitForEOS();
547 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
548 }
549 /**
550 * @tc.number : SURF_CHANGE_FUNC_004
551 * @tc.name : repeat call setSurface fastly
552 * @tc.desc : function test
553 */
554 HWTEST_F(HwdecFuncNdkTest, SURF_CHANGE_FUNC_004, TestSize.Level0)
555 {
556 auto vDecSample = make_shared<VDecNdkSample>();
557 vDecSample->INP_DIR = INP_DIR_1080_30;
558 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
559 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
560 vDecSample->DEFAULT_FRAME_RATE = 30;
561 vDecSample->SF_OUTPUT = true;
562 vDecSample->autoSwitchSurface = true;
563 vDecSample->sleepOnFPS = true;
564 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName));
565 ASSERT_EQ(AV_ERR_OK, vDecSample->RepeatCallSetSurface());
566 vDecSample->WaitForEOS();
567 }
568
569 /**
570 * @tc.number : OUTPUT_DECS_FUNC_001
571 * @tc.name : get decode output descriptions h264
572 * @tc.desc : function test
573 */
574 HWTEST_F(HwdecFuncNdkTest, OUTPUT_DECS_FUNC_001, TestSize.Level0)
575 {
576 if (g_codecName.find("hisi") != string::npos) {
577 auto vDecSample = make_shared<VDecNdkSample>();
578 vDecSample->INP_DIR = "/data/test/media/1920x1080.h264";
579 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
580 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
581 vDecSample->DEFAULT_FRAME_RATE = 30;
582 vDecSample->needCheckOutputDesc = true;
583 vDecSample->expectCropTop = 0;
584 vDecSample->expectCropBottom = DEFAULT_HEIGHT - 1;
585 vDecSample->expectCropLeft = 0;
586 vDecSample->expectCropRight = DEFAULT_WIDTH - 1;
587
588 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
589 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
590 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
591 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
592 vDecSample->WaitForEOS();
593 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
594 } else {
595 cout << "hardware encoder is rk,skip." << endl;
596 }
597 }
598 /**
599 * @tc.number : OUTPUT_DECS_FUNC_002
600 * @tc.name : get decode output descriptions h265
601 * @tc.desc : function test
602 */
603 HWTEST_F(HwdecFuncNdkTest, OUTPUT_DECS_FUNC_002, TestSize.Level0)
604 {
605 if (g_codecName.find("hisi") != string::npos) {
606 auto vDecSample = make_shared<VDecNdkSample>();
607 vDecSample->INP_DIR = "/data/test/media/1920x1080.h265";
608 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
609 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
610 vDecSample->DEFAULT_FRAME_RATE = 30;
611 vDecSample->needCheckOutputDesc = true;
612 vDecSample->expectCropTop = 0;
613 vDecSample->expectCropBottom = DEFAULT_HEIGHT - 1;
614 vDecSample->expectCropLeft = 0;
615 vDecSample->expectCropRight = DEFAULT_WIDTH - 1;
616
617 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameHEVC));
618 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
619 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
620 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
621 vDecSample->WaitForEOS();
622 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
623 } else {
624 cout << "hardware encoder is rk,skip." << endl;
625 }
626 }
627 /**
628 * @tc.number : OUTPUT_DECS_FUNC_003
629 * @tc.name : get decode output descriptions h264 ,4k
630 * @tc.desc : function test
631 */
632 HWTEST_F(HwdecFuncNdkTest, OUTPUT_DECS_FUNC_003, TestSize.Level0)
633 {
634 if (g_codecName.find("hisi") != string::npos) {
635 auto vDecSample = make_shared<VDecNdkSample>();
636 vDecSample->INP_DIR = "/data/test/media/3840x2160.h264";
637 vDecSample->DEFAULT_WIDTH = UHD_RESOLUTION[0];
638 vDecSample->DEFAULT_HEIGHT = UHD_RESOLUTION[1];
639 vDecSample->DEFAULT_FRAME_RATE = 30;
640 vDecSample->needCheckOutputDesc = true;
641 vDecSample->expectCropTop = 0;
642 vDecSample->expectCropBottom = UHD_RESOLUTION[1] - 1;
643 vDecSample->expectCropLeft = 0;
644 vDecSample->expectCropRight = UHD_RESOLUTION[0] - 1;
645
646 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
647 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
648 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
649 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
650 vDecSample->WaitForEOS();
651 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
652 } else {
653 cout << "hardware encoder is rk,skip." << endl;
654 }
655 }
656 /**
657 * @tc.number : OUTPUT_DECS_FUNC_004
658 * @tc.name : get decode output descriptions h265 ,4k
659 * @tc.desc : function test
660 */
661 HWTEST_F(HwdecFuncNdkTest, OUTPUT_DECS_FUNC_004, TestSize.Level0)
662 {
663 if (g_codecName.find("hisi") != string::npos) {
664 auto vDecSample = make_shared<VDecNdkSample>();
665 vDecSample->INP_DIR = "/data/test/media/3840x2160.h265";
666 vDecSample->DEFAULT_WIDTH = UHD_RESOLUTION[0];
667 vDecSample->DEFAULT_HEIGHT = UHD_RESOLUTION[1];
668 vDecSample->DEFAULT_FRAME_RATE = 30;
669 vDecSample->needCheckOutputDesc = true;
670 vDecSample->expectCropTop = 0;
671 vDecSample->expectCropBottom = UHD_RESOLUTION[1] - 1;
672 vDecSample->expectCropLeft = 0;
673 vDecSample->expectCropRight = UHD_RESOLUTION[0] - 1;
674
675 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameHEVC));
676 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
677 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
678 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
679 vDecSample->WaitForEOS();
680 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
681 } else {
682 cout << "hardware encoder is rk,skip." << endl;
683 }
684 }
685 /**
686 * @tc.number : OUTPUT_DECS_FUNC_005
687 * @tc.name : get decode output descriptions h264 ,crop size
688 * @tc.desc : function test
689 */
690 HWTEST_F(HwdecFuncNdkTest, OUTPUT_DECS_FUNC_005, TestSize.Level0)
691 {
692 if (g_codecName.find("hisi") != string::npos) {
693 auto vDecSample = make_shared<VDecNdkSample>();
694 vDecSample->INP_DIR = "/data/test/media/1104x622.h264";
695 vDecSample->DEFAULT_WIDTH = HD_RESOLUTION[0];
696 vDecSample->DEFAULT_HEIGHT = HD_RESOLUTION[1];
697 vDecSample->DEFAULT_FRAME_RATE = 30;
698 vDecSample->needCheckOutputDesc = true;
699 vDecSample->expectCropTop = 0;
700 vDecSample->expectCropBottom = HD_RESOLUTION[1] - 1;
701 vDecSample->expectCropLeft = 0;
702 vDecSample->expectCropRight = HD_RESOLUTION[0] - 1;
703
704 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
705 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
706 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
707 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
708 vDecSample->WaitForEOS();
709 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
710 } else {
711 cout << "hardware encoder is rk,skip." << endl;
712 }
713 }
714 /**
715 * @tc.number : OUTPUT_DECS_FUNC_006
716 * @tc.name : get decode output descriptions h265 ,crop size
717 * @tc.desc : function test
718 */
719 HWTEST_F(HwdecFuncNdkTest, OUTPUT_DECS_FUNC_006, TestSize.Level0)
720 {
721 if (g_codecName.find("hisi") != string::npos) {
722 auto vDecSample = make_shared<VDecNdkSample>();
723 vDecSample->INP_DIR = "/data/test/media/1104x622.h265";
724 vDecSample->DEFAULT_WIDTH = HD_RESOLUTION[0];
725 vDecSample->DEFAULT_HEIGHT = HD_RESOLUTION[1];
726 vDecSample->DEFAULT_FRAME_RATE = 30;
727 vDecSample->needCheckOutputDesc = true;
728 vDecSample->expectCropTop = 0;
729 vDecSample->expectCropBottom = HD_RESOLUTION[1] - 1;
730 vDecSample->expectCropLeft = 0;
731 vDecSample->expectCropRight = HD_RESOLUTION[0] - 1;
732
733 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameHEVC));
734 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
735 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
736 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
737 vDecSample->WaitForEOS();
738 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
739 } else {
740 cout << "hardware encoder is rk,skip." << endl;
741 }
742 }
743 /**
744 * @tc.number : OUTPUT_DECS_FUNC_007
745 * @tc.name : get decode output descriptions h265 ,resolution change
746 * @tc.desc : function test
747 */
748 HWTEST_F(HwdecFuncNdkTest, OUTPUT_DECS_FUNC_007, TestSize.Level0)
749 {
750 if (g_codecName.find("hisi") != string::npos) {
751 auto vDecSample = make_shared<VDecNdkSample>();
752 vDecSample->INP_DIR = "/data/test/media/resolutionChange.h264";
753 vDecSample->DEFAULT_WIDTH = HD_RESOLUTION[0];
754 vDecSample->DEFAULT_HEIGHT = HD_RESOLUTION[1];
755 vDecSample->DEFAULT_FRAME_RATE = 30;
756 vDecSample->isResChangeStream = true;
757 vDecSample->expectCropTop = 0;
758 vDecSample->expectCropBottom = HD_RESOLUTION[1] - 1;
759 vDecSample->expectCropLeft = 0;
760 vDecSample->expectCropRight = HD_RESOLUTION[0] - 1;
761
762 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
763 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
764 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
765 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
766 vDecSample->WaitForEOS();
767 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
768 } else {
769 cout << "hardware encoder is rk,skip." << endl;
770 }
771 }
772
773 /**
774 * @tc.number : MAX_INPUT_SIZE_CHECK_001
775 * @tc.name : MaxInputSize value incorrect
776 * @tc.desc : function test
777 */
778 HWTEST_F(HwdecFuncNdkTest, MAX_INPUT_SIZE_CHECK_001, TestSize.Level0)
779 {
780 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
781 vDecSample->INP_DIR = "/data/test/media/1920_1080_10_30Mb.h264";
782 vDecSample->DEFAULT_WIDTH = 1920;
783 vDecSample->DEFAULT_HEIGHT = 1080;
784 vDecSample->DEFAULT_FRAME_RATE = 30;
785 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
786 vDecSample->maxInputSize = -1;
787 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName));
788 vDecSample->WaitForEOS();
789 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
790 }
791
792 /**
793 * @tc.number : MAX_INPUT_SIZE_CHECK_002
794 * @tc.name : MaxInputSize value incorrect
795 * @tc.desc : function test
796 */
797 HWTEST_F(HwdecFuncNdkTest, MAX_INPUT_SIZE_CHECK_002, TestSize.Level0)
798 {
799 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
800 vDecSample->INP_DIR = "/data/test/media/1920_1080_10_30Mb.h264";
801 vDecSample->DEFAULT_WIDTH = 1920;
802 vDecSample->DEFAULT_HEIGHT = 1080;
803 vDecSample->DEFAULT_FRAME_RATE = 30;
804 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
805 vDecSample->maxInputSize = INT_MAX;
806 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName));
807 vDecSample->WaitForEOS();
808 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
809 }
810
811 /**
812 * @tc.number : MAX_INPUT_SIZE_CHECK_003
813 * @tc.name : MaxInputSize value normal
814 * @tc.desc : function test
815 */
816 HWTEST_F(HwdecFuncNdkTest, MAX_INPUT_SIZE_CHECK_003, TestSize.Level0)
817 {
818 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
819 vDecSample->INP_DIR = "/data/test/media/1104x622.h264";
820 vDecSample->DEFAULT_WIDTH = 1108;
821 vDecSample->DEFAULT_HEIGHT = 622;
822 vDecSample->DEFAULT_FRAME_RATE = 30;
823 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
824 vDecSample->maxInputSize = MAX_NALU_LEN;
825 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecName));
826 vDecSample->WaitForEOS();
827 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
828 }
829 /**
830 * @tc.number : MAX_INPUT_SIZE_CHECK_004
831 * @tc.name : MaxInputSize value incorrect hevc
832 * @tc.desc : function test
833 */
834 HWTEST_F(HwdecFuncNdkTest, MAX_INPUT_SIZE_CHECK_004, TestSize.Level0)
835 {
836 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
837 vDecSample->INP_DIR = "/data/test/media/1920_1080_20M_30.h265";
838 vDecSample->DEFAULT_WIDTH = 1920;
839 vDecSample->DEFAULT_HEIGHT = 1080;
840 vDecSample->DEFAULT_FRAME_RATE = 30;
841 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
842 vDecSample->maxInputSize = -1;
843 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecNameHEVC));
844 vDecSample->WaitForEOS();
845 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
846 }
847
848 /**
849 * @tc.number : MAX_INPUT_SIZE_CHECK_005
850 * @tc.name : MaxInputSize value incorrect
851 * @tc.desc : function test
852 */
853 HWTEST_F(HwdecFuncNdkTest, MAX_INPUT_SIZE_CHECK_005, TestSize.Level0)
854 {
855 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
856 vDecSample->INP_DIR = "/data/test/media/1920_1080_20M_30.h265";
857 vDecSample->DEFAULT_WIDTH = 1920;
858 vDecSample->DEFAULT_HEIGHT = 1080;
859 vDecSample->DEFAULT_FRAME_RATE = 30;
860 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
861 vDecSample->maxInputSize = INT_MAX;
862 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecNameHEVC));
863 vDecSample->WaitForEOS();
864 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
865 }
866
867 /**
868 * @tc.number : MAX_INPUT_SIZE_CHECK_006
869 * @tc.name : MaxInputSize value normal
870 * @tc.desc : function test
871 */
872 HWTEST_F(HwdecFuncNdkTest, MAX_INPUT_SIZE_CHECK_006, TestSize.Level0)
873 {
874 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
875 vDecSample->INP_DIR = "/data/test/media/1104x622.h265";
876 vDecSample->DEFAULT_WIDTH = 1108;
877 vDecSample->DEFAULT_HEIGHT = 622;
878 vDecSample->DEFAULT_FRAME_RATE = 30;
879 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
880 vDecSample->maxInputSize = MAX_NALU_LEN;
881 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecNameHEVC));
882 vDecSample->WaitForEOS();
883 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
884 }
885
886 /**
887 * @tc.number : FLUSH_CHECK_001
888 * @tc.name : Compare the flush frame with the normal process frame
889 * @tc.desc : function test
890 */
891 HWTEST_F(HwdecFuncNdkTest, FLUSH_CHECK_001, TestSize.Level0)
892 {
893 shared_ptr<VDecNdkSample> vDecSample = make_shared<VDecNdkSample>();
894 vDecSample->INP_DIR = INP_DIR_1080_30;
895 vDecSample->DEFAULT_WIDTH = 1920;
896 vDecSample->DEFAULT_HEIGHT = 1080;
897 vDecSample->DEFAULT_FRAME_RATE = 30;
898 vDecSample->SF_OUTPUT = false;
899 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
900 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
901 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
902 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
903 vDecSample->WaitForEOS();
904 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
905 cout << "--vDecSample--" << vDecSample->outCount << endl;
906 shared_ptr<VDecNdkSample> vDecSample1 = make_shared<VDecNdkSample>();
907 vDecSample1->INP_DIR = INP_DIR_1080_30;
908 vDecSample1->DEFAULT_WIDTH = 1920;
909 vDecSample1->DEFAULT_HEIGHT = 1080;
910 vDecSample1->DEFAULT_FRAME_RATE = 30;
911 vDecSample1->SF_OUTPUT = false;
912 vDecSample1->REPEAT_START_FLUSH_BEFORE_EOS = 1;
913 ASSERT_EQ(AV_ERR_OK, vDecSample1->CreateVideoDecoder(g_codecName));
914 ASSERT_EQ(AV_ERR_OK, vDecSample1->ConfigureVideoDecoder());
915 ASSERT_EQ(AV_ERR_OK, vDecSample1->SetVideoDecoderCallback());
916 ASSERT_EQ(AV_ERR_OK, vDecSample1->StartVideoDecoder());
917 vDecSample1->WaitForEOS();
918 ASSERT_EQ(AV_ERR_OK, vDecSample1->errCount);
919 cout << "--Flush--" << vDecSample1->outCount << endl;
920 ASSERT_EQ(vDecSample->outCount, vDecSample1->outCount);
921 }
922
923 /**
924 * @tc.number : VIDEO_HWDEC_FUNCTION_ATTIME_0010
925 * @tc.name : test h264 asyn decode surface,use at time
926 * @tc.desc : function test
927 */
928 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_ATTIME_0010, TestSize.Level0)
929 {
930 shared_ptr<VDecAPI11Sample> vDecSample = make_shared<VDecAPI11Sample>();
931 vDecSample->INP_DIR = INP_DIR_720_30;
932 vDecSample->SF_OUTPUT = true;
933 vDecSample->DEFAULT_WIDTH = 1280;
934 vDecSample->DEFAULT_HEIGHT = 720;
935 vDecSample->DEFAULT_FRAME_RATE = 30;
936 vDecSample->rsAtTime = true;
937 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecName));
938 vDecSample->WaitForEOS();
939 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
940 }
941
942 /**
943 * @tc.number : VIDEO_HWDEC_FUNCTION_ATTIME_0011
944 * @tc.name : test h265 asyn decode surface,use at time
945 * @tc.desc : function test
946 */
947 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_ATTIME_0011, TestSize.Level1)
948 {
949 shared_ptr<VDecAPI11Sample> vDecSample = make_shared<VDecAPI11Sample>();
950 vDecSample->INP_DIR = INP_DIR_1080_20;
951 vDecSample->SF_OUTPUT = true;
952 vDecSample->DEFAULT_WIDTH = 1920;
953 vDecSample->DEFAULT_HEIGHT = 1080;
954 vDecSample->DEFAULT_FRAME_RATE = 30;
955 vDecSample->rsAtTime = true;
956 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
957 vDecSample->WaitForEOS();
958 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
959 }
960
961 /**
962 * @tc.number : VIDEO_HWDEC_FUNCTION_ATTIME_0012
963 * @tc.name : test h265 10bit asyn decode surface,use at time
964 * @tc.desc : function test
965 */
966 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_ATTIME_0012, TestSize.Level1)
967 {
968 shared_ptr<VDecAPI11Sample> vDecSample = make_shared<VDecAPI11Sample>();
969 vDecSample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN;
970 vDecSample->INP_DIR = inpDirVivid;
971 vDecSample->SF_OUTPUT = true;
972 vDecSample->DEFAULT_WIDTH = 3840;
973 vDecSample->DEFAULT_HEIGHT = 2160;
974 vDecSample->DEFAULT_FRAME_RATE = 30;
975 vDecSample->rsAtTime = true;
976 vDecSample->useHDRSource = true;
977 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
978 vDecSample->WaitForEOS();
979 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
980 }
981
982 /**
983 * @tc.number : VIDEO_HWDEC_FUNCTION_1410
984 * @tc.name : Increase frame rate judgment
985 * @tc.desc : function test
986 */
987 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1410, TestSize.Level2)
988 {
989 shared_ptr<VDecAPI11Sample> vDecSample = make_shared<VDecAPI11Sample>();
990 vDecSample->INP_DIR = INP_DIR_720_30;
991 vDecSample->OUT_DIR = "/data/test/media/HW_720_30.yuv";
992 vDecSample->DEFAULT_WIDTH = 1280;
993 vDecSample->DEFAULT_HEIGHT = 720;
994 vDecSample->DEFAULT_FRAME_RATE = 30;
995 vDecSample->SF_OUTPUT = false;
996 vDecSample->outputYuvFlag = true;
997 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
998 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
999 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1000 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1001 vDecSample->WaitForEOS();
1002 ASSERT_EQ(101, vDecSample->outFrameCount);
1003 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1004 }
1005
1006 /**
1007 * @tc.number : VIDEO_HWDEC_FUNCTION_1420
1008 * @tc.name : Increase frame rate judgment
1009 * @tc.desc : function test
1010 */
1011 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1420, TestSize.Level2)
1012 {
1013 shared_ptr<VDecAPI11Sample> vDecSample = make_shared<VDecAPI11Sample>();
1014 vDecSample->INP_DIR = "/data/test/media/1920_1080_20M_30.h265";
1015 vDecSample->OUT_DIR = "/data/test/media/HW_1920_1080_20M_30.yuv";
1016 vDecSample->DEFAULT_WIDTH = 1920;
1017 vDecSample->DEFAULT_HEIGHT = 1080;
1018 vDecSample->DEFAULT_FRAME_RATE = 30;
1019 vDecSample->SF_OUTPUT = false;
1020 vDecSample->outputYuvFlag = true;
1021 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameHEVC));
1022 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1023 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1024 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1025 vDecSample->WaitForEOS();
1026 ASSERT_EQ(501, vDecSample->outFrameCount);
1027 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1028 }
1029
1030 /**
1031 * @tc.number : VIDEO_DECODE_VVC_0100
1032 * @tc.name : decode vvc buffer
1033 * @tc.desc : function test
1034 */
1035 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_0100, TestSize.Level0)
1036 {
1037 if (access(INP_DIR_VVC_1080, F_OK) == 0) {
1038 auto vDecSample = make_shared<VDecAPI11Sample>();
1039 vDecSample->INP_DIR = INP_DIR_VVC_1080;
1040 vDecSample->DEFAULT_WIDTH = 1920;
1041 vDecSample->DEFAULT_HEIGHT = 1080;
1042 vDecSample->DEFAULT_FRAME_RATE = 30;
1043 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1044 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1045 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1046 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1047 vDecSample->WaitForEOS();
1048 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1049 }
1050 }
1051
1052 /**
1053 * @tc.number : VIDEO_DECODE_VVC_0200
1054 * @tc.name : decode vvc surface
1055 * @tc.desc : function test
1056 */
1057 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_0200, TestSize.Level0)
1058 {
1059 if (access(INP_DIR_VVC_1080, F_OK) == 0) {
1060 auto vDecSample = make_shared<VDecAPI11Sample>();
1061 vDecSample->INP_DIR = INP_DIR_VVC_1080;
1062 vDecSample->DEFAULT_WIDTH = 1920;
1063 vDecSample->DEFAULT_HEIGHT = 1080;
1064 vDecSample->DEFAULT_FRAME_RATE = 30;
1065 vDecSample->SF_OUTPUT = true;
1066 vDecSample->sleepOnFPS = true;
1067 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1068 vDecSample->WaitForEOS();
1069 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1070 }
1071 }
1072
1073 /**
1074 * @tc.number : VIDEO_DECODE_VVC_0300
1075 * @tc.name : decode vvc switch surface
1076 * @tc.desc : function test
1077 */
1078 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_0300, TestSize.Level1)
1079 {
1080 if (access(INP_DIR_VVC_1080, F_OK) == 0) {
1081 auto vDecSample = make_shared<VDecAPI11Sample>();
1082 vDecSample->INP_DIR = INP_DIR_VVC_1080;
1083 vDecSample->DEFAULT_WIDTH = 1920;
1084 vDecSample->DEFAULT_HEIGHT = 1080;
1085 vDecSample->DEFAULT_FRAME_RATE = 30;
1086 vDecSample->SF_OUTPUT = true;
1087 vDecSample->autoSwitchSurface = true;
1088 vDecSample->sleepOnFPS = true;
1089 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1090 vDecSample->WaitForEOS();
1091 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1092 }
1093 }
1094
1095 /**
1096 * @tc.number : VIDEO_DECODE_VVC_0400
1097 * @tc.name : decode vvc resolution change
1098 * @tc.desc : function test
1099 */
1100 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_0400, TestSize.Level2)
1101 {
1102 if (access(inpDirVvcResolution, F_OK) == 0) {
1103 auto vDecSample = make_shared<VDecAPI11Sample>();
1104 vDecSample->INP_DIR = inpDirVvcResolution;
1105 vDecSample->DEFAULT_WIDTH = 1104;
1106 vDecSample->DEFAULT_HEIGHT = 622;
1107 vDecSample->DEFAULT_FRAME_RATE = 30;
1108 vDecSample->SF_OUTPUT = false;
1109 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1110 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1111 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1112 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1113 vDecSample->WaitForEOS();
1114 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1115 }
1116 }
1117
1118 /**
1119 * @tc.number : VIDEO_DECODE_VVC_0500
1120 * @tc.name : decode vvc 10bit hdrVivid
1121 * @tc.desc : function test
1122 */
1123 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_0500, TestSize.Level1)
1124 {
1125 if (access(INP_DIR_VVC_1080, F_OK) == 0) {
1126 auto vDecSample = make_shared<VDecAPI11Sample>();
1127 vDecSample->INP_DIR = INP_DIR_VVC_1080;
1128 vDecSample->DEFAULT_WIDTH = 1920;
1129 vDecSample->DEFAULT_HEIGHT = 1080;
1130 vDecSample->DEFAULT_FRAME_RATE = 30;
1131 vDecSample->SF_OUTPUT = false;
1132 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1133 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1134 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1135 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1136 vDecSample->WaitForEOS();
1137 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1138 }
1139 }
1140
1141 /**
1142 * @tc.number : VIDEO_DECODE_VVC_0600
1143 * @tc.name : decode vvc surf change in normal state
1144 * @tc.desc : function test
1145 */
1146 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_0600, TestSize.Level2)
1147 {
1148 if (access(INP_DIR_VVC_1080, F_OK) == 0) {
1149 auto vDecSample = make_shared<VDecAPI11Sample>();
1150 vDecSample->INP_DIR = INP_DIR_VVC_1080;
1151 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
1152 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
1153 vDecSample->DEFAULT_FRAME_RATE = 30;
1154 vDecSample->SF_OUTPUT = true;
1155 vDecSample->autoSwitchSurface = true;
1156 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
1157 vDecSample->sleepOnFPS = true;
1158 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1159 vDecSample->WaitForEOS();
1160 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1161 ASSERT_EQ(AV_ERR_OK, vDecSample->Reset());
1162 ASSERT_EQ(AV_ERR_INVALID_STATE, vDecSample->SwitchSurface());
1163 ASSERT_EQ(AV_ERR_OK, vDecSample->Release());
1164 }
1165 }
1166
1167 /**
1168 * @tc.number : VIDEO_DECODE_VVC_0700
1169 * @tc.name : decode vvc surf change in flushed state
1170 * @tc.desc : function test
1171 */
1172 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_0700, TestSize.Level2)
1173 {
1174 if (access(INP_DIR_VVC_1080, F_OK) == 0) {
1175 auto vDecSample = make_shared<VDecAPI11Sample>();
1176 vDecSample->INP_DIR = INP_DIR_VVC_1080;
1177 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
1178 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
1179 vDecSample->DEFAULT_FRAME_RATE = 30;
1180 vDecSample->SF_OUTPUT = true;
1181 vDecSample->autoSwitchSurface = true;
1182 vDecSample->sleepOnFPS = true;
1183 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1184 ASSERT_EQ(AV_ERR_OK, vDecSample->Flush());
1185 ASSERT_EQ(AV_ERR_OK, vDecSample->SwitchSurface());
1186 ASSERT_EQ(AV_ERR_OK, vDecSample->Stop());
1187 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1188 }
1189 }
1190
1191 /**
1192 * @tc.number : VIDEO_DECODE_VVC_0800
1193 * @tc.name : decode vvc surf change in buffer mode
1194 * @tc.desc : function test
1195 */
1196 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_0800, TestSize.Level2)
1197 {
1198 if (access(INP_DIR_VVC_1080, F_OK) == 0) {
1199 auto vDecSample = make_shared<VDecAPI11Sample>();
1200 vDecSample->INP_DIR = INP_DIR_VVC_1080;
1201 vDecSample->DEFAULT_WIDTH = 1920;
1202 vDecSample->DEFAULT_HEIGHT = 1080;
1203 vDecSample->DEFAULT_FRAME_RATE = 30;
1204 vDecSample->SF_OUTPUT = false;
1205 vDecSample->CreateSurface();
1206 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec(g_codecNameVVC));
1207 ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, vDecSample->SwitchSurface());
1208 vDecSample->WaitForEOS();
1209 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1210 }
1211 }
1212
1213 /**
1214 * @tc.number : VIDEO_DECODE_VVC_0900
1215 * @tc.name : decode vvc get decode output descriptions h265
1216 * @tc.desc : function test
1217 */
1218 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_0900, TestSize.Level2)
1219 {
1220 if (access(INP_DIR_VVC_1080, F_OK) == 0) {
1221 auto vDecSample = make_shared<VDecAPI11Sample>();
1222 vDecSample->INP_DIR = INP_DIR_VVC_1080;
1223 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
1224 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
1225 vDecSample->DEFAULT_FRAME_RATE = 30;
1226 vDecSample->needCheckOutputDesc = true;
1227 vDecSample->expectCropTop = 0;
1228 vDecSample->expectCropBottom = DEFAULT_HEIGHT - 1;
1229 vDecSample->expectCropLeft = 0;
1230 vDecSample->expectCropRight = DEFAULT_WIDTH - 1;
1231
1232 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1233 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1234 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1235 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1236 vDecSample->WaitForEOS();
1237 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1238 }
1239 }
1240
1241 /**
1242 * @tc.number : VIDEO_DECODE_VVC_1000
1243 * @tc.name : decode vvc enable low latency
1244 * @tc.desc : function test
1245 */
1246 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_1000, TestSize.Level2)
1247 {
1248 if (access(INP_DIR_VVC_1080, F_OK) == 0) {
1249 auto vDecSample = make_shared<VDecNdkSample>();
1250 vDecSample->INP_DIR = INP_DIR_VVC_1080;
1251 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
1252 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
1253 vDecSample->DEFAULT_FRAME_RATE = 30;
1254 vDecSample->enableLowLatency = true;
1255 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1256 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1257 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1258 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1259 vDecSample->WaitForEOS();
1260 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1261 }
1262 }
1263
1264 /**
1265 * @tc.number : VIDEO_DECODE_VRR_0001
1266 * @tc.name : decode to NV12 format, enable VRR
1267 * @tc.desc : function test
1268 */
1269 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VRR_0001, TestSize.Level0)
1270 {
1271 auto vDecSample = make_shared<VDecAPI11Sample>();
1272 vDecSample->INP_DIR = INP_DIR_1080_30;
1273 vDecSample->DEFAULT_FRAME_RATE = 60.0;
1274 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
1275 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
1276 vDecSample->enableVRR = true;
1277 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV12;
1278 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
1279 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1280 }
1281
1282 /**
1283 * @tc.number : VIDEO_DECODE_VRR_0002
1284 * @tc.name : decode to NV21 format, enable VRR
1285 * @tc.desc : function test
1286 */
1287 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VRR_0002, TestSize.Level0)
1288 {
1289 auto vDecSample = make_shared<VDecAPI11Sample>();
1290 vDecSample->INP_DIR = INP_DIR_1080_30;
1291 vDecSample->DEFAULT_FRAME_RATE = 60.0;
1292 vDecSample->DEFAULT_WIDTH = DEFAULT_WIDTH;
1293 vDecSample->DEFAULT_HEIGHT = DEFAULT_HEIGHT;
1294 vDecSample->enableVRR = true;
1295 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
1296 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecName));
1297 if (!access("/system/lib64/media/", 0)) {
1298 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1299 }
1300 }
1301
1302 /**
1303 * @tc.number : VIDEO_HWDEC_FUNCTION_1800
1304 * @tc.name : resolution change
1305 * @tc.desc : function test
1306 */
1307 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1800, TestSize.Level2)
1308 {
1309 if (g_codecNameHEVC.find("hisi") != string::npos) {
1310 auto vDecSample = make_shared<VDecAPI11Sample>();
1311 vDecSample->INP_DIR = "/data/test/media/change_8bit_h265.h265";
1312 vDecSample->DEFAULT_WIDTH = 1280;
1313 vDecSample->DEFAULT_HEIGHT = 720;
1314 vDecSample->DEFAULT_FRAME_RATE = 30;
1315 vDecSample->SF_OUTPUT = false;
1316 vDecSample->outputYuvFlag = true;
1317 vDecSample->NocaleHash = true;
1318 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameHEVC));
1319 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1320 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1321 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1322 vDecSample->WaitForEOS();
1323 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1324 ASSERT_EQ(CHANGE_HEVC_FRAME, vDecSample->outFrameCount);
1325 }
1326 }
1327
1328 /**
1329 * @tc.number : VIDEO_HWDEC_FUNCTION_1900
1330 * @tc.name : resolution change
1331 * @tc.desc : function test
1332 */
1333 HWTEST_F(HwdecFuncNdkTest, VIDEO_HWDEC_FUNCTION_1900, TestSize.Level2)
1334 {
1335 if (g_codecNameHEVC.find("hisi") != string::npos) {
1336 auto vDecSample = make_shared<VDecAPI11Sample>();
1337 vDecSample->INP_DIR = "/data/test/media/change_10bit_h265.h265";
1338 vDecSample->DEFAULT_WIDTH = 1280;
1339 vDecSample->DEFAULT_HEIGHT = 720;
1340 vDecSample->DEFAULT_FRAME_RATE = 30;
1341 vDecSample->SF_OUTPUT = false;
1342 vDecSample->outputYuvFlag = true;
1343 vDecSample->NocaleHash = true;
1344 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameHEVC));
1345 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1346 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1347 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1348 vDecSample->WaitForEOS();
1349 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1350 ASSERT_EQ(CHANGE_HEVC_TEN_FRAME, vDecSample->outFrameCount);
1351 }
1352 }
1353
1354 /**
1355 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0010
1356 * @tc.name : h266变分辨率,8bit解码,buffer, nv12
1357 * @tc.desc : function test
1358 */
1359 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0010, TestSize.Level0)
1360 {
1361 if (g_codecNameVVC.find("hisi") != string::npos) {
1362 auto vDecSample = make_shared<VDecAPI11Sample>();
1363 vDecSample->INP_DIR = inpDirVvcResolution8Bit;
1364 vDecSample->DEFAULT_WIDTH = 3840;
1365 vDecSample->DEFAULT_HEIGHT = 2160;
1366 vDecSample->DEFAULT_FRAME_RATE = 30;
1367 vDecSample->SF_OUTPUT = false;
1368 vDecSample->outputYuvFlag = true;
1369 vDecSample->NocaleHash = true;
1370 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV12;
1371 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1372 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1373 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1374 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1375 vDecSample->WaitForEOS();
1376 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1377 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1378 }
1379 }
1380
1381 /**
1382 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0020
1383 * @tc.name : h266变分辨率,8bit解码,buffer, nv21
1384 * @tc.desc : function test
1385 */
1386 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0020, TestSize.Level0)
1387 {
1388 if (g_codecNameVVC.find("hisi") != string::npos) {
1389 auto vDecSample = make_shared<VDecAPI11Sample>();
1390 vDecSample->INP_DIR = inpDirVvcResolution8Bit;
1391 vDecSample->DEFAULT_WIDTH = 3840;
1392 vDecSample->DEFAULT_HEIGHT = 2160;
1393 vDecSample->DEFAULT_FRAME_RATE = 30;
1394 vDecSample->SF_OUTPUT = false;
1395 vDecSample->outputYuvFlag = true;
1396 vDecSample->NocaleHash = true;
1397 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
1398 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1399 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1400 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1401 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1402 vDecSample->WaitForEOS();
1403 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1404 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1405 }
1406 }
1407
1408 /**
1409 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0030
1410 * @tc.name : h266变分辨率,10bit解码,buffer, nv12
1411 * @tc.desc : function test
1412 */
1413 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0030, TestSize.Level0)
1414 {
1415 if (g_codecNameVVC.find("hisi") != string::npos) {
1416 auto vDecSample = make_shared<VDecAPI11Sample>();
1417 vDecSample->INP_DIR = inpDirVvcResolution10Bit;
1418 vDecSample->DEFAULT_WIDTH = 128;
1419 vDecSample->DEFAULT_HEIGHT = 128;
1420 vDecSample->DEFAULT_FRAME_RATE = 30;
1421 vDecSample->SF_OUTPUT = false;
1422 vDecSample->outputYuvFlag = true;
1423 vDecSample->NocaleHash = true;
1424 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV12;
1425 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1426 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1427 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1428 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1429 vDecSample->WaitForEOS();
1430 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1431 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1432 }
1433 }
1434
1435 /**
1436 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0040
1437 * @tc.name : h266变分辨率,10bit解码,buffer, nv21
1438 * @tc.desc : function test
1439 */
1440 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0040, TestSize.Level0)
1441 {
1442 if (g_codecNameVVC.find("hisi") != string::npos) {
1443 auto vDecSample = make_shared<VDecAPI11Sample>();
1444 vDecSample->INP_DIR = inpDirVvcResolution10Bit;
1445 vDecSample->DEFAULT_WIDTH = 128;
1446 vDecSample->DEFAULT_HEIGHT = 128;
1447 vDecSample->DEFAULT_FRAME_RATE = 30;
1448 vDecSample->SF_OUTPUT = false;
1449 vDecSample->outputYuvFlag = true;
1450 vDecSample->NocaleHash = true;
1451 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
1452 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1453 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1454 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1455 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1456 vDecSample->WaitForEOS();
1457 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1458 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1459 }
1460 }
1461
1462 /**
1463 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0050
1464 * @tc.name : h266变分辨率,hdr解码,buffer, nv12
1465 * @tc.desc : function test
1466 */
1467 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0050, TestSize.Level0)
1468 {
1469 if (g_codecNameVVC.find("hisi") != string::npos) {
1470 auto vDecSample = make_shared<VDecAPI11Sample>();
1471 vDecSample->INP_DIR = inpDirVvcResolutionHdr10Bit;
1472 vDecSample->DEFAULT_WIDTH = 1280;
1473 vDecSample->DEFAULT_HEIGHT = 720;
1474 vDecSample->DEFAULT_FRAME_RATE = 30;
1475 vDecSample->SF_OUTPUT = false;
1476 vDecSample->outputYuvFlag = true;
1477 vDecSample->NocaleHash = true;
1478 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV12;
1479 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1480 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1481 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1482 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1483 vDecSample->WaitForEOS();
1484 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1485 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1486 }
1487 }
1488
1489 /**
1490 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0060
1491 * @tc.name : h266变分辨率,hdr解码,buffer, nv21
1492 * @tc.desc : function test
1493 */
1494 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0060, TestSize.Level0)
1495 {
1496 if (g_codecNameVVC.find("hisi") != string::npos) {
1497 auto vDecSample = make_shared<VDecAPI11Sample>();
1498 vDecSample->INP_DIR = inpDirVvcResolutionHdr10Bit;
1499 vDecSample->DEFAULT_WIDTH = 1280;
1500 vDecSample->DEFAULT_HEIGHT = 720;
1501 vDecSample->DEFAULT_FRAME_RATE = 30;
1502 vDecSample->SF_OUTPUT = false;
1503 vDecSample->outputYuvFlag = true;
1504 vDecSample->NocaleHash = true;
1505 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
1506 ASSERT_EQ(AV_ERR_OK, vDecSample->CreateVideoDecoder(g_codecNameVVC));
1507 ASSERT_EQ(AV_ERR_OK, vDecSample->ConfigureVideoDecoder());
1508 ASSERT_EQ(AV_ERR_OK, vDecSample->SetVideoDecoderCallback());
1509 ASSERT_EQ(AV_ERR_OK, vDecSample->StartVideoDecoder());
1510 vDecSample->WaitForEOS();
1511 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1512 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1513 }
1514 }
1515
1516 /**
1517 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0070
1518 * @tc.name : h266变分辨率,8bit解码,surface, nv12
1519 * @tc.desc : function test
1520 */
1521 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0070, TestSize.Level0)
1522 {
1523 if (g_codecNameVVC.find("hisi") != string::npos) {
1524 auto vDecSample = make_shared<VDecAPI11Sample>();
1525 vDecSample->INP_DIR = inpDirVvcResolution8Bit;
1526 vDecSample->DEFAULT_WIDTH = 3840;
1527 vDecSample->DEFAULT_HEIGHT = 2160;
1528 vDecSample->DEFAULT_FRAME_RATE = 30;
1529 vDecSample->SF_OUTPUT = true;
1530 vDecSample->outputYuvSurface = true;
1531 vDecSample->NocaleHash = true;
1532 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV12;
1533 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1534 vDecSample->WaitForEOS();
1535 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1536 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1537 }
1538 }
1539
1540 /**
1541 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0080
1542 * @tc.name : h266变分辨率,8bit解码,surface, nv21
1543 * @tc.desc : function test
1544 */
1545 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0080, TestSize.Level0)
1546 {
1547 if (g_codecNameVVC.find("hisi") != string::npos) {
1548 auto vDecSample = make_shared<VDecAPI11Sample>();
1549 vDecSample->INP_DIR = inpDirVvcResolution8Bit;
1550 vDecSample->DEFAULT_WIDTH = 3840;
1551 vDecSample->DEFAULT_HEIGHT = 2160;
1552 vDecSample->DEFAULT_FRAME_RATE = 30;
1553 vDecSample->SF_OUTPUT = true;
1554 vDecSample->outputYuvSurface = true;
1555 vDecSample->NocaleHash = true;
1556 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
1557 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1558 vDecSample->WaitForEOS();
1559 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1560 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1561 }
1562 }
1563
1564 /**
1565 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0090
1566 * @tc.name : h266变分辨率,10bit解码,surface, nv12
1567 * @tc.desc : function test
1568 */
1569 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0090, TestSize.Level0)
1570 {
1571 if (g_codecNameVVC.find("hisi") != string::npos) {
1572 auto vDecSample = make_shared<VDecAPI11Sample>();
1573 vDecSample->INP_DIR = inpDirVvcResolution10Bit;
1574 vDecSample->DEFAULT_WIDTH = 128;
1575 vDecSample->DEFAULT_HEIGHT = 128;
1576 vDecSample->DEFAULT_FRAME_RATE = 30;
1577 vDecSample->SF_OUTPUT = true;
1578 vDecSample->outputYuvSurface = true;
1579 vDecSample->NocaleHash = true;
1580 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV12;
1581 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1582 vDecSample->WaitForEOS();
1583 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1584 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1585 }
1586 }
1587
1588 /**
1589 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0100
1590 * @tc.name : h266变分辨率,10bit解码,surface, nv21
1591 * @tc.desc : function test
1592 */
1593 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0100, TestSize.Level0)
1594 {
1595 if (g_codecNameVVC.find("hisi") != string::npos) {
1596 auto vDecSample = make_shared<VDecAPI11Sample>();
1597 vDecSample->INP_DIR = inpDirVvcResolution10Bit;
1598 vDecSample->DEFAULT_WIDTH = 128;
1599 vDecSample->DEFAULT_HEIGHT = 128;
1600 vDecSample->DEFAULT_FRAME_RATE = 30;
1601 vDecSample->SF_OUTPUT = true;
1602 vDecSample->outputYuvSurface = true;
1603 vDecSample->NocaleHash = true;
1604 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
1605 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1606 vDecSample->WaitForEOS();
1607 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1608 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1609 }
1610 }
1611
1612 /**
1613 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0110
1614 * @tc.name : h266变分辨率,10bit解码,surface, nv12
1615 * @tc.desc : function test
1616 */
1617 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0110, TestSize.Level0)
1618 {
1619 if (g_codecNameVVC.find("hisi") != string::npos) {
1620 auto vDecSample = make_shared<VDecAPI11Sample>();
1621 vDecSample->INP_DIR = inpDirVvcResolutionHdr10Bit;
1622 vDecSample->DEFAULT_WIDTH = 1280;
1623 vDecSample->DEFAULT_HEIGHT = 720;
1624 vDecSample->DEFAULT_FRAME_RATE = 30;
1625 vDecSample->SF_OUTPUT = true;
1626 vDecSample->outputYuvSurface = true;
1627 vDecSample->NocaleHash = true;
1628 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV12;
1629 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1630 vDecSample->WaitForEOS();
1631 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1632 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1633 }
1634 }
1635
1636 /**
1637 * @tc.number : VIDEO_DECODE_VVC_RESOLUTION_0100
1638 * @tc.name : h266变分辨率,10bit解码,surface, nv21
1639 * @tc.desc : function test
1640 */
1641 HWTEST_F(HwdecFuncNdkTest, VIDEO_DECODE_VVC_RESOLUTION_0120, TestSize.Level0)
1642 {
1643 if (g_codecNameVVC.find("hisi") != string::npos) {
1644 auto vDecSample = make_shared<VDecAPI11Sample>();
1645 vDecSample->INP_DIR = inpDirVvcResolutionHdr10Bit;
1646 vDecSample->DEFAULT_WIDTH = 1280;
1647 vDecSample->DEFAULT_HEIGHT = 720;
1648 vDecSample->DEFAULT_FRAME_RATE = 30;
1649 vDecSample->SF_OUTPUT = true;
1650 vDecSample->outputYuvSurface = true;
1651 vDecSample->NocaleHash = true;
1652 vDecSample->defualtPixelFormat = AV_PIXEL_FORMAT_NV21;
1653 ASSERT_EQ(AV_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameVVC));
1654 vDecSample->WaitForEOS();
1655 ASSERT_EQ(AV_ERR_OK, vDecSample->errCount);
1656 ASSERT_EQ(CHANGE_VVC_FRAME, vDecSample->outFrameCount);
1657 }
1658 }
1659 } // namespace