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 #include <string>
16
17 #include "gtest/gtest.h"
18 #include "native_avcodec_videoencoder.h"
19 #include "native_averrors.h"
20 #include "videoenc_api11_sample.h"
21 #include "native_avcodec_base.h"
22 #include "avcodec_codec_name.h"
23 #include "native_avcapability.h"
24
25 namespace {
26 OH_AVCodec *venc_ = NULL;
27 OH_AVCapability *cap = nullptr;
28 OH_AVCapability *cap_hevc = nullptr;
29 constexpr uint32_t CODEC_NAME_SIZE = 128;
30 char g_codecName[CODEC_NAME_SIZE] = {};
31 char g_codecNameHEVC[CODEC_NAME_SIZE] = {};
32 OH_AVFormat *format;
33 constexpr uint32_t DEFAULT_WIDTH = 1280;
34 constexpr uint32_t DEFAULT_HEIGHT = 720;
35 constexpr uint32_t DEFAULT_KEY_FRAME_INTERVAL = 1000;
36 constexpr uint32_t DEFAULT_BITRATE = 10000000;
37 constexpr double DEFAULT_FRAME_RATE = 30.0;
38 OH_AVPixelFormat DEFAULT_PIX_FMT = AV_PIXEL_FORMAT_NV12;
39 const char *INP_DIR_720 = "/data/test/media/1280_720_nv.yuv";
40 } // namespace
41 namespace OHOS {
42 namespace Media {
43 class HwEncTemporalNdkTest : public testing::Test {
44 public:
45 static void SetUpTestCase();
46 static void TearDownTestCase();
47 void SetUp() override;
48 void TearDown() override;
49 void InputFunc();
50 void OutputFunc();
51 void Release();
52 int32_t Stop();
53
54 protected:
55 const char *inpDir720 = "/data/test/media/1280_720_nv.yuv";
56 const char *inpDir720Array[16] = {"/data/test/media/1280_720_nv.yuv", "/data/test/media/1280_720_nv_1.yuv",
57 "/data/test/media/1280_720_nv_2.yuv", "/data/test/media/1280_720_nv_3.yuv",
58 "/data/test/media/1280_720_nv_7.yuv", "/data/test/media/1280_720_nv_10.yuv",
59 "/data/test/media/1280_720_nv_13.yuv", "/data/test/media/1280_720_nv_4.yuv",
60 "/data/test/media/1280_720_nv_8.yuv", "/data/test/media/1280_720_nv_11.yuv",
61 "/data/test/media/1280_720_nv_14.yuv", "/data/test/media/1280_720_nv_5.yuv",
62 "/data/test/media/1280_720_nv_9.yuv", "/data/test/media/1280_720_nv_12.yuv",
63 "/data/test/media/1280_720_nv_15.yuv", "/data/test/media/1280_720_nv_6.yuv"};
64 };
65 } // namespace Media
66 } // namespace OHOS
67
68 using namespace std;
69 using namespace OHOS;
70 using namespace OHOS::Media;
71 using namespace testing::ext;
72
SetUpTestCase()73 void HwEncTemporalNdkTest::SetUpTestCase()
74 {
75 cap = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
76 const char *tmpCodecName = OH_AVCapability_GetName(cap);
77 if (memcpy_s(g_codecName, sizeof(g_codecName), tmpCodecName, strlen(tmpCodecName)) != 0)
78 cout << "memcpy failed" << endl;
79 cout << "codecname: " << g_codecName << endl;
80 cap_hevc = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
81 const char *tmpCodecNameHevc = OH_AVCapability_GetName(cap_hevc);
82 if (memcpy_s(g_codecNameHEVC, sizeof(g_codecNameHEVC), tmpCodecNameHevc, strlen(tmpCodecNameHevc)) != 0)
83 cout << "memcpy failed" << endl;
84 cout << "codecname_hevc: " << g_codecNameHEVC << endl;
85 }
TearDownTestCase()86 void HwEncTemporalNdkTest::TearDownTestCase() {}
SetUp()87 void HwEncTemporalNdkTest::SetUp() {}
TearDown()88 void HwEncTemporalNdkTest::TearDown()
89 {
90 if (venc_ != NULL) {
91 OH_VideoEncoder_Destroy(venc_);
92 venc_ = nullptr;
93 }
94 if (format != nullptr) {
95 OH_AVFormat_Destroy(format);
96 format = nullptr;
97 }
98 }
99 namespace {
100 /**
101 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0020
102 * @tc.name : OOH_MD_KEY_VIDEO_ENCODER_TEMPORAL_GOP_REFERENCE_MODE error
103 * @tc.desc : api test
104 */
105 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_API_0020, TestSize.Level2)
106 {
107 OH_AVErrCode ret = AV_ERR_OK;
108 venc_ = OH_VideoEncoder_CreateByMime(OH_AVCODEC_MIMETYPE_VIDEO_AVC);
109 ASSERT_NE(nullptr, venc_);
110 format = OH_AVFormat_Create();
111 ASSERT_NE(nullptr, format);
112
113 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_WIDTH, DEFAULT_WIDTH);
114 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_HEIGHT, DEFAULT_HEIGHT);
115 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_PIXEL_FORMAT, DEFAULT_PIX_FMT);
116 (void)OH_AVFormat_SetDoubleValue(format, OH_MD_KEY_FRAME_RATE, DEFAULT_FRAME_RATE);
117 (void)OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
118 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_I_FRAME_INTERVAL, DEFAULT_KEY_FRAME_INTERVAL);
119 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_VIDEO_ENCODER_ENABLE_TEMPORAL_SCALABILITY, 1);
120 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_VIDEO_ENCODER_TEMPORAL_GOP_REFERENCE_MODE, 3);
121 ret = OH_VideoEncoder_Configure(venc_, format);
122 if (!access("/system/lib64/media/", 0)) {
123 ASSERT_EQ(ret, AV_ERR_INVALID_VAL);
124 } else {
125 ASSERT_EQ(ret, AV_ERR_OK);
126 }
127 }
128
129 /**
130 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0030
131 * @tc.name : OH_MD_KEY_VIDEO_ENCODER_TEMPORAL_GOP_SIZE para error
132 * @tc.desc : api test
133 */
134 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_API_0030, TestSize.Level2)
135 {
136 OH_AVErrCode ret = AV_ERR_OK;
137 venc_ = OH_VideoEncoder_CreateByMime(OH_AVCODEC_MIMETYPE_VIDEO_AVC);
138 ASSERT_NE(nullptr, venc_);
139 format = OH_AVFormat_Create();
140 ASSERT_NE(nullptr, format);
141
142 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_WIDTH, DEFAULT_WIDTH);
143 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_HEIGHT, DEFAULT_HEIGHT);
144 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_PIXEL_FORMAT, DEFAULT_PIX_FMT);
145 (void)OH_AVFormat_SetDoubleValue(format, OH_MD_KEY_FRAME_RATE, DEFAULT_FRAME_RATE);
146 (void)OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
147 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_I_FRAME_INTERVAL, DEFAULT_KEY_FRAME_INTERVAL);
148 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_VIDEO_ENCODER_ENABLE_TEMPORAL_SCALABILITY, 1);
149 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_VIDEO_ENCODER_TEMPORAL_GOP_SIZE, 30);
150 ret = OH_VideoEncoder_Configure(venc_, format);
151 if (!access("/system/lib64/media/", 0)) {
152 ASSERT_EQ(ret, AV_ERR_INVALID_VAL);
153 } else {
154 ASSERT_EQ(ret, AV_ERR_OK);
155 }
156 }
157
158 /**
159 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0010
160 * @tc.name : 调用使能接口
161 * @tc.desc : api test
162 */
163 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0010, TestSize.Level1)
164 {
165 int32_t temporalGopSize = 2;
166 if (!access("/system/lib64/media/", 0)) {
167 auto vEncSample = make_unique<VEncAPI11Sample>();
168 cout << "running on phone=========="<< endl;
169 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
170 vEncSample->TEMPORAL_ENABLE = true;
171 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
172 } else {
173 auto vEncSample = make_unique<VEncAPI11Sample>();
174 cout << "running on rk=========="<< endl;
175 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
176 vEncSample->TEMPORAL_ENABLE = true;
177 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
178 }
179 }
180
181 /**
182 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0020
183 * @tc.name : 未使能,配置相邻模式分层编码,h264 buffer
184 * @tc.desc : api test
185 */
186 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0020, TestSize.Level1)
187 {
188 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
189 auto vEncSample = make_unique<VEncAPI11Sample>();
190 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0020.h264";
191 vEncSample->INP_DIR = INP_DIR_720;
192 vEncSample->DEFAULT_WIDTH = 1280;
193 vEncSample->DEFAULT_HEIGHT = 720;
194 vEncSample->DEFAULT_FRAME_RATE = 30;
195 vEncSample->TEMPORAL_ENABLE = false;
196 vEncSample->TEMPORAL_CONFIG = true;
197 int32_t temporalGopSize = 2;
198 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
199 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
200 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
201 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
202 vEncSample->WaitForEOS();
203 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
204 }
205 }
206
207 /**
208 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0030
209 * @tc.name : 未使能,配置相邻模式分层编码,h265 surf
210 * @tc.desc : api test
211 */
212 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0030, TestSize.Level1)
213 {
214 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
215 auto vEncSample = make_unique<VEncAPI11Sample>();
216 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0030.h265";
217 vEncSample->INP_DIR = INP_DIR_720;
218 vEncSample->DEFAULT_WIDTH = 1280;
219 vEncSample->DEFAULT_HEIGHT = 720;
220 vEncSample->DEFAULT_FRAME_RATE = 30;
221 vEncSample->SURF_INPUT = true;
222 vEncSample->TEMPORAL_ENABLE = false;
223 vEncSample->TEMPORAL_CONFIG = true;
224 int32_t temporalGopSize = 2;
225 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
226 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
227 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
228 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
229 vEncSample->WaitForEOS();
230 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
231 }
232 }
233
234 /**
235 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0040
236 * @tc.name : 配置跨帧模式分层编码,默认gopsize,h265 surf
237 * @tc.desc : api test
238 */
239 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0040, TestSize.Level1)
240 {
241 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
242 auto vEncSample = make_unique<VEncAPI11Sample>();
243 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0040.h265";
244 vEncSample->INP_DIR = INP_DIR_720;
245 vEncSample->DEFAULT_WIDTH = 1280;
246 vEncSample->DEFAULT_HEIGHT = 720;
247 vEncSample->DEFAULT_FRAME_RATE = 30;
248 vEncSample->SURF_INPUT = true;
249 vEncSample->TEMPORAL_ENABLE = true;
250 vEncSample->TEMPORAL_DEFAULT = true;
251 vEncSample->TEMPORAL_JUMP_MODE = true;
252 int32_t temporalGopSize = 0;
253 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
254 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
255 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
256 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
257 vEncSample->WaitForEOS();
258 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
259 }
260 }
261
262 /**
263 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0440
264 * @tc.name : 配置相邻模式分层编码,默认gopsize,h265 surf
265 * @tc.desc : api test
266 */
267 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0440, TestSize.Level1)
268 {
269 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
270 auto vEncSample = make_unique<VEncAPI11Sample>();
271 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0440.h265";
272 vEncSample->INP_DIR = INP_DIR_720;
273 vEncSample->DEFAULT_WIDTH = 1280;
274 vEncSample->DEFAULT_HEIGHT = 720;
275 vEncSample->DEFAULT_FRAME_RATE = 30;
276 vEncSample->SURF_INPUT = true;
277 vEncSample->TEMPORAL_ENABLE = true;
278 vEncSample->TEMPORAL_DEFAULT = true;
279 int32_t temporalGopSize = 0;
280 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
281 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
282 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
283 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
284 vEncSample->WaitForEOS();
285 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
286 }
287 }
288
289 /**
290 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0050
291 * @tc.name : h265,surf相邻参考模式分层编码。时域gop size为2
292 * @tc.desc : function test
293 */
294 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0050, TestSize.Level1)
295 {
296 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
297 auto vEncSample = make_unique<VEncAPI11Sample>();
298 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0050.h265";
299 vEncSample->INP_DIR = INP_DIR_720;
300 vEncSample->DEFAULT_WIDTH = 1280;
301 vEncSample->DEFAULT_HEIGHT = 720;
302 vEncSample->DEFAULT_FRAME_RATE = 30;
303 vEncSample->SURF_INPUT = true;
304 vEncSample->TEMPORAL_ENABLE = true;
305 vEncSample->TEMPORAL_CONFIG = true;
306 int32_t temporalGopSize = 2;
307 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
308 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
309 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
310 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
311 vEncSample->WaitForEOS();
312 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
313 }
314 }
315
316 /**
317 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0060
318 * @tc.name : h265,surf相邻参考模式分层编码。时域gop size为I帧间隔-1
319 * @tc.desc : function test
320 */
321 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0060, TestSize.Level1)
322 {
323 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
324 auto vEncSample = make_unique<VEncAPI11Sample>();
325 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0060.h265";
326 vEncSample->INP_DIR = INP_DIR_720;
327 vEncSample->DEFAULT_WIDTH = 1280;
328 vEncSample->DEFAULT_HEIGHT = 720;
329 vEncSample->DEFAULT_FRAME_RATE = 30;
330 vEncSample->SURF_INPUT = true;
331 vEncSample->TEMPORAL_ENABLE = true;
332 vEncSample->TEMPORAL_CONFIG = true;
333
334 int32_t temporalGopSize = vEncSample->DEFAULT_FRAME_RATE-1;
335 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
336 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
337 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
338 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
339 vEncSample->WaitForEOS();
340 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
341 }
342 }
343
344 /**
345 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0070
346 * @tc.name : h265,surf跨帧参考模式分层编码。时域gop size为2
347 * @tc.desc : function test
348 */
349 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0070, TestSize.Level1)
350 {
351 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
352 auto vEncSample = make_unique<VEncAPI11Sample>();
353 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0070.h265";
354 vEncSample->INP_DIR = INP_DIR_720;
355 vEncSample->DEFAULT_WIDTH = 1280;
356 vEncSample->DEFAULT_HEIGHT = 720;
357 vEncSample->DEFAULT_FRAME_RATE = 30;
358 vEncSample->SURF_INPUT = true;
359 vEncSample->TEMPORAL_ENABLE = true;
360 vEncSample->TEMPORAL_CONFIG = true;
361 vEncSample->TEMPORAL_JUMP_MODE = true;
362 int32_t temporalGopSize = 2;
363 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
364 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
365 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
366 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
367 vEncSample->WaitForEOS();
368 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
369 }
370 }
371
372 /**
373 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0080
374 * @tc.name : h265,surf跨帧参考模式分层编码 时域gop size为I帧间隔-1
375 * @tc.desc : function test
376 */
377 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0080, TestSize.Level1)
378 {
379 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
380 auto vEncSample = make_unique<VEncAPI11Sample>();
381 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0080.h265";
382 vEncSample->INP_DIR = INP_DIR_720;
383 vEncSample->DEFAULT_WIDTH = 1280;
384 vEncSample->DEFAULT_HEIGHT = 720;
385 vEncSample->DEFAULT_FRAME_RATE = 30;
386 vEncSample->SURF_INPUT = true;
387 vEncSample->TEMPORAL_ENABLE = true;
388 vEncSample->TEMPORAL_CONFIG = true;
389 vEncSample->TEMPORAL_JUMP_MODE = true;
390 int32_t temporalGopSize = vEncSample->DEFAULT_FRAME_RATE-1;
391 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
392 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
393 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
394 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
395 vEncSample->WaitForEOS();
396 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
397 }
398 }
399
400 /**
401 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0090
402 * @tc.name : h264 buffer 相邻参考模式分层编码 时域gop size为任意合法值
403 * @tc.desc : function test
404 */
405 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0090, TestSize.Level1)
406 {
407 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
408 auto vEncSample = make_unique<VEncAPI11Sample>();
409 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0090.h264";
410 vEncSample->INP_DIR = INP_DIR_720;
411 vEncSample->DEFAULT_WIDTH = 1280;
412 vEncSample->DEFAULT_HEIGHT = 720;
413 vEncSample->DEFAULT_FRAME_RATE = 30;
414 vEncSample->TEMPORAL_ENABLE = true;
415 vEncSample->TEMPORAL_CONFIG = true;
416 int32_t temporalGopSize = 3;
417 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
418 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
419 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
420 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
421 vEncSample->WaitForEOS();
422 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
423 }
424 }
425
426 /**
427 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0100
428 * @tc.name : h264 buffer 跨帧参考模式分层编码 时域gop size为任意合法值
429 * @tc.desc : function test
430 */
431 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0100, TestSize.Level1)
432 {
433 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
434 auto vEncSample = make_unique<VEncAPI11Sample>();
435 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0100.h264";
436 vEncSample->INP_DIR = INP_DIR_720;
437 vEncSample->DEFAULT_WIDTH = 1280;
438 vEncSample->DEFAULT_HEIGHT = 720;
439 vEncSample->DEFAULT_FRAME_RATE = 30;
440 vEncSample->TEMPORAL_ENABLE = true;
441 vEncSample->TEMPORAL_CONFIG = true;
442 vEncSample->TEMPORAL_JUMP_MODE = true;
443 int32_t temporalGopSize = 3;
444 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
445 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
446 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
447 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
448 vEncSample->WaitForEOS();
449 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
450 }
451 }
452
453 /**
454 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0110
455 * @tc.name : h264 surf 相邻参考模式分层编码 时域gop size为任意合法值
456 * @tc.desc : function test
457 */
458 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0110, TestSize.Level1)
459 {
460 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
461 auto vEncSample = make_unique<VEncAPI11Sample>();
462 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0110.h264";
463 vEncSample->INP_DIR = INP_DIR_720;
464 vEncSample->DEFAULT_WIDTH = 1280;
465 vEncSample->DEFAULT_HEIGHT = 720;
466 vEncSample->DEFAULT_FRAME_RATE = 30;
467 vEncSample->SURF_INPUT = true;
468 vEncSample->TEMPORAL_ENABLE = true;
469 vEncSample->TEMPORAL_CONFIG = true;
470 int32_t temporalGopSize = 5;
471 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
472 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
473 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
474 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
475 vEncSample->WaitForEOS();
476 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
477 }
478 }
479
480 /**
481 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0120
482 * @tc.name : h264 surf 跨帧参考模式分层编码 时域gop size为5
483 * @tc.desc : function test
484 */
485 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0120, TestSize.Level1)
486 {
487 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
488 auto vEncSample = make_unique<VEncAPI11Sample>();
489 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0120.h264";
490 vEncSample->INP_DIR = INP_DIR_720;
491 vEncSample->DEFAULT_WIDTH = 1280;
492 vEncSample->DEFAULT_HEIGHT = 720;
493 vEncSample->DEFAULT_FRAME_RATE = 30;
494 vEncSample->SURF_INPUT = true;
495 vEncSample->TEMPORAL_ENABLE = true;
496 vEncSample->TEMPORAL_CONFIG = true;
497 vEncSample->TEMPORAL_JUMP_MODE = true;
498 int32_t temporalGopSize = 5;
499 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
500 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
501 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
502 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
503 vEncSample->WaitForEOS();
504 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
505 }
506 }
507
508 /**
509 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0130
510 * @tc.name : h265 buffer 相邻参考模式分层编码 时域gop size为任意合法值
511 * @tc.desc : function test
512 */
513 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0130, TestSize.Level1)
514 {
515 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
516 auto vEncSample = make_unique<VEncAPI11Sample>();
517 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0130.h265";
518 vEncSample->INP_DIR = INP_DIR_720;
519 vEncSample->DEFAULT_WIDTH = 1280;
520 vEncSample->DEFAULT_HEIGHT = 720;
521 vEncSample->DEFAULT_FRAME_RATE = 30;
522 vEncSample->TEMPORAL_ENABLE = true;
523 vEncSample->TEMPORAL_CONFIG = true;
524 int32_t temporalGopSize = 6;
525 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
526 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
527 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
528 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
529 vEncSample->WaitForEOS();
530 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
531 }
532 }
533
534 /**
535 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0140
536 * @tc.name : h265 buffer 跨帧参考模式分层编码 时域gop size为8
537 * @tc.desc : function test
538 */
539 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0140, TestSize.Level1)
540 {
541 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
542 auto vEncSample = make_unique<VEncAPI11Sample>();
543 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0140.h265";
544 vEncSample->INP_DIR = INP_DIR_720;
545 vEncSample->DEFAULT_WIDTH = 1280;
546 vEncSample->DEFAULT_HEIGHT = 720;
547 vEncSample->DEFAULT_FRAME_RATE = 30;
548 vEncSample->TEMPORAL_ENABLE = true;
549 vEncSample->TEMPORAL_CONFIG = true;
550 vEncSample->TEMPORAL_JUMP_MODE = true;
551 int32_t temporalGopSize = 8;
552 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
553 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
554 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
555 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
556 vEncSample->WaitForEOS();
557 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
558 }
559 }
560
561 /**
562 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0150
563 * @tc.name : h265 surf 相邻参考模式分层编码 时域gop size为任意合法值
564 * @tc.desc : function test
565 */
566 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0150, TestSize.Level1)
567 {
568 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
569 auto vEncSample = make_unique<VEncAPI11Sample>();
570 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0150.h265";
571 vEncSample->INP_DIR = INP_DIR_720;
572 vEncSample->DEFAULT_WIDTH = 1280;
573 vEncSample->DEFAULT_HEIGHT = 720;
574 vEncSample->DEFAULT_FRAME_RATE = 30;
575 vEncSample->SURF_INPUT = true;
576 vEncSample->TEMPORAL_ENABLE = true;
577 vEncSample->TEMPORAL_CONFIG = true;
578 int32_t temporalGopSize = 9;
579 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
580 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
581 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
582 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
583 vEncSample->WaitForEOS();
584 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
585 }
586 }
587
588 /**
589 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0160
590 * @tc.name : h265 surf 跨帧参考模式分层编码 时域gop size为12
591 * @tc.desc : function test
592 */
593 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0160, TestSize.Level1)
594 {
595 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
596 auto vEncSample = make_unique<VEncAPI11Sample>();
597 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0160.h265";
598 vEncSample->INP_DIR = INP_DIR_720;
599 vEncSample->DEFAULT_WIDTH = 1280;
600 vEncSample->DEFAULT_HEIGHT = 720;
601 vEncSample->DEFAULT_FRAME_RATE = 30;
602 vEncSample->SURF_INPUT = true;
603 vEncSample->TEMPORAL_ENABLE = true;
604 vEncSample->TEMPORAL_CONFIG = true;
605 vEncSample->TEMPORAL_JUMP_MODE = true;
606 int32_t temporalGopSize = 12;
607 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
608 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
609 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
610 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
611 vEncSample->WaitForEOS();
612 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
613 }
614 }
615
616 /**
617 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0170
618 * @tc.name : h265 surf分层编码过程中强制I帧,检查相邻分层结构是否刷新
619 * @tc.desc : function test
620 */
621 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0170, TestSize.Level1)
622 {
623 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
624 auto vEncSample = make_unique<VEncAPI11Sample>();
625 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0170.h265";
626 vEncSample->INP_DIR = INP_DIR_720;
627 vEncSample->DEFAULT_WIDTH = 1280;
628 vEncSample->DEFAULT_HEIGHT = 720;
629 vEncSample->DEFAULT_FRAME_RATE = 30;
630 vEncSample->SURF_INPUT = true;
631 vEncSample->TEMPORAL_ENABLE = true;
632 vEncSample->TEMPORAL_CONFIG = true;
633 int32_t temporalGopSize = 3;
634 vEncSample->enableForceIDR = true;
635 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
636 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
637 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
638 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
639 vEncSample->WaitForEOS();
640 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
641 }
642 }
643
644 /**
645 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0180
646 * @tc.name : h265 surf分层编码过程中强制I帧,检查跨帧分层结构是否刷新
647 * @tc.desc : function test
648 */
649 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0180, TestSize.Level1)
650 {
651 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
652 auto vEncSample = make_unique<VEncAPI11Sample>();
653 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0180.h265";
654 vEncSample->INP_DIR = INP_DIR_720;
655 vEncSample->DEFAULT_WIDTH = 1280;
656 vEncSample->DEFAULT_HEIGHT = 720;
657 vEncSample->DEFAULT_FRAME_RATE = 30;
658 vEncSample->SURF_INPUT = true;
659 vEncSample->TEMPORAL_ENABLE = true;
660 vEncSample->TEMPORAL_CONFIG = true;
661 vEncSample->TEMPORAL_JUMP_MODE = true;
662 int32_t temporalGopSize = 4;
663 vEncSample->enableForceIDR = true;
664 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
665 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
666 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
667 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
668 vEncSample->WaitForEOS();
669 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
670 }
671 }
672
673 /**
674 * @tc.number : LTR_FUNC_001
675 * @tc.name : LTR count设置为非法值
676 * @tc.desc : function test
677 */
678 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_001, TestSize.Level0)
679 {
680 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
681 auto vEncSample = make_unique<VEncAPI11Sample>();
682 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_001.h265";
683 vEncSample->INP_DIR = INP_DIR_720;
684 vEncSample->DEFAULT_WIDTH = 1280;
685 vEncSample->DEFAULT_HEIGHT = 720;
686 vEncSample->DEFAULT_FRAME_RATE = 30;
687 vEncSample->SURF_INPUT = true;
688 vEncSample->ltrParam.enableUseLtr = true;
689 vEncSample->enableLTR = true;
690 vEncSample->ltrParam.ltrCount = 0;
691 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
692 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
693 ASSERT_EQ(AV_ERR_INVALID_VAL, vEncSample->ConfigureVideoEncoder());
694 ASSERT_EQ(AV_ERR_OK, vEncSample->Reset());
695 vEncSample->ltrParam.ltrCount = 11;
696 ASSERT_EQ(AV_ERR_INVALID_VAL, vEncSample->ConfigureVideoEncoder());
697 }
698 }
699
700 /**
701 * @tc.number : LTR_FUNC_002
702 * @tc.name : 能力查询是否支持LTR
703 * @tc.desc : function test
704 */
705 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_002, TestSize.Level0)
706 {
707 OH_AVCapability *capa = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
708 const char* codecName = OH_AVCapability_GetName(capa);
709 if (!strcmp(codecName, "OMX.hisi.video.encoder.hevc")) {
710 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capa, VIDEO_ENCODER_LONG_TERM_REFERENCE));
711 } else {
712 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capa, VIDEO_ENCODER_LONG_TERM_REFERENCE));
713 }
714 }
715
716 /**
717 * @tc.number : LTR_FUNC_004
718 * @tc.name : h265 surf模式 count 1 ,mark 第5帧 ,后续帧标记use
719 * @tc.desc : function test
720 */
721 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_004, TestSize.Level0)
722 {
723 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
724 auto vEncSample = make_unique<VEncAPI11Sample>();
725 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_004.h265";
726 vEncSample->INP_DIR = INP_DIR_720;
727 vEncSample->DEFAULT_WIDTH = 1280;
728 vEncSample->DEFAULT_HEIGHT = 720;
729 vEncSample->DEFAULT_FRAME_RATE = 30;
730 vEncSample->SURF_INPUT = true;
731 vEncSample->ltrParam.enableUseLtr = true;
732 vEncSample->enableLTR = true;
733 vEncSample->ltrParam.ltrCount = 1;
734 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
735 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
736 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
737 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
738 vEncSample->WaitForEOS();
739 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
740 }
741 }
742
743 /**
744 * @tc.number : LTR_FUNC_005
745 * @tc.name : h265 surf模式 count 1 ,mark 第5帧 ,后续帧标记use 但poc错误
746 * @tc.desc : function test
747 */
748 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_005, TestSize.Level1)
749 {
750 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
751 auto vEncSample = make_unique<VEncAPI11Sample>();
752 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_005.h265";
753 vEncSample->INP_DIR = INP_DIR_720;
754 vEncSample->DEFAULT_WIDTH = 1280;
755 vEncSample->DEFAULT_HEIGHT = 720;
756 vEncSample->DEFAULT_FRAME_RATE = 30;
757 vEncSample->SURF_INPUT = true;
758 vEncSample->ltrParam.enableUseLtr = true;
759 vEncSample->enableLTR = true;
760 vEncSample->ltrParam.useBadLtr = true;
761 vEncSample->ltrParam.ltrCount = 1;
762 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
763 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
764 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
765 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
766 vEncSample->WaitForEOS();
767 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
768 }
769 }
770
771 /**
772 * @tc.number : LTR_FUNC_006
773 * @tc.name : h265 surf模式 count 10 ,每隔5帧mark一帧,每个参考帧后面都正确use当前参考帧
774 * @tc.desc : function test
775 */
776 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_006, TestSize.Level0)
777 {
778 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
779 auto vEncSample = make_unique<VEncAPI11Sample>();
780 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_006.h265";
781 vEncSample->INP_DIR = INP_DIR_720;
782 vEncSample->DEFAULT_WIDTH = 1280;
783 vEncSample->DEFAULT_HEIGHT = 720;
784 vEncSample->DEFAULT_FRAME_RATE = 30;
785 vEncSample->SURF_INPUT = true;
786 vEncSample->ltrParam.enableUseLtr = true;
787 vEncSample->enableLTR = true;
788 vEncSample->ltrParam.ltrCount = 10;
789 vEncSample->ltrParam.ltrInterval = 5;
790 vEncSample->ltrParam.useLtrIndex = 1;
791 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
792 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
793 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
794 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
795 vEncSample->WaitForEOS();
796 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
797 }
798 }
799
800 /**
801 * @tc.number : LTR_FUNC_007
802 * @tc.name : h265 surf模式 count 10 ,每隔5帧mark一帧,不设置use帧
803 * @tc.desc : function test
804 */
805 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_007, TestSize.Level2)
806 {
807 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
808 auto vEncSample = make_unique<VEncAPI11Sample>();
809 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_007.h265";
810 vEncSample->INP_DIR = INP_DIR_720;
811 vEncSample->DEFAULT_WIDTH = 1280;
812 vEncSample->DEFAULT_HEIGHT = 720;
813 vEncSample->DEFAULT_FRAME_RATE = 30;
814 vEncSample->SURF_INPUT = true;
815 vEncSample->ltrParam.enableUseLtr = false;
816 vEncSample->enableLTR = true;
817 vEncSample->ltrParam.ltrCount = 10;
818 vEncSample->ltrParam.ltrInterval = 5;
819 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
820 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
821 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
822 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
823 vEncSample->WaitForEOS();
824 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
825 }
826 }
827
828 /**
829 * @tc.number : LTR_FUNC_008
830 * @tc.name : h265 surf模式 count 2 ,每隔5帧mark一帧,所有帧都use第一个参考帧
831 * @tc.desc : function test
832 */
833 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_008, TestSize.Level1)
834 {
835 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
836 auto vEncSample = make_unique<VEncAPI11Sample>();
837 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_008.h265";
838 vEncSample->INP_DIR = INP_DIR_720;
839 vEncSample->DEFAULT_WIDTH = 1280;
840 vEncSample->DEFAULT_HEIGHT = 720;
841 vEncSample->DEFAULT_FRAME_RATE = 30;
842 vEncSample->SURF_INPUT = true;
843 vEncSample->ltrParam.enableUseLtr = true;
844 vEncSample->enableLTR = true;
845 vEncSample->ltrParam.ltrCount = 2;
846 vEncSample->ltrParam.ltrInterval = 5;
847 vEncSample->ltrParam.useLtrIndex = 0;
848 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
849 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
850 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
851 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
852 vEncSample->WaitForEOS();
853 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
854 }
855 }
856
857 /**
858 * @tc.number : LTR_FUNC_009
859 * @tc.name : h265 surf模式 ,不设置count ,mark一个参考帧 ,一个被标记为use ,poc正确
860 * @tc.desc : function test
861 */
862 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_009, TestSize.Level2)
863 {
864 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
865 auto vEncSample = make_unique<VEncAPI11Sample>();
866 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_009.h265";
867 vEncSample->INP_DIR = INP_DIR_720;
868 vEncSample->DEFAULT_WIDTH = 1280;
869 vEncSample->DEFAULT_HEIGHT = 720;
870 vEncSample->DEFAULT_FRAME_RATE = 30;
871 vEncSample->ltrParam.ltrCount = -1;
872 vEncSample->SURF_INPUT = true;
873 vEncSample->ltrParam.enableUseLtr = true;
874 vEncSample->enableLTR = true;
875 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
876 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
877 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
878 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
879 vEncSample->WaitForEOS();
880 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
881 }
882 }
883
884 /**
885 * @tc.number : LTR_FUNC_010
886 * @tc.name : h265 surf模式,分层编码 和LTR同时设置
887 * @tc.desc : function test
888 */
889 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_010, TestSize.Level1)
890 {
891 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
892 auto vEncSample = make_unique<VEncAPI11Sample>();
893 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_010.h265";
894 vEncSample->INP_DIR = INP_DIR_720;
895 vEncSample->DEFAULT_WIDTH = 1280;
896 vEncSample->DEFAULT_HEIGHT = 720;
897 vEncSample->DEFAULT_FRAME_RATE = 30;
898 vEncSample->SURF_INPUT = true;
899 vEncSample->enableLTR = true;
900 vEncSample->TEMPORAL_ENABLE = true;
901 vEncSample->TEMPORAL_DEFAULT = true;
902 int32_t temporalGopSize = 0;
903 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
904 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
905 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
906 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
907 vEncSample->WaitForEOS();
908 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
909 }
910 }
911
912 /**
913 * @tc.number : LTR_FUNC_011
914 * @tc.name : count为5,h264 buffer,每隔5帧mark参考帧,且都被正确use
915 * @tc.desc : function test
916 */
917 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_011, TestSize.Level0)
918 {
919 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
920 auto vEncApi11Sample = make_unique<VEncAPI11Sample>();
921 vEncApi11Sample->INP_DIR = INP_DIR_720;
922 vEncApi11Sample->DEFAULT_WIDTH = 1280;
923 vEncApi11Sample->DEFAULT_HEIGHT = 720;
924 vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
925 vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
926 vEncApi11Sample->SURF_INPUT = false;
927 vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
928 vEncApi11Sample->OUT_DIR = "/data/test/media/LTR_FUNC_011.h264";
929 vEncApi11Sample->enableLTR = true;
930 vEncApi11Sample->ltrParam.enableUseLtr = true;
931 vEncApi11Sample->ltrParam.ltrCount = 5;
932 vEncApi11Sample->ltrParam.ltrInterval = 5;
933 vEncApi11Sample->ltrParam.useLtrIndex = 1;
934 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecName));
935 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
936 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
937 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
938 vEncApi11Sample->WaitForEOS();
939 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->errCount);
940 }
941 }
942
943 /**
944 * @tc.number : LTR_FUNC_012
945 * @tc.name : h264 surf模式 每隔5帧mark参考帧
946 * @tc.desc : function test
947 */
948 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_012, TestSize.Level0)
949 {
950 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
951 auto vEncSample = make_unique<VEncAPI11Sample>();
952 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_012.h265";
953 vEncSample->INP_DIR = INP_DIR_720;
954 vEncSample->DEFAULT_WIDTH = 1280;
955 vEncSample->DEFAULT_HEIGHT = 720;
956 vEncSample->DEFAULT_FRAME_RATE = 30;
957 vEncSample->SURF_INPUT = true;
958 vEncSample->enableLTR = true;
959 vEncSample->ltrParam.ltrCount = 5;
960 vEncSample->ltrParam.ltrInterval = 5;
961 vEncSample->ltrParam.enableUseLtr = true;
962 vEncSample->ltrParam.useLtrIndex = 1;
963 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
964 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
965 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
966 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
967 vEncSample->WaitForEOS();
968 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
969 }
970 }
971
972 /**
973 * @tc.number : LTR_FUNC_013
974 * @tc.name : count为5,h265 buffer,每隔5帧mark参考帧,且都被正确use
975 * @tc.desc : function test
976 */
977 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_013, TestSize.Level0)
978 {
979 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
980 auto vEncApi11Sample = make_unique<VEncAPI11Sample>();
981 vEncApi11Sample->INP_DIR = INP_DIR_720;
982 vEncApi11Sample->DEFAULT_WIDTH = 1280;
983 vEncApi11Sample->DEFAULT_HEIGHT = 720;
984 vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
985 vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
986 vEncApi11Sample->SURF_INPUT = false;
987 vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
988 vEncApi11Sample->OUT_DIR = "/data/test/media/LTR_FUNC_013.h265";
989 vEncApi11Sample->enableLTR = true;
990 vEncApi11Sample->ltrParam.enableUseLtr = true;
991 vEncApi11Sample->ltrParam.ltrCount = 5;
992 vEncApi11Sample->ltrParam.ltrInterval = 5;
993 vEncApi11Sample->ltrParam.useLtrIndex = 1;
994 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecNameHEVC));
995 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
996 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
997 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
998 vEncApi11Sample->WaitForEOS();
999 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->errCount);
1000 }
1001 }
1002
1003 /**
1004 * @tc.number : LTR_FUNC_014
1005 * @tc.name : h265 surf模式 每隔5帧mark参考帧
1006 * @tc.desc : function test
1007 */
1008 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_014, TestSize.Level0)
1009 {
1010 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1011 auto vEncSample = make_unique<VEncAPI11Sample>();
1012 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_014.h265";
1013 vEncSample->INP_DIR = INP_DIR_720;
1014 vEncSample->DEFAULT_WIDTH = 1280;
1015 vEncSample->DEFAULT_HEIGHT = 720;
1016 vEncSample->DEFAULT_FRAME_RATE = 30;
1017 vEncSample->SURF_INPUT = true;
1018 vEncSample->enableLTR = true;
1019 vEncSample->ltrParam.ltrCount = 5;
1020 vEncSample->ltrParam.ltrInterval = 5;
1021 vEncSample->ltrParam.enableUseLtr = true;
1022 vEncSample->ltrParam.useLtrIndex = 1;
1023 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
1024 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1025 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
1026 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1027 vEncSample->WaitForEOS();
1028 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
1029 }
1030 }
1031
1032 /**
1033 * @tc.number : LTR_FUNC_015
1034 * @tc.name : count为5,h264 buffer,每隔5帧mark参考帧,且use自己
1035 * @tc.desc : function test
1036 */
1037 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_015, TestSize.Level1)
1038 {
1039 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1040 auto vEncApi11Sample = make_unique<VEncAPI11Sample>();
1041 vEncApi11Sample->INP_DIR = INP_DIR_720;
1042 vEncApi11Sample->DEFAULT_WIDTH = 1280;
1043 vEncApi11Sample->DEFAULT_HEIGHT = 720;
1044 vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
1045 vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
1046 vEncApi11Sample->SURF_INPUT = false;
1047 vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
1048 vEncApi11Sample->OUT_DIR = "/data/test/media/LTR_FUNC_015.h264";
1049 vEncApi11Sample->ltrParam.enableUseLtr = true;
1050 vEncApi11Sample->ltrParam.markAndUseSelf = true;
1051 vEncApi11Sample->ltrParam.ltrCount = 5;
1052 vEncApi11Sample->ltrParam.ltrInterval = 5;
1053 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecName));
1054 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
1055 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
1056 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
1057 vEncApi11Sample->WaitForEOS();
1058 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->errCount);
1059 }
1060 }
1061
1062 /**
1063 * @tc.number : LTR_FUNC_016
1064 * @tc.name : count为5,h265 buffer,每隔5帧mark参考帧,且use自己
1065 * @tc.desc : function test
1066 */
1067 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_016, TestSize.Level1)
1068 {
1069 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1070 auto vEncApi11Sample = make_unique<VEncAPI11Sample>();
1071 vEncApi11Sample->INP_DIR = INP_DIR_720;
1072 vEncApi11Sample->DEFAULT_WIDTH = 1280;
1073 vEncApi11Sample->DEFAULT_HEIGHT = 720;
1074 vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
1075 vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
1076 vEncApi11Sample->SURF_INPUT = false;
1077 vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
1078 vEncApi11Sample->OUT_DIR = "/data/test/media/LTR_FUNC_016.h265";
1079 vEncApi11Sample->ltrParam.enableUseLtr = true;
1080 vEncApi11Sample->ltrParam.markAndUseSelf = true;
1081 vEncApi11Sample->ltrParam.ltrCount = 5;
1082 vEncApi11Sample->ltrParam.ltrInterval = 5;
1083 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecNameHEVC));
1084 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
1085 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
1086 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
1087 vEncApi11Sample->WaitForEOS();
1088 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->errCount);
1089 }
1090 }
1091
1092 /**
1093 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_0100
1094 * @tc.name : uniformly temporal buffer 264 encode,tgop 2
1095 * @tc.desc : func test
1096 */
1097 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_0100, TestSize.Level0)
1098 {
1099 auto vEncSample = make_unique<VEncAPI11Sample>();
1100 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_0100.h264";
1101 vEncSample->INP_DIR = INP_DIR_720;
1102 vEncSample->DEFAULT_WIDTH = 1280;
1103 vEncSample->DEFAULT_HEIGHT = 720;
1104 vEncSample->DEFAULT_FRAME_RATE = 30;
1105 vEncSample->SURF_INPUT = false;
1106 vEncSample->TEMPORAL_ENABLE = true;
1107 vEncSample->TEMPORAL_UNIFORMLY = true;
1108 int32_t temporalGopSize = 2;
1109 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
1110 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1111 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1112 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1113 vEncSample->WaitForEOS();
1114 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
1115 }
1116
1117 /**
1118 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_0200
1119 * @tc.name : uniformly temporal buffer 264 encode,tgop 3
1120 * @tc.desc : func test
1121 */
1122 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_0200, TestSize.Level1)
1123 {
1124 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1125 auto vEncSample = make_unique<VEncAPI11Sample>();
1126 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_0200.h264";
1127 vEncSample->INP_DIR = INP_DIR_720;
1128 vEncSample->DEFAULT_WIDTH = 1280;
1129 vEncSample->DEFAULT_HEIGHT = 720;
1130 vEncSample->DEFAULT_FRAME_RATE = 30;
1131 vEncSample->SURF_INPUT = false;
1132 vEncSample->TEMPORAL_ENABLE = true;
1133 vEncSample->TEMPORAL_UNIFORMLY = true;
1134 int32_t temporalGopSize = 3;
1135 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
1136 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1137 ASSERT_EQ(AV_ERR_INVALID_VAL, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1138 }
1139 }
1140
1141 /**
1142 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_0300
1143 * @tc.name : uniformly temporal buffer 265 encode,tgop 2
1144 * @tc.desc : func test
1145 */
1146 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_0300, TestSize.Level1)
1147 {
1148 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1149 auto vEncSample = make_unique<VEncAPI11Sample>();
1150 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_0300.h265";
1151 vEncSample->INP_DIR = INP_DIR_720;
1152 vEncSample->DEFAULT_WIDTH = 1280;
1153 vEncSample->DEFAULT_HEIGHT = 720;
1154 vEncSample->DEFAULT_FRAME_RATE = 30;
1155 vEncSample->SURF_INPUT = false;
1156 vEncSample->TEMPORAL_ENABLE = true;
1157 vEncSample->TEMPORAL_UNIFORMLY = true;
1158 int32_t temporalGopSize = 2;
1159 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
1160 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1161 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1162 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1163 vEncSample->WaitForEOS();
1164 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
1165 }
1166 }
1167
1168 /**
1169 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_0400
1170 * @tc.name : uniformly temporal buffer 265 encode,tgop 4
1171 * @tc.desc : func test
1172 */
1173 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_0400, TestSize.Level1)
1174 {
1175 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1176 auto vEncSample = make_unique<VEncAPI11Sample>();
1177 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_0400.h265";
1178 vEncSample->INP_DIR = INP_DIR_720;
1179 vEncSample->DEFAULT_WIDTH = 1280;
1180 vEncSample->DEFAULT_HEIGHT = 720;
1181 vEncSample->DEFAULT_FRAME_RATE = 30;
1182 vEncSample->SURF_INPUT = false;
1183 vEncSample->TEMPORAL_ENABLE = true;
1184 vEncSample->TEMPORAL_UNIFORMLY = true;
1185 int32_t temporalGopSize = 4;
1186 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
1187 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1188 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1189 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1190 vEncSample->WaitForEOS();
1191 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
1192 }
1193 }
1194
1195 /**
1196 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_0500
1197 * @tc.name : uniformly temporal buffer 265 encode,tgop 5
1198 * @tc.desc : func test
1199 */
1200 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_0500, TestSize.Level1)
1201 {
1202 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1203 auto vEncSample = make_unique<VEncAPI11Sample>();
1204 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_0500.h265";
1205 vEncSample->INP_DIR = INP_DIR_720;
1206 vEncSample->DEFAULT_WIDTH = 1280;
1207 vEncSample->DEFAULT_HEIGHT = 720;
1208 vEncSample->DEFAULT_FRAME_RATE = 30;
1209 vEncSample->SURF_INPUT = false;
1210 vEncSample->TEMPORAL_ENABLE = true;
1211 vEncSample->TEMPORAL_UNIFORMLY = true;
1212 int32_t temporalGopSize = 5;
1213 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
1214 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1215 ASSERT_EQ(AV_ERR_INVALID_VAL, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1216 }
1217 }
1218
1219 /**
1220 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_0600
1221 * @tc.name : uniformly temporal surface 264 encode,tgop 2
1222 * @tc.desc : func test
1223 */
1224 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_0600, TestSize.Level0)
1225 {
1226 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1227 auto vEncSample = make_unique<VEncAPI11Sample>();
1228 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_0600.h264";
1229 vEncSample->INP_DIR = INP_DIR_720;
1230 vEncSample->DEFAULT_WIDTH = 1280;
1231 vEncSample->DEFAULT_HEIGHT = 720;
1232 vEncSample->DEFAULT_FRAME_RATE = 30;
1233 vEncSample->SURF_INPUT = true;
1234 vEncSample->TEMPORAL_ENABLE = true;
1235 vEncSample->TEMPORAL_UNIFORMLY = true;
1236 int32_t temporalGopSize = 2;
1237 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
1238 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1239 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1240 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1241 vEncSample->WaitForEOS();
1242 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
1243 }
1244 }
1245
1246 /**
1247 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_0700
1248 * @tc.name : uniformly temporal surface 264 encode,tgop 3
1249 * @tc.desc : func test
1250 */
1251 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_0700, TestSize.Level1)
1252 {
1253 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1254 auto vEncSample = make_unique<VEncAPI11Sample>();
1255 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_0700.h264";
1256 vEncSample->INP_DIR = INP_DIR_720;
1257 vEncSample->DEFAULT_WIDTH = 1280;
1258 vEncSample->DEFAULT_HEIGHT = 720;
1259 vEncSample->DEFAULT_FRAME_RATE = 30;
1260 vEncSample->SURF_INPUT = true;
1261 vEncSample->TEMPORAL_ENABLE = true;
1262 vEncSample->TEMPORAL_UNIFORMLY = true;
1263 int32_t temporalGopSize = 3;
1264 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
1265 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1266 ASSERT_EQ(AV_ERR_INVALID_VAL, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1267 }
1268 }
1269
1270 /**
1271 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_0800
1272 * @tc.name : uniformly temporal surface 265 encode,tgop 2
1273 * @tc.desc : func test
1274 */
1275 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_0800, TestSize.Level1)
1276 {
1277 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1278 auto vEncSample = make_unique<VEncAPI11Sample>();
1279 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_0800.h265";
1280 vEncSample->INP_DIR = INP_DIR_720;
1281 vEncSample->DEFAULT_WIDTH = 1280;
1282 vEncSample->DEFAULT_HEIGHT = 720;
1283 vEncSample->DEFAULT_FRAME_RATE = 30;
1284 vEncSample->SURF_INPUT = true;
1285 vEncSample->TEMPORAL_ENABLE = true;
1286 vEncSample->TEMPORAL_UNIFORMLY = true;
1287 int32_t temporalGopSize = 2;
1288 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
1289 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1290 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1291 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1292 vEncSample->WaitForEOS();
1293 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
1294 }
1295 }
1296
1297 /**
1298 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_0900
1299 * @tc.name : uniformly temporal surface 265 encode,tgop 4
1300 * @tc.desc : func test
1301 */
1302 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_0900, TestSize.Level1)
1303 {
1304 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1305 auto vEncSample = make_unique<VEncAPI11Sample>();
1306 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_0900.h265";
1307 vEncSample->INP_DIR = INP_DIR_720;
1308 vEncSample->DEFAULT_WIDTH = 1280;
1309 vEncSample->DEFAULT_HEIGHT = 720;
1310 vEncSample->DEFAULT_FRAME_RATE = 30;
1311 vEncSample->SURF_INPUT = true;
1312 vEncSample->TEMPORAL_ENABLE = true;
1313 vEncSample->TEMPORAL_UNIFORMLY = true;
1314 int32_t temporalGopSize = 4;
1315 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
1316 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1317 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1318 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1319 vEncSample->WaitForEOS();
1320 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
1321 }
1322 }
1323
1324 /**
1325 * @tc.number : VIDEO_UNIFORMLY_ENCODE_FUNCTION_1000
1326 * @tc.name : uniformly temporal buffer 265 encode,tgop 5
1327 * @tc.desc : func test
1328 */
1329 HWTEST_F(HwEncTemporalNdkTest, VIDEO_UNIFORMLY_ENCODE_FUNCTION_1000, TestSize.Level1)
1330 {
1331 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1332 auto vEncSample = make_unique<VEncAPI11Sample>();
1333 vEncSample->OUT_DIR = "/data/test/media/VIDEO_UNIFORMLY_ENCODE_FUNCTION_1000.h265";
1334 vEncSample->INP_DIR = INP_DIR_720;
1335 vEncSample->DEFAULT_WIDTH = 1280;
1336 vEncSample->DEFAULT_HEIGHT = 720;
1337 vEncSample->DEFAULT_FRAME_RATE = 30;
1338 vEncSample->SURF_INPUT = true;
1339 vEncSample->TEMPORAL_ENABLE = true;
1340 vEncSample->TEMPORAL_UNIFORMLY = true;
1341 int32_t temporalGopSize = 5;
1342 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
1343 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1344 ASSERT_EQ(AV_ERR_INVALID_VAL, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
1345 }
1346 }
1347 } // namespace