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