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