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 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_API_0020, TestSize.Level2)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 ASSERT_EQ(ret, AV_ERR_OK);
123 }
124
125 /**
126 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0030
127 * @tc.name : OH_MD_KEY_VIDEO_ENCODER_TEMPORAL_GOP_SIZE para error
128 * @tc.desc : api test
129 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_API_0030, TestSize.Level2)130 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_API_0030, TestSize.Level2)
131 {
132 OH_AVErrCode ret = AV_ERR_OK;
133 venc_ = OH_VideoEncoder_CreateByMime(OH_AVCODEC_MIMETYPE_VIDEO_AVC);
134 ASSERT_NE(nullptr, venc_);
135 format = OH_AVFormat_Create();
136 ASSERT_NE(nullptr, format);
137
138 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_WIDTH, DEFAULT_WIDTH);
139 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_HEIGHT, DEFAULT_HEIGHT);
140 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_PIXEL_FORMAT, DEFAULT_PIX_FMT);
141 (void)OH_AVFormat_SetDoubleValue(format, OH_MD_KEY_FRAME_RATE, DEFAULT_FRAME_RATE);
142 (void)OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, DEFAULT_BITRATE);
143 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_I_FRAME_INTERVAL, DEFAULT_KEY_FRAME_INTERVAL);
144 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_VIDEO_ENCODER_ENABLE_TEMPORAL_SCALABILITY, 1);
145 (void)OH_AVFormat_SetIntValue(format, OH_MD_KEY_VIDEO_ENCODER_TEMPORAL_GOP_SIZE, 30);
146 ret = OH_VideoEncoder_Configure(venc_, format);
147 ASSERT_EQ(ret, AV_ERR_OK);
148 }
149
150 /**
151 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0010
152 * @tc.name : 调用使能接口
153 * @tc.desc : api test
154 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0010, TestSize.Level1)155 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0010, TestSize.Level1)
156 {
157 int32_t temporalGopSize = 2;
158 if (!access("/system/lib64/media/", 0)) {
159 auto vEncSample = make_unique<VEncAPI11Sample>();
160 cout << "running on phone=========="<< endl;
161 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
162 vEncSample->TEMPORAL_ENABLE = true;
163 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
164 } else {
165 auto vEncSample = make_unique<VEncAPI11Sample>();
166 cout << "running on rk=========="<< endl;
167 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
168 vEncSample->TEMPORAL_ENABLE = true;
169 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
170 }
171 }
172
173 /**
174 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0020
175 * @tc.name : 未使能,配置相邻模式分层编码,h264 buffer
176 * @tc.desc : api test
177 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0020, TestSize.Level1)178 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0020, TestSize.Level1)
179 {
180 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
181 auto vEncSample = make_unique<VEncAPI11Sample>();
182 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0020.h264";
183 vEncSample->INP_DIR = INP_DIR_720;
184 vEncSample->DEFAULT_WIDTH = 1280;
185 vEncSample->DEFAULT_HEIGHT = 720;
186 vEncSample->DEFAULT_FRAME_RATE = 30;
187 vEncSample->TEMPORAL_ENABLE = false;
188 vEncSample->TEMPORAL_CONFIG = true;
189 int32_t temporalGopSize = 2;
190 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
191 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
192 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
193 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
194 vEncSample->WaitForEOS();
195 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
196 }
197 }
198
199 /**
200 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0030
201 * @tc.name : 未使能,配置相邻模式分层编码,h265 surf
202 * @tc.desc : api test
203 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0030, TestSize.Level1)204 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0030, TestSize.Level1)
205 {
206 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
207 auto vEncSample = make_unique<VEncAPI11Sample>();
208 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0030.h265";
209 vEncSample->INP_DIR = INP_DIR_720;
210 vEncSample->DEFAULT_WIDTH = 1280;
211 vEncSample->DEFAULT_HEIGHT = 720;
212 vEncSample->DEFAULT_FRAME_RATE = 30;
213 vEncSample->SURF_INPUT = true;
214 vEncSample->TEMPORAL_ENABLE = false;
215 vEncSample->TEMPORAL_CONFIG = true;
216 int32_t temporalGopSize = 2;
217 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
218 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
219 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
220 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
221 vEncSample->WaitForEOS();
222 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
223 }
224 }
225
226 /**
227 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0040
228 * @tc.name : 配置跨帧模式分层编码,默认gopsize,h265 surf
229 * @tc.desc : api test
230 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0040, TestSize.Level1)231 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0040, TestSize.Level1)
232 {
233 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
234 auto vEncSample = make_unique<VEncAPI11Sample>();
235 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0040.h265";
236 vEncSample->INP_DIR = INP_DIR_720;
237 vEncSample->DEFAULT_WIDTH = 1280;
238 vEncSample->DEFAULT_HEIGHT = 720;
239 vEncSample->DEFAULT_FRAME_RATE = 30;
240 vEncSample->SURF_INPUT = true;
241 vEncSample->TEMPORAL_ENABLE = true;
242 vEncSample->TEMPORAL_DEFAULT = true;
243 vEncSample->TEMPORAL_JUMP_MODE = true;
244 int32_t temporalGopSize = 0;
245 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
246 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
247 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
248 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
249 vEncSample->WaitForEOS();
250 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
251 }
252 }
253
254 /**
255 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0440
256 * @tc.name : 配置相邻模式分层编码,默认gopsize,h265 surf
257 * @tc.desc : api test
258 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0440, TestSize.Level1)259 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0440, TestSize.Level1)
260 {
261 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
262 auto vEncSample = make_unique<VEncAPI11Sample>();
263 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0440.h265";
264 vEncSample->INP_DIR = INP_DIR_720;
265 vEncSample->DEFAULT_WIDTH = 1280;
266 vEncSample->DEFAULT_HEIGHT = 720;
267 vEncSample->DEFAULT_FRAME_RATE = 30;
268 vEncSample->SURF_INPUT = true;
269 vEncSample->TEMPORAL_ENABLE = true;
270 vEncSample->TEMPORAL_DEFAULT = true;
271 int32_t temporalGopSize = 0;
272 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
273 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
274 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
275 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
276 vEncSample->WaitForEOS();
277 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
278 }
279 }
280
281 /**
282 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0050
283 * @tc.name : h265,surf相邻参考模式分层编码。时域gop size为2
284 * @tc.desc : function test
285 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0050, TestSize.Level1)286 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0050, TestSize.Level1)
287 {
288 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
289 auto vEncSample = make_unique<VEncAPI11Sample>();
290 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0050.h265";
291 vEncSample->INP_DIR = INP_DIR_720;
292 vEncSample->DEFAULT_WIDTH = 1280;
293 vEncSample->DEFAULT_HEIGHT = 720;
294 vEncSample->DEFAULT_FRAME_RATE = 30;
295 vEncSample->SURF_INPUT = true;
296 vEncSample->TEMPORAL_ENABLE = true;
297 vEncSample->TEMPORAL_CONFIG = true;
298 int32_t temporalGopSize = 2;
299 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
300 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
301 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
302 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
303 vEncSample->WaitForEOS();
304 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
305 }
306 }
307
308 /**
309 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0060
310 * @tc.name : h265,surf相邻参考模式分层编码。时域gop size为I帧间隔-1
311 * @tc.desc : function test
312 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0060, TestSize.Level1)313 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0060, TestSize.Level1)
314 {
315 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
316 auto vEncSample = make_unique<VEncAPI11Sample>();
317 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0060.h265";
318 vEncSample->INP_DIR = INP_DIR_720;
319 vEncSample->DEFAULT_WIDTH = 1280;
320 vEncSample->DEFAULT_HEIGHT = 720;
321 vEncSample->DEFAULT_FRAME_RATE = 30;
322 vEncSample->SURF_INPUT = true;
323 vEncSample->TEMPORAL_ENABLE = true;
324 vEncSample->TEMPORAL_CONFIG = true;
325
326 int32_t temporalGopSize = vEncSample->DEFAULT_FRAME_RATE-1;
327 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
328 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
329 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
330 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
331 vEncSample->WaitForEOS();
332 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
333 }
334 }
335
336 /**
337 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0070
338 * @tc.name : h265,surf跨帧参考模式分层编码。时域gop size为2
339 * @tc.desc : function test
340 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0070, TestSize.Level1)341 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0070, TestSize.Level1)
342 {
343 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
344 auto vEncSample = make_unique<VEncAPI11Sample>();
345 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0070.h265";
346 vEncSample->INP_DIR = INP_DIR_720;
347 vEncSample->DEFAULT_WIDTH = 1280;
348 vEncSample->DEFAULT_HEIGHT = 720;
349 vEncSample->DEFAULT_FRAME_RATE = 30;
350 vEncSample->SURF_INPUT = true;
351 vEncSample->TEMPORAL_ENABLE = true;
352 vEncSample->TEMPORAL_CONFIG = true;
353 vEncSample->TEMPORAL_JUMP_MODE = true;
354 int32_t temporalGopSize = 2;
355 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
356 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
357 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
358 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
359 vEncSample->WaitForEOS();
360 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
361 }
362 }
363
364 /**
365 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0080
366 * @tc.name : h265,surf跨帧参考模式分层编码 时域gop size为I帧间隔-1
367 * @tc.desc : function test
368 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0080, TestSize.Level1)369 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0080, TestSize.Level1)
370 {
371 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
372 auto vEncSample = make_unique<VEncAPI11Sample>();
373 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0080.h265";
374 vEncSample->INP_DIR = INP_DIR_720;
375 vEncSample->DEFAULT_WIDTH = 1280;
376 vEncSample->DEFAULT_HEIGHT = 720;
377 vEncSample->DEFAULT_FRAME_RATE = 30;
378 vEncSample->SURF_INPUT = true;
379 vEncSample->TEMPORAL_ENABLE = true;
380 vEncSample->TEMPORAL_CONFIG = true;
381 vEncSample->TEMPORAL_JUMP_MODE = true;
382 int32_t temporalGopSize = vEncSample->DEFAULT_FRAME_RATE-1;
383 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
384 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
385 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
386 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
387 vEncSample->WaitForEOS();
388 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
389 }
390 }
391
392 /**
393 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0090
394 * @tc.name : h264 buffer 相邻参考模式分层编码 时域gop size为任意合法值
395 * @tc.desc : function test
396 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0090, TestSize.Level1)397 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0090, TestSize.Level1)
398 {
399 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
400 auto vEncSample = make_unique<VEncAPI11Sample>();
401 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0090.h264";
402 vEncSample->INP_DIR = INP_DIR_720;
403 vEncSample->DEFAULT_WIDTH = 1280;
404 vEncSample->DEFAULT_HEIGHT = 720;
405 vEncSample->DEFAULT_FRAME_RATE = 30;
406 vEncSample->TEMPORAL_ENABLE = true;
407 vEncSample->TEMPORAL_CONFIG = true;
408 int32_t temporalGopSize = 3;
409 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
410 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
411 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
412 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
413 vEncSample->WaitForEOS();
414 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
415 }
416 }
417
418 /**
419 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0100
420 * @tc.name : h264 buffer 跨帧参考模式分层编码 时域gop size为任意合法值
421 * @tc.desc : function test
422 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0100, TestSize.Level1)423 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0100, TestSize.Level1)
424 {
425 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
426 auto vEncSample = make_unique<VEncAPI11Sample>();
427 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0100.h264";
428 vEncSample->INP_DIR = INP_DIR_720;
429 vEncSample->DEFAULT_WIDTH = 1280;
430 vEncSample->DEFAULT_HEIGHT = 720;
431 vEncSample->DEFAULT_FRAME_RATE = 30;
432 vEncSample->TEMPORAL_ENABLE = true;
433 vEncSample->TEMPORAL_CONFIG = true;
434 vEncSample->TEMPORAL_JUMP_MODE = true;
435 int32_t temporalGopSize = 3;
436 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
437 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
438 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
439 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
440 vEncSample->WaitForEOS();
441 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
442 }
443 }
444
445 /**
446 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0110
447 * @tc.name : h264 surf 相邻参考模式分层编码 时域gop size为任意合法值
448 * @tc.desc : function test
449 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0110, TestSize.Level1)450 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0110, TestSize.Level1)
451 {
452 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
453 auto vEncSample = make_unique<VEncAPI11Sample>();
454 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0110.h264";
455 vEncSample->INP_DIR = INP_DIR_720;
456 vEncSample->DEFAULT_WIDTH = 1280;
457 vEncSample->DEFAULT_HEIGHT = 720;
458 vEncSample->DEFAULT_FRAME_RATE = 30;
459 vEncSample->SURF_INPUT = true;
460 vEncSample->TEMPORAL_ENABLE = true;
461 vEncSample->TEMPORAL_CONFIG = true;
462 int32_t temporalGopSize = 5;
463 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
464 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
465 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
466 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
467 vEncSample->WaitForEOS();
468 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
469 }
470 }
471
472 /**
473 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0120
474 * @tc.name : h264 surf 跨帧参考模式分层编码 时域gop size为5
475 * @tc.desc : function test
476 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0120, TestSize.Level1)477 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0120, TestSize.Level1)
478 {
479 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
480 auto vEncSample = make_unique<VEncAPI11Sample>();
481 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0120.h264";
482 vEncSample->INP_DIR = INP_DIR_720;
483 vEncSample->DEFAULT_WIDTH = 1280;
484 vEncSample->DEFAULT_HEIGHT = 720;
485 vEncSample->DEFAULT_FRAME_RATE = 30;
486 vEncSample->SURF_INPUT = true;
487 vEncSample->TEMPORAL_ENABLE = true;
488 vEncSample->TEMPORAL_CONFIG = true;
489 vEncSample->TEMPORAL_JUMP_MODE = true;
490 int32_t temporalGopSize = 5;
491 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
492 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
493 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
494 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
495 vEncSample->WaitForEOS();
496 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
497 }
498 }
499
500 /**
501 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0130
502 * @tc.name : h265 buffer 相邻参考模式分层编码 时域gop size为任意合法值
503 * @tc.desc : function test
504 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0130, TestSize.Level1)505 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0130, TestSize.Level1)
506 {
507 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
508 auto vEncSample = make_unique<VEncAPI11Sample>();
509 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0130.h265";
510 vEncSample->INP_DIR = INP_DIR_720;
511 vEncSample->DEFAULT_WIDTH = 1280;
512 vEncSample->DEFAULT_HEIGHT = 720;
513 vEncSample->DEFAULT_FRAME_RATE = 30;
514 vEncSample->TEMPORAL_ENABLE = true;
515 vEncSample->TEMPORAL_CONFIG = true;
516 int32_t temporalGopSize = 6;
517 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
518 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
519 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
520 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
521 vEncSample->WaitForEOS();
522 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
523 }
524 }
525
526 /**
527 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0140
528 * @tc.name : h265 buffer 跨帧参考模式分层编码 时域gop size为8
529 * @tc.desc : function test
530 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0140, TestSize.Level1)531 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0140, TestSize.Level1)
532 {
533 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
534 auto vEncSample = make_unique<VEncAPI11Sample>();
535 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0140.h265";
536 vEncSample->INP_DIR = INP_DIR_720;
537 vEncSample->DEFAULT_WIDTH = 1280;
538 vEncSample->DEFAULT_HEIGHT = 720;
539 vEncSample->DEFAULT_FRAME_RATE = 30;
540 vEncSample->TEMPORAL_ENABLE = true;
541 vEncSample->TEMPORAL_CONFIG = true;
542 vEncSample->TEMPORAL_JUMP_MODE = true;
543 int32_t temporalGopSize = 8;
544 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
545 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
546 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
547 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
548 vEncSample->WaitForEOS();
549 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
550 }
551 }
552
553 /**
554 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0150
555 * @tc.name : h265 surf 相邻参考模式分层编码 时域gop size为任意合法值
556 * @tc.desc : function test
557 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0150, TestSize.Level1)558 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0150, TestSize.Level1)
559 {
560 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
561 auto vEncSample = make_unique<VEncAPI11Sample>();
562 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0150.h265";
563 vEncSample->INP_DIR = INP_DIR_720;
564 vEncSample->DEFAULT_WIDTH = 1280;
565 vEncSample->DEFAULT_HEIGHT = 720;
566 vEncSample->DEFAULT_FRAME_RATE = 30;
567 vEncSample->SURF_INPUT = true;
568 vEncSample->TEMPORAL_ENABLE = true;
569 vEncSample->TEMPORAL_CONFIG = true;
570 int32_t temporalGopSize = 9;
571 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
572 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
573 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
574 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
575 vEncSample->WaitForEOS();
576 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
577 }
578 }
579
580 /**
581 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0160
582 * @tc.name : h265 surf 跨帧参考模式分层编码 时域gop size为12
583 * @tc.desc : function test
584 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0160, TestSize.Level1)585 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0160, TestSize.Level1)
586 {
587 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
588 auto vEncSample = make_unique<VEncAPI11Sample>();
589 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0160.h265";
590 vEncSample->INP_DIR = INP_DIR_720;
591 vEncSample->DEFAULT_WIDTH = 1280;
592 vEncSample->DEFAULT_HEIGHT = 720;
593 vEncSample->DEFAULT_FRAME_RATE = 30;
594 vEncSample->SURF_INPUT = true;
595 vEncSample->TEMPORAL_ENABLE = true;
596 vEncSample->TEMPORAL_CONFIG = true;
597 vEncSample->TEMPORAL_JUMP_MODE = true;
598 int32_t temporalGopSize = 12;
599 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
600 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
601 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
602 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
603 vEncSample->WaitForEOS();
604 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
605 }
606 }
607
608 /**
609 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0170
610 * @tc.name : h265 surf分层编码过程中强制I帧,检查相邻分层结构是否刷新
611 * @tc.desc : function test
612 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0170, TestSize.Level1)613 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0170, TestSize.Level1)
614 {
615 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
616 auto vEncSample = make_unique<VEncAPI11Sample>();
617 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0170.h265";
618 vEncSample->INP_DIR = INP_DIR_720;
619 vEncSample->DEFAULT_WIDTH = 1280;
620 vEncSample->DEFAULT_HEIGHT = 720;
621 vEncSample->DEFAULT_FRAME_RATE = 30;
622 vEncSample->SURF_INPUT = true;
623 vEncSample->TEMPORAL_ENABLE = true;
624 vEncSample->TEMPORAL_CONFIG = true;
625 int32_t temporalGopSize = 3;
626 vEncSample->enableForceIDR = true;
627 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
628 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
629 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
630 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
631 vEncSample->WaitForEOS();
632 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
633 }
634 }
635
636 /**
637 * @tc.number : VIDEO_TEMPORAL_ENCODE_FUNCTION_0180
638 * @tc.name : h265 surf分层编码过程中强制I帧,检查跨帧分层结构是否刷新
639 * @tc.desc : function test
640 */
HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0180, TestSize.Level1)641 HWTEST_F(HwEncTemporalNdkTest, VIDEO_TEMPORAL_ENCODE_FUNCTION_0180, TestSize.Level1)
642 {
643 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
644 auto vEncSample = make_unique<VEncAPI11Sample>();
645 vEncSample->OUT_DIR = "/data/test/media/VIDEO_TEMPORAL_ENCODE_FUNCTION_0180.h265";
646 vEncSample->INP_DIR = INP_DIR_720;
647 vEncSample->DEFAULT_WIDTH = 1280;
648 vEncSample->DEFAULT_HEIGHT = 720;
649 vEncSample->DEFAULT_FRAME_RATE = 30;
650 vEncSample->SURF_INPUT = true;
651 vEncSample->TEMPORAL_ENABLE = true;
652 vEncSample->TEMPORAL_CONFIG = true;
653 vEncSample->TEMPORAL_JUMP_MODE = true;
654 int32_t temporalGopSize = 4;
655 vEncSample->enableForceIDR = true;
656 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
657 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
658 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
659 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
660 vEncSample->WaitForEOS();
661 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
662 }
663 }
664
665 /**
666 * @tc.number : LTR_FUNC_001
667 * @tc.name : LTR count设置为非法值
668 * @tc.desc : function test
669 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_001, TestSize.Level0)670 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_001, TestSize.Level0)
671 {
672 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
673 auto vEncSample = make_unique<VEncAPI11Sample>();
674 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_001.h265";
675 vEncSample->INP_DIR = INP_DIR_720;
676 vEncSample->DEFAULT_WIDTH = 1280;
677 vEncSample->DEFAULT_HEIGHT = 720;
678 vEncSample->DEFAULT_FRAME_RATE = 30;
679 vEncSample->SURF_INPUT = true;
680 vEncSample->ltrParam.enableUseLtr = true;
681 vEncSample->enableLTR = true;
682 vEncSample->ltrParam.ltrCount = 0;
683 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
684 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
685 ASSERT_EQ(AV_ERR_INVALID_VAL, vEncSample->ConfigureVideoEncoder());
686 ASSERT_EQ(AV_ERR_OK, vEncSample->Reset());
687 vEncSample->ltrParam.ltrCount = 11;
688 ASSERT_EQ(AV_ERR_INVALID_VAL, vEncSample->ConfigureVideoEncoder());
689 }
690 }
691
692 /**
693 * @tc.number : LTR_FUNC_002
694 * @tc.name : 能力查询是否支持LTR
695 * @tc.desc : function test
696 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_002, TestSize.Level0)697 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_002, TestSize.Level0)
698 {
699 OH_AVCapability *capa = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
700 const char* codecName = OH_AVCapability_GetName(capa);
701 if (!strcmp(codecName, "OMX.hisi.video.encoder.hevc")) {
702 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capa, VIDEO_ENCODER_LONG_TERM_REFERENCE));
703 } else {
704 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capa, VIDEO_ENCODER_LONG_TERM_REFERENCE));
705 }
706 }
707
708 /**
709 * @tc.number : LTR_FUNC_004
710 * @tc.name : h265 surf模式 count 1 ,mark 第5帧 ,后续帧标记use
711 * @tc.desc : function test
712 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_004, TestSize.Level0)713 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_004, TestSize.Level0)
714 {
715 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
716 auto vEncSample = make_unique<VEncAPI11Sample>();
717 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_004.h265";
718 vEncSample->INP_DIR = INP_DIR_720;
719 vEncSample->DEFAULT_WIDTH = 1280;
720 vEncSample->DEFAULT_HEIGHT = 720;
721 vEncSample->DEFAULT_FRAME_RATE = 30;
722 vEncSample->SURF_INPUT = true;
723 vEncSample->ltrParam.enableUseLtr = true;
724 vEncSample->enableLTR = true;
725 vEncSample->ltrParam.ltrCount = 1;
726 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
727 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
728 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
729 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
730 vEncSample->WaitForEOS();
731 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
732 }
733 }
734
735 /**
736 * @tc.number : LTR_FUNC_005
737 * @tc.name : h265 surf模式 count 1 ,mark 第5帧 ,后续帧标记use 但poc错误
738 * @tc.desc : function test
739 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_005, TestSize.Level1)740 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_005, TestSize.Level1)
741 {
742 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
743 auto vEncSample = make_unique<VEncAPI11Sample>();
744 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_005.h265";
745 vEncSample->INP_DIR = INP_DIR_720;
746 vEncSample->DEFAULT_WIDTH = 1280;
747 vEncSample->DEFAULT_HEIGHT = 720;
748 vEncSample->DEFAULT_FRAME_RATE = 30;
749 vEncSample->SURF_INPUT = true;
750 vEncSample->ltrParam.enableUseLtr = true;
751 vEncSample->enableLTR = true;
752 vEncSample->ltrParam.useBadLtr = true;
753 vEncSample->ltrParam.ltrCount = 1;
754 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
755 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
756 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
757 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
758 vEncSample->WaitForEOS();
759 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
760 }
761 }
762
763 /**
764 * @tc.number : LTR_FUNC_006
765 * @tc.name : h265 surf模式 count 10 ,每隔5帧mark一帧,每个参考帧后面都正确use当前参考帧
766 * @tc.desc : function test
767 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_006, TestSize.Level0)768 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_006, TestSize.Level0)
769 {
770 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
771 auto vEncSample = make_unique<VEncAPI11Sample>();
772 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_006.h265";
773 vEncSample->INP_DIR = INP_DIR_720;
774 vEncSample->DEFAULT_WIDTH = 1280;
775 vEncSample->DEFAULT_HEIGHT = 720;
776 vEncSample->DEFAULT_FRAME_RATE = 30;
777 vEncSample->SURF_INPUT = true;
778 vEncSample->ltrParam.enableUseLtr = true;
779 vEncSample->enableLTR = true;
780 vEncSample->ltrParam.ltrCount = 10;
781 vEncSample->ltrParam.ltrInterval = 5;
782 vEncSample->ltrParam.useLtrIndex = 1;
783 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
784 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
785 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
786 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
787 vEncSample->WaitForEOS();
788 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
789 }
790 }
791
792 /**
793 * @tc.number : LTR_FUNC_007
794 * @tc.name : h265 surf模式 count 10 ,每隔5帧mark一帧,不设置use帧
795 * @tc.desc : function test
796 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_007, TestSize.Level2)797 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_007, TestSize.Level2)
798 {
799 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
800 auto vEncSample = make_unique<VEncAPI11Sample>();
801 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_007.h265";
802 vEncSample->INP_DIR = INP_DIR_720;
803 vEncSample->DEFAULT_WIDTH = 1280;
804 vEncSample->DEFAULT_HEIGHT = 720;
805 vEncSample->DEFAULT_FRAME_RATE = 30;
806 vEncSample->SURF_INPUT = true;
807 vEncSample->ltrParam.enableUseLtr = false;
808 vEncSample->enableLTR = true;
809 vEncSample->ltrParam.ltrCount = 10;
810 vEncSample->ltrParam.ltrInterval = 5;
811 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
812 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
813 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
814 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
815 vEncSample->WaitForEOS();
816 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
817 }
818 }
819
820 /**
821 * @tc.number : LTR_FUNC_008
822 * @tc.name : h265 surf模式 count 2 ,每隔5帧mark一帧,所有帧都use第一个参考帧
823 * @tc.desc : function test
824 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_008, TestSize.Level1)825 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_008, TestSize.Level1)
826 {
827 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
828 auto vEncSample = make_unique<VEncAPI11Sample>();
829 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_008.h265";
830 vEncSample->INP_DIR = INP_DIR_720;
831 vEncSample->DEFAULT_WIDTH = 1280;
832 vEncSample->DEFAULT_HEIGHT = 720;
833 vEncSample->DEFAULT_FRAME_RATE = 30;
834 vEncSample->SURF_INPUT = true;
835 vEncSample->ltrParam.enableUseLtr = true;
836 vEncSample->enableLTR = true;
837 vEncSample->ltrParam.ltrCount = 2;
838 vEncSample->ltrParam.ltrInterval = 5;
839 vEncSample->ltrParam.useLtrIndex = 0;
840 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
841 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
842 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
843 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
844 vEncSample->WaitForEOS();
845 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
846 }
847 }
848
849 /**
850 * @tc.number : LTR_FUNC_009
851 * @tc.name : h265 surf模式 ,不设置count ,mark一个参考帧 ,一个被标记为use ,poc正确
852 * @tc.desc : function test
853 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_009, TestSize.Level2)854 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_009, TestSize.Level2)
855 {
856 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
857 auto vEncSample = make_unique<VEncAPI11Sample>();
858 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_009.h265";
859 vEncSample->INP_DIR = INP_DIR_720;
860 vEncSample->DEFAULT_WIDTH = 1280;
861 vEncSample->DEFAULT_HEIGHT = 720;
862 vEncSample->DEFAULT_FRAME_RATE = 30;
863 vEncSample->ltrParam.ltrCount = -1;
864 vEncSample->SURF_INPUT = true;
865 vEncSample->ltrParam.enableUseLtr = true;
866 vEncSample->enableLTR = true;
867 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
868 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
869 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
870 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
871 vEncSample->WaitForEOS();
872 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
873 }
874 }
875
876 /**
877 * @tc.number : LTR_FUNC_010
878 * @tc.name : h265 surf模式,分层编码 和LTR同时设置
879 * @tc.desc : function test
880 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_010, TestSize.Level1)881 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_010, TestSize.Level1)
882 {
883 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
884 auto vEncSample = make_unique<VEncAPI11Sample>();
885 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_010.h265";
886 vEncSample->INP_DIR = INP_DIR_720;
887 vEncSample->DEFAULT_WIDTH = 1280;
888 vEncSample->DEFAULT_HEIGHT = 720;
889 vEncSample->DEFAULT_FRAME_RATE = 30;
890 vEncSample->SURF_INPUT = true;
891 vEncSample->enableLTR = true;
892 vEncSample->TEMPORAL_ENABLE = true;
893 vEncSample->TEMPORAL_DEFAULT = true;
894 int32_t temporalGopSize = 0;
895 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
896 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
897 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(temporalGopSize));
898 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
899 vEncSample->WaitForEOS();
900 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
901 }
902 }
903
904 /**
905 * @tc.number : LTR_FUNC_011
906 * @tc.name : count为5,h264 buffer,每隔5帧mark参考帧,且都被正确use
907 * @tc.desc : function test
908 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_011, TestSize.Level0)909 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_011, TestSize.Level0)
910 {
911 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
912 auto vEncApi11Sample = make_unique<VEncAPI11Sample>();
913 vEncApi11Sample->INP_DIR = INP_DIR_720;
914 vEncApi11Sample->DEFAULT_WIDTH = 1280;
915 vEncApi11Sample->DEFAULT_HEIGHT = 720;
916 vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
917 vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
918 vEncApi11Sample->SURF_INPUT = false;
919 vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
920 vEncApi11Sample->OUT_DIR = "/data/test/media/LTR_FUNC_011.h264";
921 vEncApi11Sample->ltrParam.enableUseLtr = true;
922 vEncApi11Sample->ltrParam.ltrCount = 5;
923 vEncApi11Sample->ltrParam.ltrInterval = 5;
924 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecName));
925 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
926 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
927 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
928 vEncApi11Sample->WaitForEOS();
929 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->errCount);
930 }
931 }
932
933 /**
934 * @tc.number : LTR_FUNC_012
935 * @tc.name : h264 surf模式 每隔5帧mark参考帧
936 * @tc.desc : function test
937 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_012, TestSize.Level0)938 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_012, TestSize.Level0)
939 {
940 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
941 auto vEncSample = make_unique<VEncAPI11Sample>();
942 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_012.h265";
943 vEncSample->INP_DIR = INP_DIR_720;
944 vEncSample->DEFAULT_WIDTH = 1280;
945 vEncSample->DEFAULT_HEIGHT = 720;
946 vEncSample->DEFAULT_FRAME_RATE = 30;
947 vEncSample->SURF_INPUT = true;
948 vEncSample->enableLTR = true;
949 vEncSample->ltrParam.ltrCount = 5;
950 vEncSample->ltrParam.ltrInterval = 5;
951 vEncSample->ltrParam.enableUseLtr = true;
952 vEncSample->ltrParam.useLtrIndex = 1;
953 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecName));
954 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
955 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
956 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
957 vEncSample->WaitForEOS();
958 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
959 }
960 }
961
962 /**
963 * @tc.number : LTR_FUNC_013
964 * @tc.name : count为5,h265 buffer,每隔5帧mark参考帧,且都被正确use
965 * @tc.desc : function test
966 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_013, TestSize.Level0)967 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_013, TestSize.Level0)
968 {
969 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
970 auto vEncApi11Sample = make_unique<VEncAPI11Sample>();
971 vEncApi11Sample->INP_DIR = INP_DIR_720;
972 vEncApi11Sample->DEFAULT_WIDTH = 1280;
973 vEncApi11Sample->DEFAULT_HEIGHT = 720;
974 vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
975 vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
976 vEncApi11Sample->SURF_INPUT = false;
977 vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
978 vEncApi11Sample->OUT_DIR = "/data/test/media/LTR_FUNC_013.h265";
979 vEncApi11Sample->ltrParam.enableUseLtr = true;
980 vEncApi11Sample->ltrParam.ltrCount = 5;
981 vEncApi11Sample->ltrParam.ltrInterval = 5;
982 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecNameHEVC));
983 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
984 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
985 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
986 vEncApi11Sample->WaitForEOS();
987 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->errCount);
988 }
989 }
990
991 /**
992 * @tc.number : LTR_FUNC_014
993 * @tc.name : h265 surf模式 每隔5帧mark参考帧
994 * @tc.desc : function test
995 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_014, TestSize.Level0)996 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_014, TestSize.Level0)
997 {
998 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
999 auto vEncSample = make_unique<VEncAPI11Sample>();
1000 vEncSample->OUT_DIR = "/data/test/media/LTR_FUNC_014.h265";
1001 vEncSample->INP_DIR = INP_DIR_720;
1002 vEncSample->DEFAULT_WIDTH = 1280;
1003 vEncSample->DEFAULT_HEIGHT = 720;
1004 vEncSample->DEFAULT_FRAME_RATE = 30;
1005 vEncSample->SURF_INPUT = true;
1006 vEncSample->enableLTR = true;
1007 vEncSample->ltrParam.ltrCount = 5;
1008 vEncSample->ltrParam.ltrInterval = 5;
1009 vEncSample->ltrParam.enableUseLtr = true;
1010 vEncSample->ltrParam.useLtrIndex = 1;
1011 ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC));
1012 ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
1013 ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
1014 ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1015 vEncSample->WaitForEOS();
1016 ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
1017 }
1018 }
1019
1020 /**
1021 * @tc.number : LTR_FUNC_015
1022 * @tc.name : count为5,h264 buffer,每隔5帧mark参考帧,且use自己
1023 * @tc.desc : function test
1024 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_015, TestSize.Level1)1025 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_015, TestSize.Level1)
1026 {
1027 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1028 auto vEncApi11Sample = make_unique<VEncAPI11Sample>();
1029 vEncApi11Sample->INP_DIR = INP_DIR_720;
1030 vEncApi11Sample->DEFAULT_WIDTH = 1280;
1031 vEncApi11Sample->DEFAULT_HEIGHT = 720;
1032 vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
1033 vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
1034 vEncApi11Sample->SURF_INPUT = false;
1035 vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
1036 vEncApi11Sample->OUT_DIR = "/data/test/media/LTR_FUNC_015.h264";
1037 vEncApi11Sample->ltrParam.enableUseLtr = true;
1038 vEncApi11Sample->ltrParam.markAndUseSelf = true;
1039 vEncApi11Sample->ltrParam.ltrCount = 5;
1040 vEncApi11Sample->ltrParam.ltrInterval = 5;
1041 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecName));
1042 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
1043 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
1044 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
1045 vEncApi11Sample->WaitForEOS();
1046 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->errCount);
1047 }
1048 }
1049
1050 /**
1051 * @tc.number : LTR_FUNC_016
1052 * @tc.name : count为5,h265 buffer,每隔5帧mark参考帧,且use自己
1053 * @tc.desc : function test
1054 */
HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_016, TestSize.Level1)1055 HWTEST_F(HwEncTemporalNdkTest, LTR_FUNC_016, TestSize.Level1)
1056 {
1057 if (!strcmp(g_codecNameHEVC, "OMX.hisi.video.encoder.hevc")) {
1058 auto vEncApi11Sample = make_unique<VEncAPI11Sample>();
1059 vEncApi11Sample->INP_DIR = INP_DIR_720;
1060 vEncApi11Sample->DEFAULT_WIDTH = 1280;
1061 vEncApi11Sample->DEFAULT_HEIGHT = 720;
1062 vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
1063 vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
1064 vEncApi11Sample->SURF_INPUT = false;
1065 vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
1066 vEncApi11Sample->OUT_DIR = "/data/test/media/LTR_FUNC_016.h265";
1067 vEncApi11Sample->ltrParam.enableUseLtr = true;
1068 vEncApi11Sample->ltrParam.markAndUseSelf = true;
1069 vEncApi11Sample->ltrParam.ltrCount = 5;
1070 vEncApi11Sample->ltrParam.ltrInterval = 5;
1071 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecNameHEVC));
1072 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
1073 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
1074 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
1075 vEncApi11Sample->WaitForEOS();
1076 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->errCount);
1077 }
1078 }
1079 } // namespace