1 /*
2  * Copyright (C) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <iostream>
17 #include <cstdio>
18 #include <atomic>
19 #include <fstream>
20 #include <thread>
21 #include <mutex>
22 #include <queue>
23 #include <string>
24 
25 #include "gtest/gtest.h"
26 #include "videoenc_api11_sample.h"
27 #include "native_avcodec_videoencoder.h"
28 #include "native_avcodec_base.h"
29 #include "native_avcapability.h"
30 
31 using namespace std;
32 using namespace OHOS;
33 using namespace OHOS::Media;
34 using namespace testing::ext;
35 
36 namespace OHOS {
37 namespace Media {
38 class HwEncReliNdkTest : public testing::Test {
39 public:
40     static void SetUpTestCase();    // 第一个测试用例执行前
41     static void TearDownTestCase(); // 最后一个测试用例执行后
42     void SetUp() override;          // 每个测试用例执行前
43     void TearDown() override;       // 每个测试用例执行后
44     void InputFunc();
45     void OutputFunc();
46     void Release();
47     int32_t Stop();
48 
49 protected:
50     const char *inpDir720 = "/data/test/media/1280_720_nv.yuv";
51     const char *inpDir720Array[16] = {"/data/test/media/1280_720_nv.yuv",    "/data/test/media/1280_720_nv_1.yuv",
52                                       "/data/test/media/1280_720_nv_2.yuv",  "/data/test/media/1280_720_nv_3.yuv",
53                                       "/data/test/media/1280_720_nv_7.yuv",  "/data/test/media/1280_720_nv_10.yuv",
54                                       "/data/test/media/1280_720_nv_13.yuv", "/data/test/media/1280_720_nv_4.yuv",
55                                       "/data/test/media/1280_720_nv_8.yuv",  "/data/test/media/1280_720_nv_11.yuv",
56                                       "/data/test/media/1280_720_nv_14.yuv", "/data/test/media/1280_720_nv_5.yuv",
57                                       "/data/test/media/1280_720_nv_9.yuv",  "/data/test/media/1280_720_nv_12.yuv",
58                                       "/data/test/media/1280_720_nv_15.yuv", "/data/test/media/1280_720_nv_6.yuv"};
59     bool createCodecSuccess_ = false;
60 };
61 } // namespace Media
62 } // namespace OHOS
63 namespace {
64 OH_AVCapability *cap = nullptr;
65 OH_AVCapability *cap_hevc = nullptr;
66 string g_codecNameAvc;
67 string g_codecNameHEVC;
68 } // namespace
SetUpTestCase()69 void HwEncReliNdkTest::SetUpTestCase()
70 {
71     cap = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
72     g_codecNameAvc = OH_AVCapability_GetName(cap);
73     cap_hevc = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
74     g_codecNameHEVC = OH_AVCapability_GetName(cap_hevc);
75 }
76 
TearDownTestCase()77 void HwEncReliNdkTest::TearDownTestCase() {}
78 
SetUp()79 void HwEncReliNdkTest::SetUp() {}
80 
TearDown()81 void HwEncReliNdkTest::TearDown() {}
82 
83 namespace {
84 /**
85  * @tc.number    : VIDEO_HWENC_RELI_WHILE_0100
86  * @tc.name      : 720P
87  * @tc.desc      : reliable test
88  */
89 HWTEST_F(HwEncReliNdkTest, VIDEO_HWENC_RELI_WHILE_0100, TestSize.Level3)
90 {
91     while (true) {
92         shared_ptr<VEncAPI11Sample> vEncSample = make_shared<VEncAPI11Sample>();
93         vEncSample->INP_DIR = inpDir720;
94         vEncSample->DEFAULT_WIDTH = 1280;
95         vEncSample->DEFAULT_HEIGHT = 720;
96         vEncSample->DEFAULT_FRAME_RATE = 30;
97         vEncSample->OUT_DIR = "/data/test/media/1280_720_buffer.h264";
98         ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameAvc.c_str()));
99         ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
100         ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
101         ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
102         vEncSample->WaitForEOS();
103         ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
104     }
105 }
106 
107 /**
108  * @tc.number    : VIDEO_HWENC_RELI_WHILE_0200
109  * @tc.name      : 16 instances
110  * @tc.desc      : reliable test
111  */
112 HWTEST_F(HwEncReliNdkTest, VIDEO_HWENC_RELI_WHILE_0200, TestSize.Level3)
113 {
114     for (int i = 0; i < 16; i++) {
115         VEncAPI11Sample *vEncSample = new VEncAPI11Sample();
116         vEncSample->INP_DIR = inpDir720Array[i];
117         vEncSample->DEFAULT_WIDTH = 1280;
118         vEncSample->DEFAULT_HEIGHT = 720;
119         vEncSample->DEFAULT_FRAME_RATE = 30;
120         vEncSample->repeatRun = true;
121         vEncSample->OUT_DIR = "/data/test/media/1280_720_buffer.h264";
122         ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameAvc.c_str()));
123         ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
124         ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
125         ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
126         if (i == 15) {
127             vEncSample->WaitForEOS();
128             ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
129         }
130     }
131 }
132 
133 /**
134  * @tc.number    : VIDEO_HWENC_RELI_WHILE_0300
135  * @tc.name      : long encode
136  * @tc.desc      : reliable test
137  */
138 HWTEST_F(HwEncReliNdkTest, VIDEO_HWENC_RELI_WHILE_0300, TestSize.Level3)
139 {
140     shared_ptr<VEncAPI11Sample> vEncSample = make_shared<VEncAPI11Sample>();
141     vEncSample->INP_DIR = inpDir720;
142     vEncSample->DEFAULT_WIDTH = 1280;
143     vEncSample->DEFAULT_HEIGHT = 720;
144     vEncSample->DEFAULT_FRAME_RATE = 30;
145     vEncSample->repeatRun = true;
146     vEncSample->OUT_DIR = "/data/test/media/1280_720_buffer.h264";
147     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameAvc.c_str()));
148     ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
149     ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
150     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
151     vEncSample->WaitForEOS();
152     ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
153 }
154 
155 /**
156  * @tc.number    : VIDEO_HWENC_RELI_WHILE_0400
157  * @tc.name      : 16 instances
158  * @tc.desc      : reliable test
159  */
160 HWTEST_F(HwEncReliNdkTest, VIDEO_HWENC_RELI_WHILE_0400, TestSize.Level3)
161 {
162     while (true) {
163         vector<shared_ptr<VEncAPI11Sample>> encVec;
164         for (int i = 0; i < 16; i++) {
165             auto vEncSample = make_shared<VEncAPI11Sample>();
166             encVec.push_back(vEncSample);
167             vEncSample->INP_DIR = inpDir720Array[i];
168             vEncSample->DEFAULT_WIDTH = 1280;
169             vEncSample->DEFAULT_HEIGHT = 720;
170             vEncSample->DEFAULT_FRAME_RATE = 30;
171             vEncSample->OUT_DIR = "/data/test/media/1280_720_buffer.h264";
172             ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameAvc.c_str()));
173             ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
174             ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
175             ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
176         }
177         for (int i = 0; i < 16; i++) {
178             encVec[i]->WaitForEOS();
179         }
180     }
181 }
182 
183 /**
184  * @tc.number    : VIDEO_HWENC_RELI_WHILE_0010
185  * @tc.name      : 16个线程 分层编码-reset-分层编码
186  * @tc.desc      : function test
187  */
188 HWTEST_F(HwEncReliNdkTest, VIDEO_HWENC_RELI_WHILE_0010, TestSize.Level3)
189 {
190     int len = 256;
191     int loop = 0;
192     while (loop < 1) {
193         loop++;
194         cout << "loop: "<<loop<<endl;
195         vector<shared_ptr<VEncAPI11Sample>> encVec;
196         for (int i = 0; i < 16; i++) {
197             char file[256] = {};
198             sprintf_s(file, len, "/data/test/media/VIDEO_HWENC_RELI_WHILE_0010_%d.h265", i);
199             auto vEncSample = make_shared<VEncAPI11Sample>();
200             vEncSample->OUT_DIR = file;
201 
202             encVec.push_back(vEncSample);
203             vEncSample->INP_DIR = inpDir720Array[i];
204             vEncSample->TEMPORAL_ENABLE = true;
205             vEncSample->TEMPORAL_CONFIG = true;
206             ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC.c_str()));
207             ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
208             ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(i+2));
209             ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
210             vEncSample->WaitForEOS();
211             ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
212             ASSERT_EQ(AV_ERR_OK, vEncSample->Reset());
213             vEncSample->TEMPORAL_ENABLE = false;
214             vEncSample->TEMPORAL_CONFIG = false;
215 
216             ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
217             ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(i+2));
218             ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
219             vEncSample->WaitForEOS();
220             ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
221         }
222         for (int i = 0; i < 16; i++) {
223             encVec[i]->WaitForEOS();
224         }
225         encVec.clear();
226     }
227 }
228 
229 /**
230  * @tc.number    : VIDEO_HWENC_RELI_WHILE_0020
231  * @tc.name      : 16个线程 分层编码-reset-普通编码
232  * @tc.desc      : function test
233  */
234 HWTEST_F(HwEncReliNdkTest, VIDEO_HWENC_RELI_WHILE_0020, TestSize.Level3)
235 {
236     int len = 256;
237     int loop = 0;
238     while (loop < 1) {
239         loop++;
240         cout << "loop: "<<loop<<endl;
241         vector<shared_ptr<VEncAPI11Sample>> encVec;
242         for (int i = 0; i < 16; i++) {
243             char file[256] = {};
244             sprintf_s(file, len, "/data/test/media/VIDEO_HWENC_RELI_WHILE_0020_%d.h265", i);
245             auto vEncSample = make_shared<VEncAPI11Sample>();
246             vEncSample->OUT_DIR = file;
247 
248             encVec.push_back(vEncSample);
249             vEncSample->INP_DIR = inpDir720Array[i];
250             vEncSample->TEMPORAL_ENABLE = true;
251             vEncSample->TEMPORAL_CONFIG = true;
252             ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC.c_str()));
253             ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
254             ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(i+2));
255             ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
256             vEncSample->WaitForEOS();
257             ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
258             ASSERT_EQ(AV_ERR_OK, vEncSample->Reset());
259             vEncSample->TEMPORAL_ENABLE = false;
260             vEncSample->TEMPORAL_CONFIG = false;
261 
262             ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
263             ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
264             ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
265             vEncSample->WaitForEOS();
266             ASSERT_EQ(AV_ERR_OK, vEncSample->errCount);
267         }
268         for (int i = 0; i < 16; i++) {
269             encVec[i]->WaitForEOS();
270         }
271         encVec.clear();
272     }
273 }
274 
275 /**
276  * @tc.number    : VIDEO_HWENC_RELI_WHILE_0030
277  * @tc.name      : h265 buffer 16个线程,8个相邻分层,8个跨帧分层1
278  * @tc.desc      : function test
279  */
280 HWTEST_F(HwEncReliNdkTest, VIDEO_HWENC_RELI_WHILE_0030, TestSize.Level3)
281 {
282     int len =256;
283     int loop = 0;
284     while (loop < 1) {
285         loop++;
286         cout << "loop: "<<loop<<endl;
287         vector<shared_ptr<VEncAPI11Sample>> encVec;
288         for (int i = 0; i < 16; i++) {
289             char file[256] = {};
290             sprintf_s(file, len, "/data/test/media/VIDEO_HWENC_RELI_WHILE_0030_%d.h265", i);
291             auto vEncSample = make_shared<VEncAPI11Sample>();
292             vEncSample->OUT_DIR = file;
293 
294             encVec.push_back(vEncSample);
295             vEncSample->INP_DIR = inpDir720Array[i];
296             vEncSample->TEMPORAL_ENABLE = true;
297             vEncSample->TEMPORAL_CONFIG = true;
298             if (i % 2 == 0) {
299                 vEncSample->TEMPORAL_JUMP_MODE = true;
300             }
301             ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC.c_str()));
302             ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
303             ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(i));
304             ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
305         }
306         for (int i = 0; i < 16; i++) {
307             encVec[i]->WaitForEOS();
308         }
309         encVec.clear();
310     }
311 }
312 
313 /**
314  * @tc.number    : VIDEO_HWENC_RELI_WHILE_0040
315  * @tc.name      : h265 surface 16个线程,8个相邻分层,8个跨帧分层
316  * @tc.desc      : function test
317  */
318 HWTEST_F(HwEncReliNdkTest, VIDEO_HWENC_RELI_WHILE_0040, TestSize.Level3)
319 {
320     int len =256;
321     int loop = 0;
322     while (loop < 10) {
323         loop++;
324         cout << "loop: "<<loop<<endl;
325         vector<shared_ptr<VEncAPI11Sample>> encVec;
326         for (int i = 0; i < 16; i++) {
327             char file[256] = {};
328             sprintf_s(file, len, "/data/test/media/VIDEO_HWENC_RELI_WHILE_0040_%d.h265", i);
329             auto vEncSample = make_shared<VEncAPI11Sample>();
330             vEncSample->OUT_DIR = file;
331 
332             encVec.push_back(vEncSample);
333             vEncSample->INP_DIR = inpDir720Array[i];
334             vEncSample->SURF_INPUT = true;
335             vEncSample->TEMPORAL_ENABLE = true;
336             vEncSample->TEMPORAL_CONFIG = true;
337             if (i % 2 == 0) {
338                 vEncSample->TEMPORAL_JUMP_MODE = true;
339             }
340             ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameHEVC.c_str()));
341             ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
342             ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder_Temporal(i));
343             ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
344         }
345         for (int i = 0; i < 16; i++) {
346             encVec[i]->WaitForEOS();
347         }
348         encVec.clear();
349     }
350 }
351 /**
352  * @tc.number    : RESET_BITRATE_RELI_001
353  * @tc.name      : reset bitrate
354  * @tc.desc      : function test
355  */
356 HWTEST_F(HwEncReliNdkTest, RESET_BITRATE_RELI_001, TestSize.Level3)
357 {
358     while (true) {
359         vector<shared_ptr<VEncAPI11Sample>> encVec;
360         for (int i = 0; i < 16; i++) {
361             auto vEncSample = make_shared<VEncAPI11Sample>();
362             encVec.push_back(vEncSample);
363             vEncSample->INP_DIR = inpDir720Array[i];
364             vEncSample->DEFAULT_WIDTH = 1280;
365             vEncSample->DEFAULT_HEIGHT = 720;
366             vEncSample->DEFAULT_FRAME_RATE = 30;
367             vEncSample->enableAutoSwitchParam =  true;
368             vEncSample->needResetBitrate = true;
369             vEncSample->OUT_DIR = "/data/test/media/1280_720_buffer.h264";
370             ASSERT_EQ(AV_ERR_OK, vEncSample->CreateVideoEncoder(g_codecNameAvc.c_str()));
371             ASSERT_EQ(AV_ERR_OK, vEncSample->SetVideoEncoderCallback());
372             ASSERT_EQ(AV_ERR_OK, vEncSample->ConfigureVideoEncoder());
373             ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
374         }
375         for (int i = 0; i < 16; i++) {
376             encVec[i]->WaitForEOS();
377         }
378         encVec.clear();
379     }
380 }
381 
382 /**
383  * @tc.number    : LTR_FUNC_017
384  * @tc.name      : 16个线程,8个为h265 surf普通编码,8个为h265 surf LTR编码
385  * @tc.desc      : function test
386  */
387 HWTEST_F(HwEncReliNdkTest, LTR_FUNC_017, TestSize.Level3)
388 {
389     while (true) {
390         vector<shared_ptr<VEncAPI11Sample>> encVec;
391         for (int i = 0; i < 16; i++) {
392             auto vEncApi11Sample = make_shared<VEncAPI11Sample>();
393             encVec.push_back(vEncApi11Sample);
394             vEncApi11Sample->INP_DIR = inpDir720Array[i];
395             vEncApi11Sample->DEFAULT_WIDTH = 1280;
396             vEncApi11Sample->DEFAULT_HEIGHT = 720;
397             vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
398             vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
399             vEncApi11Sample->SURF_INPUT = true;
400             vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
401             vEncApi11Sample->OUT_DIR = "/data/test/media/out/LTR_FUNC_017.h265";
402             if (i % 2 == 0) {
403                 vEncApi11Sample->ltrParam.enableUseLtr = true;
404                 vEncApi11Sample->ltrParam.ltrCount = 5;
405                 vEncApi11Sample->ltrParam.ltrInterval = 5;
406             }
407             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecNameHEVC.c_str()));
408             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
409             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
410             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
411         }
412         for (int i = 0; i < 16; i++) {
413             encVec[i]->WaitForEOS();
414         }
415         encVec.clear();
416     }
417 }
418 
419 /**
420  * @tc.number    : LTR_FUNC_018
421  * @tc.name      : 16个线程,8个为h264 buffer普通编码,8个为h265 surf LTR编码
422  * @tc.desc      : function test
423  */
424 HWTEST_F(HwEncReliNdkTest, LTR_FUNC_018, TestSize.Level3)
425 {
426     while (true) {
427         vector<shared_ptr<VEncAPI11Sample>> encVec;
428         for (int i = 0; i < 16; i++) {
429             auto vEncApi11Sample = make_shared<VEncAPI11Sample>();
430             encVec.push_back(vEncApi11Sample);
431             vEncApi11Sample->INP_DIR = inpDir720Array[i];
432             vEncApi11Sample->DEFAULT_WIDTH = 1280;
433             vEncApi11Sample->DEFAULT_HEIGHT = 720;
434             vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
435             vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
436             vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
437             vEncApi11Sample->OUT_DIR = "/data/test/media/out/LTR_FUNC_018.h265";
438             if (i % 2 == 0) {
439                 vEncApi11Sample->SURF_INPUT = true;
440                 vEncApi11Sample->ltrParam.enableUseLtr = true;
441                 vEncApi11Sample->ltrParam.ltrCount = 5;
442                 vEncApi11Sample->ltrParam.ltrInterval = 5;
443                 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecNameHEVC.c_str()));
444             } else {
445                 vEncApi11Sample->SURF_INPUT = false;
446                 vEncApi11Sample->ltrParam.enableUseLtr = false;
447                 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecNameAvc.c_str()));
448             }
449             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
450             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
451             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
452         }
453         for (int i = 0; i < 16; i++) {
454             encVec[i]->WaitForEOS();
455         }
456         encVec.clear();
457     }
458 }
459 
460 /**
461  * @tc.number    : LTR_FUNC_019
462  * @tc.name      : 16个线程,8个为h264 surf普通编码,8个为h265 buffer LTR编码
463  * @tc.desc      : function test
464  */
465 HWTEST_F(HwEncReliNdkTest, LTR_FUNC_019, TestSize.Level3)
466 {
467     while (true) {
468         vector<shared_ptr<VEncAPI11Sample>> encVec;
469         for (int i = 0; i < 16; i++) {
470             auto vEncApi11Sample = make_shared<VEncAPI11Sample>();
471             encVec.push_back(vEncApi11Sample);
472             vEncApi11Sample->INP_DIR = inpDir720Array[i];
473             vEncApi11Sample->DEFAULT_WIDTH = 1280;
474             vEncApi11Sample->DEFAULT_HEIGHT = 720;
475             vEncApi11Sample->DEFAULT_FRAME_RATE = 30;
476             vEncApi11Sample->DEFAULT_BITRATE_MODE = CBR;
477             vEncApi11Sample->DEFAULT_KEY_FRAME_INTERVAL = -1;
478             vEncApi11Sample->OUT_DIR = "/data/test/media/out/LTR_FUNC_019.h265";
479             if (i % 2 == 0) {
480                 vEncApi11Sample->SURF_INPUT = false;
481                 vEncApi11Sample->ltrParam.enableUseLtr = true;
482                 vEncApi11Sample->ltrParam.ltrCount = 5;
483                 vEncApi11Sample->ltrParam.ltrInterval = 5;
484                 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecNameHEVC.c_str()));
485             } else {
486                 vEncApi11Sample->SURF_INPUT = true;
487                 vEncApi11Sample->ltrParam.enableUseLtr = false;
488                 ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->CreateVideoEncoder(g_codecNameAvc.c_str()));
489             }
490             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->SetVideoEncoderCallback());
491             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->ConfigureVideoEncoder());
492             ASSERT_EQ(AV_ERR_OK, vEncApi11Sample->StartVideoEncoder());
493         }
494         for (int i = 0; i < 16; i++) {
495             encVec[i]->WaitForEOS();
496         }
497         encVec.clear();
498     }
499 }
500 } // namespace