• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright (C) 2024 Huawei Device Co., Ltd.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include <iostream>
17 #include <cstdio>
18 #include <string>
19 
20 #include "gtest/gtest.h"
21 #include "avcodec_common.h"
22 #include "meta/format.h"
23 #include "avcodec_video_encoder.h"
24 #include "videoenc_inner_sample.h"
25 #include "native_avcapability.h"
26 #include "avcodec_info.h"
27 #include "avcodec_list.h"
28 
29 using namespace std;
30 using namespace OHOS;
31 using namespace OHOS::MediaAVCodec;
32 using namespace testing::ext;
33 
34 namespace {
35 class HwEncInnerFuncNdkTest : public testing::Test {
36 public:
37     // SetUpTestCase: Called before all test cases
38     static void SetUpTestCase(void);
39     // TearDownTestCase: Called after all test case
40     static void TearDownTestCase(void);
41     // SetUp: Called before each test cases
42     void SetUp() override;
43     // TearDown: Called after each test cases
44     void TearDown() override;
45 };
46 
47 std::string g_codecMime = "video/avc";
48 std::string g_codecName = "";
49 std::string g_codecMimeHevc = "video/hevc";
50 std::string g_codecNameHevc = "";
51 OH_AVCapability *cap = nullptr;
52 
53 fileInfo file_640_480_rgba{"/data/test/media/640_480.rgba", GRAPHIC_PIXEL_FMT_RGBA_8888, 640, 480 };
54 fileInfo file_1280_536_nv21{"/data/test/media/1280_536_nv21.yuv", GRAPHIC_PIXEL_FMT_YCRCB_420_SP, 1280, 536 };
55 fileInfo file_1280_720_nv12{"/data/test/media/1280_720_nv12.yuv", GRAPHIC_PIXEL_FMT_YCBCR_420_SP, 1280, 720 };
56 fileInfo file_1920_816_rgba{"/data/test/media/1920_816.rgba", GRAPHIC_PIXEL_FMT_RGBA_8888, 1920, 816 };
57 fileInfo file_1920_1080_nv21{"/data/test/media/1920_1080_nv21.yuv", GRAPHIC_PIXEL_FMT_YCRCB_420_SP, 1920, 1080 };
58 fileInfo file_3840_2160_nv12{"/data/test/media/3840_2160_nv12.yuv", GRAPHIC_PIXEL_FMT_YCBCR_420_SP, 3840, 2160 };
59 fileInfo file_1280_720_nv12_10bit{"/data/test/media/1280_720_nv12_10bit.yuv", GRAPHIC_PIXEL_FMT_YCBCR_P010, 1280, 720 };
60 fileInfo file_1080_1920_nv12{"/data/test/media/1080_1920_nv12.yuv", GRAPHIC_PIXEL_FMT_YCBCR_420_SP, 1080, 1920 };
61 fileInfo file_1280_1280_nv12{"/data/test/media/1280_1280_nv12.yuv", GRAPHIC_PIXEL_FMT_YCBCR_420_SP, 1280, 1280 };
62 
SetUpTestCase()63 void HwEncInnerFuncNdkTest::SetUpTestCase()
64 {
65     cap = OH_AVCodec_GetCapabilityByCategory(g_codecMime.c_str(), true, HARDWARE);
66     const char *tmpCodecName = OH_AVCapability_GetName(cap);
67     g_codecName = tmpCodecName;
68     cout << "g_codecName: " << g_codecName << endl;
69 
70     OH_AVCapability *capHevc = OH_AVCodec_GetCapabilityByCategory(g_codecMimeHevc.c_str(), true, HARDWARE);
71     const char *tmpCodecNameHevc = OH_AVCapability_GetName(capHevc);
72     g_codecNameHevc = tmpCodecNameHevc;
73     cout << "g_codecNameHevc: " << g_codecNameHevc << endl;
74 }
75 
TearDownTestCase()76 void HwEncInnerFuncNdkTest::TearDownTestCase() {}
77 
SetUp()78 void HwEncInnerFuncNdkTest::SetUp()
79 {
80 }
81 
TearDown()82 void HwEncInnerFuncNdkTest::TearDown()
83 {
84 }
85 } // namespace
86 
87 namespace {
IsSupportRgba1010102Format()88 bool IsSupportRgba1010102Format()
89 {
90     const int32_t *pixelFormat = nullptr;
91     uint32_t pixelFormatNum = 0;
92     OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
93     if (capability == nullptr) {
94         return false;
95     }
96     int32_t ret = OH_AVCapability_GetVideoSupportedPixelFormats(capability, &pixelFormat, &pixelFormatNum);
97     if (pixelFormat == nullptr || pixelFormatNum == 0 || ret != AV_ERR_OK) {
98         return false;
99     }
100     for (int i = 0; i < pixelFormatNum; i++) {
101         if (pixelFormat[i] == static_cast<int32_t>(AV_PIXEL_FORMAT_RGBA1010102)) {
102             return true;
103         }
104     }
105     return false;
106 }
107 /**
108  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_0100
109  * @tc.name      : repeat surface h264 encode send eos,max count -1,frame after 73ms
110  * @tc.desc      : function test
111  */
112 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_0100, TestSize.Level0)
113 {
114     if (cap != nullptr) {
115         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
116         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
117         vEncInnerSample->DEFAULT_WIDTH = 1280;
118         vEncInnerSample->DEFAULT_HEIGHT = 720;
119         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
120         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_0100.h264";
121         vEncInnerSample->surfaceInput = true;
122         vEncInnerSample->enableRepeat = true;
123         vEncInnerSample->enableSeekEos = true;
124         vEncInnerSample->setMaxCount = true;
125         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
126         vEncInnerSample->DEFAULT_MAX_COUNT = -1;
127         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
128         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
129         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
130         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
131         vEncInnerSample->WaitForEOS();
132         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
133         cout << "outCount: " << vEncInnerSample->outCount << endl;
134         EXPECT_LE(vEncInnerSample->outCount, 27);
135         EXPECT_GE(vEncInnerSample->outCount, 23);
136     }
137 }
138 
139 /**
140  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_0200
141  * @tc.name      : repeat surface h264 encode send eos,max count 2,frame after 73ms
142  * @tc.desc      : function test
143  */
144 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_0200, TestSize.Level0)
145 {
146     if (cap != nullptr) {
147         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
148         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
149         vEncInnerSample->DEFAULT_WIDTH = 1280;
150         vEncInnerSample->DEFAULT_HEIGHT = 720;
151         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
152         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_0200.h264";
153         vEncInnerSample->surfaceInput = true;
154         vEncInnerSample->enableSeekEos = true;
155         vEncInnerSample->enableRepeat = true;
156         vEncInnerSample->setMaxCount = true;
157         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
158         vEncInnerSample->DEFAULT_MAX_COUNT = 2;
159         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
160         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
161         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
162         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
163         vEncInnerSample->WaitForEOS();
164         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
165         cout << "outCount: " << vEncInnerSample->outCount << endl;
166         ASSERT_EQ(17, vEncInnerSample->outCount);
167     }
168 }
169 
170 /**
171  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_0300
172  * @tc.name      : repeat surface h264 encode send frame,max count -1,frame after 73ms
173  * @tc.desc      : function test
174  */
175 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_0300, TestSize.Level0)
176 {
177     if (cap != nullptr) {
178         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
179         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
180         vEncInnerSample->DEFAULT_WIDTH = 1280;
181         vEncInnerSample->DEFAULT_HEIGHT = 720;
182         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
183         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_0300.h264";
184         vEncInnerSample->surfaceInput = true;
185         vEncInnerSample->enableRepeat = true;
186         vEncInnerSample->setMaxCount = true;
187         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
188         vEncInnerSample->DEFAULT_MAX_COUNT = -1;
189         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
190         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
191         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
192         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
193         vEncInnerSample->WaitForEOS();
194         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
195         cout << "outCount: " << vEncInnerSample->outCount << endl;
196         EXPECT_LE(vEncInnerSample->outCount, 37);
197         EXPECT_GE(vEncInnerSample->outCount, 33);
198     }
199 }
200 
201 /**
202  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_0400
203  * @tc.name      : repeat surface h264 encode send frame,max count 1,frame after 73ms
204  * @tc.desc      : function test
205  */
206 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_0400, TestSize.Level0)
207 {
208     if (cap != nullptr) {
209         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
210         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
211         vEncInnerSample->DEFAULT_WIDTH = 1280;
212         vEncInnerSample->DEFAULT_HEIGHT = 720;
213         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
214         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_0400.h264";
215         vEncInnerSample->surfaceInput = true;
216         vEncInnerSample->enableRepeat = true;
217         vEncInnerSample->setMaxCount = true;
218         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
219         vEncInnerSample->DEFAULT_MAX_COUNT = 1;
220         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
221         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
222         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
223         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
224         vEncInnerSample->WaitForEOS();
225         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
226         cout << "outCount: " << vEncInnerSample->outCount << endl;
227         ASSERT_EQ(26, vEncInnerSample->outCount);
228     }
229 }
230 
231 /**
232  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_0500
233  * @tc.name      : repeat surface h265 encode send eos,max count -1,frame after 73ms
234  * @tc.desc      : function test
235  */
236 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_0500, TestSize.Level0)
237 {
238     if (cap != nullptr) {
239         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
240         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
241         vEncInnerSample->DEFAULT_WIDTH = 1280;
242         vEncInnerSample->DEFAULT_HEIGHT = 720;
243         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
244         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_0500.h264";
245         vEncInnerSample->surfaceInput = true;
246         vEncInnerSample->enableRepeat = true;
247         vEncInnerSample->enableSeekEos = true;
248         vEncInnerSample->setMaxCount = true;
249         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
250         vEncInnerSample->DEFAULT_MAX_COUNT = -1;
251         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
252         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
253         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
254         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
255         vEncInnerSample->WaitForEOS();
256         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
257         cout << "outCount: " << vEncInnerSample->outCount << endl;
258         EXPECT_LE(vEncInnerSample->outCount, 27);
259         EXPECT_GE(vEncInnerSample->outCount, 23);
260     }
261 }
262 
263 /**
264  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_0600
265  * @tc.name      : repeat surface h265 encode send eos,max count 2,frame after 73ms
266  * @tc.desc      : function test
267  */
268 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_0600, TestSize.Level0)
269 {
270     if (cap != nullptr) {
271         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
272         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
273         vEncInnerSample->DEFAULT_WIDTH = 1280;
274         vEncInnerSample->DEFAULT_HEIGHT = 720;
275         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
276         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_0600.h264";
277         vEncInnerSample->surfaceInput = true;
278         vEncInnerSample->enableSeekEos = true;
279         vEncInnerSample->enableRepeat = true;
280         vEncInnerSample->setMaxCount = true;
281         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
282         vEncInnerSample->DEFAULT_MAX_COUNT = 2;
283         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
284         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
285         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
286         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
287         vEncInnerSample->WaitForEOS();
288         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
289         cout << "outCount: " << vEncInnerSample->outCount << endl;
290         ASSERT_EQ(17, vEncInnerSample->outCount);
291     }
292 }
293 
294 /**
295  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_0700
296  * @tc.name      : repeat surface h265 encode send frame,max count -1,frame after 73ms
297  * @tc.desc      : function test
298  */
299 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_0700, TestSize.Level0)
300 {
301     if (cap != nullptr) {
302         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
303         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
304         vEncInnerSample->DEFAULT_WIDTH = 1280;
305         vEncInnerSample->DEFAULT_HEIGHT = 720;
306         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
307         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_0700.h264";
308         vEncInnerSample->surfaceInput = true;
309         vEncInnerSample->enableRepeat = true;
310         vEncInnerSample->setMaxCount = true;
311         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
312         vEncInnerSample->DEFAULT_MAX_COUNT = -1;
313         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
314         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
315         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
316         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
317         vEncInnerSample->WaitForEOS();
318         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
319         cout << "outCount: " << vEncInnerSample->outCount << endl;
320         EXPECT_LE(vEncInnerSample->outCount, 37);
321         EXPECT_GE(vEncInnerSample->outCount, 33);
322     }
323 }
324 
325 /**
326  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_0800
327  * @tc.name      : repeat surface h265 encode send frame,max count 1,frame after 73ms
328  * @tc.desc      : function test
329  */
330 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_0800, TestSize.Level0)
331 {
332     if (cap != nullptr) {
333         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
334         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
335         vEncInnerSample->DEFAULT_WIDTH = 1280;
336         vEncInnerSample->DEFAULT_HEIGHT = 720;
337         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
338         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_0800.h264";
339         vEncInnerSample->surfaceInput = true;
340         vEncInnerSample->enableRepeat = true;
341         vEncInnerSample->setMaxCount = true;
342         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
343         vEncInnerSample->DEFAULT_MAX_COUNT = 1;
344         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
345         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
346         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
347         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
348         vEncInnerSample->WaitForEOS();
349         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
350         cout << "outCount: " << vEncInnerSample->outCount << endl;
351         ASSERT_EQ(26, vEncInnerSample->outCount);
352     }
353 }
354 
355 /**
356  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_0900
357  * @tc.name      : repeat surface h265 encode send frame,frame after 73ms
358  * @tc.desc      : function test
359  */
360 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_0900, TestSize.Level0)
361 {
362     if (cap != nullptr) {
363         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
364         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
365         vEncInnerSample->DEFAULT_WIDTH = 1280;
366         vEncInnerSample->DEFAULT_HEIGHT = 720;
367         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
368         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_0900.h264";
369         vEncInnerSample->surfaceInput = true;
370         vEncInnerSample->enableRepeat = true;
371         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
372         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
373         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
374         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
375         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
376         vEncInnerSample->WaitForEOS();
377         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
378         cout << "outCount: " << vEncInnerSample->outCount << endl;
379         ASSERT_EQ(35, vEncInnerSample->outCount);
380     }
381 }
382 
383 /**
384  * @tc.number    : VIDEO_ENCODE_INNER_REPEAT_FUNC_1000
385  * @tc.name      : repeat surface h264 encode send frame,frame after 73ms
386  * @tc.desc      : function test
387  */
388 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_REPEAT_FUNC_1000, TestSize.Level0)
389 {
390     if (cap != nullptr) {
391         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
392         vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
393         vEncInnerSample->DEFAULT_WIDTH = 1280;
394         vEncInnerSample->DEFAULT_HEIGHT = 720;
395         vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
396         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_REPEAT_FUNC_1000.h264";
397         vEncInnerSample->surfaceInput = true;
398         vEncInnerSample->enableRepeat = true;
399         vEncInnerSample->DEFAULT_FRAME_AFTER = 73;
400         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
401         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
402         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
403         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
404         vEncInnerSample->WaitForEOS();
405         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
406         cout << "outCount: " << vEncInnerSample->outCount << endl;
407         ASSERT_EQ(35, vEncInnerSample->outCount);
408     }
409 }
410 /**
411  * @tc.number    : VIDEO_ENCODE_DISCARD_FUNC_0100
412  * @tc.name      : discard the 1th frame with KEY_I_FRAME_INTERVAL 10
413  * @tc.desc      : function test
414  */
415 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_DISCARD_FUNC_0100, TestSize.Level1)
416 {
417     std::shared_ptr<VEncInnerSignal> vencInnerSignal = std::make_shared<VEncInnerSignal>();
418     auto vEncInnerSample = make_unique<VEncNdkInnerSample>(vencInnerSignal);
419     std::shared_ptr<VEncParamWithAttrCallbackTest> VencParamWithAttrCallback_
420         = std::make_shared<VEncParamWithAttrCallbackTest>(vencInnerSignal);
421     vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
422     vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DISCARD_FUNC_0100.h264";
423     vEncInnerSample->DEFAULT_WIDTH = 1280;
424     vEncInnerSample->DEFAULT_HEIGHT = 720;
425     vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
426     vEncInnerSample->isDiscardFrame = true;
427     vEncInnerSample->discardMaxIndex = 1;
428     vEncInnerSample->enableRepeat = false;
429     vEncInnerSample->discardMinIndex = 1;
430     vEncInnerSample->surfaceInput = true;
431     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
432     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback(VencParamWithAttrCallback_));
433     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
434     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
435     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
436     vEncInnerSample->WaitForEOS();
437     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
438     ASSERT_EQ(true, vEncInnerSample->CheckOutputFrameCount());
439 }
440 
441 /**
442  * @tc.number    : VIDEO_ENCODE_DISCARD_FUNC_0200
443  * @tc.name      : discard the 10th frame with KEY_I_FRAME_INTERVAL 10
444  * @tc.desc      : function test
445  */
446 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_DISCARD_FUNC_0200, TestSize.Level1)
447 {
448     std::shared_ptr<VEncInnerSignal> vencInnerSignal = std::make_shared<VEncInnerSignal>();
449     auto vEncInnerSample = make_unique<VEncNdkInnerSample>(vencInnerSignal);
450     std::shared_ptr<VEncParamWithAttrCallbackTest> VencParamWithAttrCallback_
451         = std::make_shared<VEncParamWithAttrCallbackTest>(vencInnerSignal);
452     vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
453     vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DISCARD_FUNC_0200.h264";
454     vEncInnerSample->DEFAULT_WIDTH = 1280;
455     vEncInnerSample->DEFAULT_HEIGHT = 720;
456     vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
457     vEncInnerSample->isDiscardFrame = true;
458     vEncInnerSample->discardMaxIndex = 10;
459     vEncInnerSample->discardMinIndex = 10;
460     vEncInnerSample->surfaceInput = true;
461     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
462     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback(VencParamWithAttrCallback_));
463     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
464     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
465     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
466     vEncInnerSample->WaitForEOS();
467     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
468     ASSERT_EQ(true, vEncInnerSample->CheckOutputFrameCount());
469 }
470 
471 /**
472  * @tc.number    : VIDEO_ENCODE_DISCARD_FUNC_0300
473  * @tc.name      : discard the 11th frame with KEY_I_FRAME_INTERVAL 10
474  * @tc.desc      : function test
475  */
476 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_DISCARD_FUNC_0300, TestSize.Level1)
477 {
478     std::shared_ptr<VEncInnerSignal> vencInnerSignal = std::make_shared<VEncInnerSignal>();
479     auto vEncInnerSample = make_unique<VEncNdkInnerSample>(vencInnerSignal);
480     std::shared_ptr<VEncParamWithAttrCallbackTest> VencParamWithAttrCallback_
481         = std::make_shared<VEncParamWithAttrCallbackTest>(vencInnerSignal);
482     vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
483     vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DISCARD_FUNC_0300.h264";
484     vEncInnerSample->DEFAULT_WIDTH = 1280;
485     vEncInnerSample->DEFAULT_HEIGHT = 720;
486     vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
487     vEncInnerSample->isDiscardFrame = true;
488     vEncInnerSample->discardMaxIndex = 11;
489     vEncInnerSample->discardMinIndex = 11;
490     vEncInnerSample->surfaceInput = true;
491     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
492     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback(VencParamWithAttrCallback_));
493     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
494     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
495     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
496     vEncInnerSample->WaitForEOS();
497     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
498     ASSERT_EQ(true, vEncInnerSample->CheckOutputFrameCount());
499 }
500 
501 /**
502  * @tc.number    : VIDEO_ENCODE_DISCARD_FUNC_0400
503  * @tc.name      : random discard with KEY_I_FRAME_INTERVAL 10
504  * @tc.desc      : function test
505  */
506 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_DISCARD_FUNC_0400, TestSize.Level1)
507 {
508     std::shared_ptr<VEncInnerSignal> vencInnerSignal = std::make_shared<VEncInnerSignal>();
509     auto vEncInnerSample = make_unique<VEncNdkInnerSample>(vencInnerSignal);
510     std::shared_ptr<VEncParamWithAttrCallbackTest> VencParamWithAttrCallback_
511         = std::make_shared<VEncParamWithAttrCallbackTest>(vencInnerSignal);
512     vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
513     vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DISCARD_FUNC_0400.h264";
514     vEncInnerSample->DEFAULT_WIDTH = 1280;
515     vEncInnerSample->DEFAULT_HEIGHT = 720;
516     vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
517     vEncInnerSample->isDiscardFrame = true;
518     vEncInnerSample->surfaceInput = true;
519     vEncInnerSample->PushRandomDiscardIndex(3, 25, 1);
520     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
521     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback(VencParamWithAttrCallback_));
522     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
523     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
524     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
525     vEncInnerSample->WaitForEOS();
526     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
527     ASSERT_EQ(true, vEncInnerSample->CheckOutputFrameCount());
528 }
529 
530 /**
531  * @tc.number    : VIDEO_ENCODE_DISCARD_FUNC_0500
532  * @tc.name      : every 3 frames lose 1 frame with KEY_I_FRAME_INTERVAL 10
533  * @tc.desc      : function test
534  */
535 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_DISCARD_FUNC_0500, TestSize.Level1)
536 {
537     std::shared_ptr<VEncInnerSignal> vencInnerSignal = std::make_shared<VEncInnerSignal>();
538     auto vEncInnerSample = make_unique<VEncNdkInnerSample>(vencInnerSignal);
539     std::shared_ptr<VEncParamWithAttrCallbackTest> VencParamWithAttrCallback_
540         = std::make_shared<VEncParamWithAttrCallbackTest>(vencInnerSignal);
541     vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
542     vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DISCARD_FUNC_0500.h264";
543     vEncInnerSample->DEFAULT_WIDTH = 1280;
544     vEncInnerSample->DEFAULT_HEIGHT = 720;
545     vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
546     vEncInnerSample->isDiscardFrame = true;
547     vEncInnerSample->surfaceInput = true;
548     vEncInnerSample->discardInterval = 3;
549     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
550     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback(VencParamWithAttrCallback_));
551     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
552     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
553     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
554     vEncInnerSample->WaitForEOS();
555     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
556     ASSERT_EQ(true, vEncInnerSample->CheckOutputFrameCount());
557 }
558 
559 /**
560  * @tc.number    : VIDEO_ENCODE_DISCARD_FUNC_0600
561  * @tc.name      : continuous loss of cache buffer frames with KEY_I_FRAME_INTERVAL 10
562  * @tc.desc      : function test
563  */
564 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_DISCARD_FUNC_0600, TestSize.Level1)
565 {
566     std::shared_ptr<VEncInnerSignal> vencInnerSignal = std::make_shared<VEncInnerSignal>();
567     auto vEncInnerSample = make_unique<VEncNdkInnerSample>(vencInnerSignal);
568     std::shared_ptr<VEncParamWithAttrCallbackTest> VencParamWithAttrCallback_
569         = std::make_shared<VEncParamWithAttrCallbackTest>(vencInnerSignal);
570     vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
571     vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DISCARD_FUNC_0600.h264";
572     vEncInnerSample->DEFAULT_WIDTH = 1280;
573     vEncInnerSample->DEFAULT_HEIGHT = 720;
574     vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
575     vEncInnerSample->isDiscardFrame = true;
576     vEncInnerSample->surfaceInput = true;
577     vEncInnerSample->discardMaxIndex = 14;
578     vEncInnerSample->discardMinIndex = 5;
579     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
580     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback(VencParamWithAttrCallback_));
581     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
582     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
583     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
584     vEncInnerSample->WaitForEOS();
585     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
586     ASSERT_EQ(true, vEncInnerSample->CheckOutputFrameCount());
587 }
588 
589 /**
590  * @tc.number    : VIDEO_ENCODE_DISCARD_FUNC_0700
591  * @tc.name      : retain the first frame with KEY_I_FRAME_INTERVAL 10
592  * @tc.desc      : function test
593  */
594 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_DISCARD_FUNC_0700, TestSize.Level1)
595 {
596     std::shared_ptr<VEncInnerSignal> vencInnerSignal = std::make_shared<VEncInnerSignal>();
597     auto vEncInnerSample = make_unique<VEncNdkInnerSample>(vencInnerSignal);
598     std::shared_ptr<VEncParamWithAttrCallbackTest> VencParamWithAttrCallback_
599         = std::make_shared<VEncParamWithAttrCallbackTest>(vencInnerSignal);
600     vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
601     vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DISCARD_FUNC_0700.h264";
602     vEncInnerSample->DEFAULT_WIDTH = 1280;
603     vEncInnerSample->DEFAULT_HEIGHT = 720;
604     vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
605     vEncInnerSample->isDiscardFrame = true;
606     vEncInnerSample->surfaceInput = true;
607     vEncInnerSample->discardMaxIndex = 25;
608     vEncInnerSample->discardMinIndex = 2;
609     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
610     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback(VencParamWithAttrCallback_));
611     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
612     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
613     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
614     vEncInnerSample->WaitForEOS();
615     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
616     ASSERT_EQ(true, vEncInnerSample->CheckOutputFrameCount());
617 }
618 
619 /**
620  * @tc.number    : VIDEO_ENCODE_DISCARD_FUNC_0800
621  * @tc.name      : keep the last frame with KEY_I_FRAME_INTERVAL 10
622  * @tc.desc      : function test
623  */
624 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_DISCARD_FUNC_0800, TestSize.Level1)
625 {
626     std::shared_ptr<VEncInnerSignal> vencInnerSignal = std::make_shared<VEncInnerSignal>();
627     auto vEncInnerSample = make_unique<VEncNdkInnerSample>(vencInnerSignal);
628     std::shared_ptr<VEncParamWithAttrCallbackTest> VencParamWithAttrCallback_
629         = std::make_shared<VEncParamWithAttrCallbackTest>(vencInnerSignal);
630     vEncInnerSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
631     vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_DISCARD_FUNC_0800.h264";
632     vEncInnerSample->DEFAULT_WIDTH = 1280;
633     vEncInnerSample->DEFAULT_HEIGHT = 720;
634     vEncInnerSample->DEFAULT_BITRATE_MODE = CBR;
635     vEncInnerSample->isDiscardFrame = true;
636     vEncInnerSample->surfaceInput = true;
637     vEncInnerSample->discardMaxIndex = 24;
638     vEncInnerSample->discardMinIndex = 1;
639     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
640     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback(VencParamWithAttrCallback_));
641     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
642     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
643     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
644     vEncInnerSample->WaitForEOS();
645     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->errCount);
646     ASSERT_EQ(true, vEncInnerSample->CheckOutputFrameCount());
647 }
648 
649 /**
650  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0010
651  * @tc.name      : h264 set VIDEO_ENCODE_ENABLE_WATERMARK is 0
652  * @tc.desc      : func test
653  */
654 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0010, TestSize.Level1)
655 {
656     auto vEncSample = make_unique<VEncNdkInnerSample>();
657     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
658         return;
659     }
660     BufferRequestConfig bufferConfig = {
661         .width = 300,
662         .height = 300,
663         .strideAlignment = 0x8,
664         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
665         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
666         .timeout = 0,
667     };
668     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
669     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0010.h264";
670     vEncSample->surfaceInput = true;
671     vEncSample->enableWaterMark = false;
672     vEncSample->videoCoordinateX = 100;
673     vEncSample->videoCoordinateY = 100;
674     vEncSample->videoCoordinateWidth = bufferConfig.width;
675     vEncSample->videoCoordinateHeight = bufferConfig.height;
676 
677     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
678     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
679     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
680     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
681     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
682     vEncSample->WaitForEOS();
683 }
684 
685 /**
686  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0020
687  * @tc.name      : h264 set VIDEO_ENCODE_ENABLE_WATERMARK is 1
688  * @tc.desc      : func test
689  */
690 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0020, TestSize.Level1)
691 {
692     auto vEncSample = make_unique<VEncNdkInnerSample>();
693     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
694         return;
695     }
696     BufferRequestConfig bufferConfig = {
697         .width = 128,
698         .height = 72,
699         .strideAlignment = 0x8,
700         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
701         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
702         .timeout = 0,
703     };
704     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
705     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0020.h264";
706     vEncSample->surfaceInput = true;
707     vEncSample->enableWaterMark = true;
708     vEncSample->videoCoordinateX = 100;
709     vEncSample->videoCoordinateY = 100;
710     vEncSample->videoCoordinateWidth = bufferConfig.width;
711     vEncSample->videoCoordinateHeight = bufferConfig.height;
712 
713     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
714     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
715     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
716     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
717     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
718     vEncSample->WaitForEOS();
719 }
720 
721 /**
722  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0030
723  * @tc.name      : h264 before config
724  * @tc.desc      : func test
725  */
726 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0030, TestSize.Level1)
727 {
728     auto vEncSample = make_unique<VEncNdkInnerSample>();
729     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
730         return;
731     }
732     BufferRequestConfig bufferConfig = {
733         .width = 128,
734         .height = 72,
735         .strideAlignment = 0x8,
736         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
737         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
738         .timeout = 0,
739     };
740     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
741     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0030.h264";
742     vEncSample->surfaceInput = true;
743     vEncSample->enableWaterMark = true;
744     vEncSample->videoCoordinateX = 100;
745     vEncSample->videoCoordinateY = 100;
746     vEncSample->videoCoordinateWidth = bufferConfig.width;
747     vEncSample->videoCoordinateHeight = bufferConfig.height;
748 
749     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
750     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
751     ASSERT_EQ(AVCS_ERR_INVALID_STATE, vEncSample->SetCustomBuffer(bufferConfig));
752     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
753     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
754     vEncSample->WaitForEOS();
755 }
756 
757 /**
758  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0040
759  * @tc.name      : h264 after start
760  * @tc.desc      : func test
761  */
762 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0040, TestSize.Level1)
763 {
764     auto vEncSample = make_unique<VEncNdkInnerSample>();
765     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
766         return;
767     }
768     BufferRequestConfig bufferConfig = {
769         .width = 128,
770         .height = 72,
771         .strideAlignment = 0x8,
772         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
773         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
774         .timeout = 0,
775     };
776     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
777     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0040.h264";
778     vEncSample->surfaceInput = true;
779     vEncSample->enableWaterMark = true;
780     vEncSample->videoCoordinateX = 100;
781     vEncSample->videoCoordinateY = 100;
782     vEncSample->videoCoordinateWidth = bufferConfig.width;
783     vEncSample->videoCoordinateHeight = bufferConfig.height;
784 
785     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
786     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
787     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
788     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
789     ASSERT_EQ(AVCS_ERR_INVALID_STATE, vEncSample->SetCustomBuffer(bufferConfig));
790     vEncSample->WaitForEOS();
791 }
792 
793 /**
794  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0050
795  * @tc.name      : h264 reset-config-SetCustomBuffer
796  * @tc.desc      : func test
797  */
798 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0050, TestSize.Level1)
799 {
800     auto vEncSample = make_unique<VEncNdkInnerSample>();
801     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
802         return;
803     }
804     BufferRequestConfig bufferConfig = {
805         .width = 128,
806         .height = 72,
807         .strideAlignment = 0x8,
808         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
809         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
810         .timeout = 0,
811     };
812     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
813     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0050.h264";
814     vEncSample->surfaceInput = true;
815     vEncSample->enableWaterMark = true;
816     vEncSample->videoCoordinateX = 100;
817     vEncSample->videoCoordinateY = 100;
818     vEncSample->videoCoordinateWidth = bufferConfig.width;
819     vEncSample->videoCoordinateHeight = bufferConfig.height;
820 
821     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
822     ASSERT_EQ(AV_ERR_OK, vEncSample->Reset());
823     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
824     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
825     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
826     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
827     vEncSample->WaitForEOS();
828 }
829 
830 /**
831  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0060
832  * @tc.name      : h264 before prepare, after config
833  * @tc.desc      : func test
834  */
835 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0060, TestSize.Level1)
836 {
837     auto vEncSample = make_unique<VEncNdkInnerSample>();
838     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
839         return;
840     }
841     BufferRequestConfig bufferConfig = {
842         .width = 128,
843         .height = 72,
844         .strideAlignment = 0x8,
845         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
846         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
847         .timeout = 0,
848     };
849     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
850     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0060.h264";
851     vEncSample->surfaceInput = true;
852     vEncSample->enableWaterMark = true;
853     vEncSample->videoCoordinateX = 100;
854     vEncSample->videoCoordinateY = 100;
855     vEncSample->videoCoordinateWidth = bufferConfig.width;
856     vEncSample->videoCoordinateHeight = bufferConfig.height;
857 
858     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
859     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
860     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
861     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
862     ASSERT_EQ(AV_ERR_OK, vEncSample->Prepare());
863     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
864     vEncSample->WaitForEOS();
865 }
866 
867 /**
868  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0070
869  * @tc.name      : h264 before start, after prepare
870  * @tc.desc      : func test
871  */
872 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0070, TestSize.Level1)
873 {
874     auto vEncSample = make_unique<VEncNdkInnerSample>();
875     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
876         return;
877     }
878     BufferRequestConfig bufferConfig = {
879         .width = 128,
880         .height = 72,
881         .strideAlignment = 0x8,
882         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
883         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
884         .timeout = 0,
885     };
886     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
887     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0070.h264";
888     vEncSample->surfaceInput = true;
889     vEncSample->enableWaterMark = true;
890     vEncSample->videoCoordinateX = 100;
891     vEncSample->videoCoordinateY = 100;
892     vEncSample->videoCoordinateWidth = bufferConfig.width;
893     vEncSample->videoCoordinateHeight = bufferConfig.height;
894 
895     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
896     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
897     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
898     ASSERT_EQ(AV_ERR_OK, vEncSample->Prepare());
899     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
900     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
901     vEncSample->WaitForEOS();
902 }
903 
904 /**
905  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0080
906  * @tc.name      : h264 two times SetCustomBuffer with different watermark contents
907  * @tc.desc      : func test
908  */
909 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0080, TestSize.Level1)
910 {
911     auto vEncSample = make_unique<VEncNdkInnerSample>();
912     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
913         return;
914     }
915     BufferRequestConfig bufferConfig = {
916         .width = 256,
917         .height = 144,
918         .strideAlignment = 0x8,
919         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
920         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
921         .timeout = 0,
922     };
923     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
924     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0080.h264";
925     vEncSample->surfaceInput = true;
926     vEncSample->enableWaterMark = true;
927     vEncSample->videoCoordinateX = 100;
928     vEncSample->videoCoordinateY = 100;
929     vEncSample->videoCoordinateWidth = bufferConfig.width;
930     vEncSample->videoCoordinateHeight = bufferConfig.height;
931 
932     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
933     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
934     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
935     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
936     vEncSample->WATER_MARK_DIR = "/data/test/media/256_144.rgba";
937     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
938     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
939     vEncSample->WaitForEOS();
940 }
941 
942 /**
943  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0090
944  * @tc.name      : h264 the watermark transparency is 0% and located in the bottom right corner with 128*72
945  * @tc.desc      : func test
946  */
947 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0090, TestSize.Level1)
948 {
949     auto vEncSample = make_unique<VEncNdkInnerSample>();
950     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
951         return;
952     }
953     BufferRequestConfig bufferConfig = {
954         .width = 128,
955         .height = 72,
956         .strideAlignment = 0x8,
957         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
958         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
959         .timeout = 0,
960     };
961     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
962     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0090.h264";
963     vEncSample->WATER_MARK_DIR = "/data/test/media/128_72_0.rgba";
964 
965     vEncSample->surfaceInput = true;
966     vEncSample->enableWaterMark = true;
967     vEncSample->videoCoordinateX = vEncSample->DEFAULT_WIDTH - bufferConfig.width;
968     vEncSample->videoCoordinateY = vEncSample->DEFAULT_HEIGHT - bufferConfig.height;
969     vEncSample->videoCoordinateWidth = bufferConfig.width;
970     vEncSample->videoCoordinateHeight = bufferConfig.height;
971 
972     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
973     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
974     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
975     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
976     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
977     vEncSample->WaitForEOS();
978 }
979 
980 /**
981  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0100
982  * @tc.name      : h264 the watermark transparency is 100% and located in the bottom right corner with 128*72
983  * @tc.desc      : func test
984  */
985 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0100, TestSize.Level1)
986 {
987     auto vEncSample = make_unique<VEncNdkInnerSample>();
988     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
989         return;
990     }
991     BufferRequestConfig bufferConfig = {
992         .width = 128,
993         .height = 72,
994         .strideAlignment = 0x8,
995         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
996         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
997         .timeout = 0,
998     };
999     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1000     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0100.h264";
1001     vEncSample->WATER_MARK_DIR = "/data/test/media/128_72_100.rgba";
1002 
1003     vEncSample->surfaceInput = true;
1004     vEncSample->enableWaterMark = true;
1005     vEncSample->videoCoordinateX = vEncSample->DEFAULT_WIDTH - bufferConfig.width;
1006     vEncSample->videoCoordinateY = vEncSample->DEFAULT_HEIGHT - bufferConfig.height;
1007     vEncSample->videoCoordinateWidth = bufferConfig.width;
1008     vEncSample->videoCoordinateHeight = bufferConfig.height;
1009 
1010     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
1011     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1012     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1013     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1014     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1015     vEncSample->WaitForEOS();
1016 }
1017 
1018 /**
1019  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0110
1020  * @tc.name      : h264 the watermark transparency is 25% and located in the bottom left corner with 256*144
1021  * @tc.desc      : func test
1022  */
1023 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0110, TestSize.Level0)
1024 {
1025     auto vEncSample = make_unique<VEncNdkInnerSample>();
1026     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1027         return;
1028     }
1029     BufferRequestConfig bufferConfig = {
1030         .width = 256,
1031         .height = 144,
1032         .strideAlignment = 0x8,
1033         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1034         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1035         .timeout = 0,
1036     };
1037     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1038     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0110.h264";
1039     vEncSample->WATER_MARK_DIR = "/data/test/media/256_144.rgba";
1040 
1041     vEncSample->surfaceInput = true;
1042     vEncSample->enableWaterMark = true;
1043     vEncSample->videoCoordinateX = 0;
1044     vEncSample->videoCoordinateY = vEncSample->DEFAULT_HEIGHT - bufferConfig.height;
1045     vEncSample->videoCoordinateWidth = bufferConfig.width;
1046     vEncSample->videoCoordinateHeight = bufferConfig.height;
1047 
1048     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
1049     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1050     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1051     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1052     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1053     vEncSample->WaitForEOS();
1054 }
1055 
1056 /**
1057  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0120
1058  * @tc.name      : h264 the watermark transparency is 25% and located in the bottom right corner with 256*144
1059  * @tc.desc      : func test
1060  */
1061 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0120, TestSize.Level1)
1062 {
1063     auto vEncSample = make_unique<VEncNdkInnerSample>();
1064     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1065         return;
1066     }
1067     BufferRequestConfig bufferConfig = {
1068         .width = 256,
1069         .height = 144,
1070         .strideAlignment = 0x8,
1071         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1072         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1073         .timeout = 0,
1074     };
1075     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1076     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0120.h264";
1077     vEncSample->WATER_MARK_DIR = "/data/test/media/256_144.rgba";
1078 
1079     vEncSample->surfaceInput = true;
1080     vEncSample->enableWaterMark = true;
1081     vEncSample->videoCoordinateX = vEncSample->DEFAULT_WIDTH - bufferConfig.width;
1082     vEncSample->videoCoordinateY = vEncSample->DEFAULT_HEIGHT - bufferConfig.height;
1083     vEncSample->videoCoordinateWidth = bufferConfig.width;
1084     vEncSample->videoCoordinateHeight = bufferConfig.height;
1085 
1086     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
1087     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1088     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1089     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1090     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1091     vEncSample->WaitForEOS();
1092 }
1093 
1094 
1095 /**
1096  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0130
1097  * @tc.name      : h264 the watermark transparency is 50% and located in the upper left corner with 200*100
1098  * @tc.desc      : func test
1099  */
1100 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0130, TestSize.Level1)
1101 {
1102     auto vEncSample = make_unique<VEncNdkInnerSample>();
1103     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1104         return;
1105     }
1106     BufferRequestConfig bufferConfig = {
1107         .width = 200,
1108         .height = 100,
1109         .strideAlignment = 0x8,
1110         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1111         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1112         .timeout = 0,
1113     };
1114     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1115     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0130.h264";
1116     vEncSample->WATER_MARK_DIR = "/data/test/media/200_100.rgba";
1117 
1118     vEncSample->surfaceInput = true;
1119     vEncSample->enableWaterMark = true;
1120     vEncSample->videoCoordinateX = 0;
1121     vEncSample->videoCoordinateY = 0;
1122     vEncSample->videoCoordinateWidth = bufferConfig.width;
1123     vEncSample->videoCoordinateHeight = bufferConfig.height;
1124 
1125     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
1126     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1127     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1128     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1129     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1130     vEncSample->WaitForEOS();
1131 }
1132 
1133 /**
1134  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0140
1135  * @tc.name      : h264 the watermark transparency is 50% and located in the upper right corner with 200*100
1136  * @tc.desc      : func test
1137  */
1138 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0140, TestSize.Level1)
1139 {
1140     auto vEncSample = make_unique<VEncNdkInnerSample>();
1141     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1142         return;
1143     }
1144     BufferRequestConfig bufferConfig = {
1145         .width = 200,
1146         .height = 100,
1147         .strideAlignment = 0x8,
1148         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1149         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1150         .timeout = 0,
1151     };
1152     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1153     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0140.h264";
1154     vEncSample->WATER_MARK_DIR = "/data/test/media/200_100.rgba";
1155 
1156     vEncSample->surfaceInput = true;
1157     vEncSample->enableWaterMark = true;
1158     vEncSample->videoCoordinateX = vEncSample->DEFAULT_WIDTH - bufferConfig.width;
1159     vEncSample->videoCoordinateY = 0;
1160     vEncSample->videoCoordinateWidth = bufferConfig.width;
1161     vEncSample->videoCoordinateHeight = bufferConfig.height;
1162 
1163     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
1164     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1165     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1166     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1167     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1168     vEncSample->WaitForEOS();
1169 }
1170 
1171 /**
1172  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0150
1173  * @tc.name      : h264 the watermark transparency is 50% and located in the middle with 200*100
1174  * @tc.desc      : func test
1175  */
1176 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0150, TestSize.Level1)
1177 {
1178     auto vEncSample = make_unique<VEncNdkInnerSample>();
1179     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1180         return;
1181     }
1182     BufferRequestConfig bufferConfig = {
1183         .width = 200,
1184         .height = 100,
1185         .strideAlignment = 0x8,
1186         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1187         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1188         .timeout = 0,
1189     };
1190     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1191     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0150.h264";
1192     vEncSample->WATER_MARK_DIR = "/data/test/media/200_100.rgba";
1193 
1194     vEncSample->surfaceInput = true;
1195     vEncSample->enableWaterMark = true;
1196     vEncSample->videoCoordinateX = (vEncSample->DEFAULT_WIDTH - bufferConfig.width) / 2;
1197     vEncSample->videoCoordinateY = (vEncSample->DEFAULT_HEIGHT - bufferConfig.height) / 2;
1198     vEncSample->videoCoordinateWidth = bufferConfig.width;
1199     vEncSample->videoCoordinateHeight = bufferConfig.height;
1200 
1201     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
1202     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1203     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1204     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1205     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1206     vEncSample->WaitForEOS();
1207 }
1208 
1209 /**
1210  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0160
1211  * @tc.name      : h264 the watermark transparency is 0% with 1280*720
1212  * @tc.desc      : func test
1213  */
1214 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0160, TestSize.Level1)
1215 {
1216     auto vEncSample = make_unique<VEncNdkInnerSample>();
1217     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1218         return;
1219     }
1220     BufferRequestConfig bufferConfig = {
1221         .width = 1280,
1222         .height = 720,
1223         .strideAlignment = 0x8,
1224         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1225         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1226         .timeout = 0,
1227     };
1228     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1229     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0160.h264";
1230     vEncSample->WATER_MARK_DIR = "/data/test/media/1280_720_0.rgba";
1231 
1232     vEncSample->surfaceInput = true;
1233     vEncSample->enableWaterMark = true;
1234     vEncSample->videoCoordinateX = 0;
1235     vEncSample->videoCoordinateY = 0;
1236     vEncSample->videoCoordinateWidth = bufferConfig.width;
1237     vEncSample->videoCoordinateHeight = bufferConfig.height;
1238 
1239     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
1240     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1241     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1242     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1243     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1244     vEncSample->WaitForEOS();
1245 }
1246 
1247 /**
1248  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0170
1249  * @tc.name      : h264 the watermark transparency is 100% with 1280*720
1250  * @tc.desc      : func test
1251  */
1252 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0170, TestSize.Level1)
1253 {
1254     auto vEncSample = make_unique<VEncNdkInnerSample>();
1255     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1256         return;
1257     }
1258     BufferRequestConfig bufferConfig = {
1259         .width = 1280,
1260         .height = 720,
1261         .strideAlignment = 0x8,
1262         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1263         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1264         .timeout = 0,
1265     };
1266     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1267     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0170.h264";
1268     vEncSample->WATER_MARK_DIR = "/data/test/media/1280_720_100.rgba";
1269 
1270     vEncSample->surfaceInput = true;
1271     vEncSample->enableWaterMark = true;
1272     vEncSample->videoCoordinateX = 0;
1273     vEncSample->videoCoordinateY = 0;
1274     vEncSample->videoCoordinateWidth = bufferConfig.width;
1275     vEncSample->videoCoordinateHeight = bufferConfig.height;
1276 
1277     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
1278     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1279     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1280     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1281     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1282     vEncSample->WaitForEOS();
1283 }
1284 
1285 /**
1286  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0180
1287  * @tc.name      : h265 set VIDEO_ENCODE_ENABLE_WATERMARK is 0
1288  * @tc.desc      : func test
1289  */
1290 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0180, TestSize.Level1)
1291 {
1292     auto vEncSample = make_unique<VEncNdkInnerSample>();
1293     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1294         return;
1295     }
1296     BufferRequestConfig bufferConfig = {
1297         .width = 128,
1298         .height = 72,
1299         .strideAlignment = 0x8,
1300         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1301         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1302         .timeout = 0,
1303     };
1304     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1305     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0180.h264";
1306     vEncSample->surfaceInput = true;
1307     vEncSample->enableWaterMark = false;
1308     vEncSample->videoCoordinateX = 100;
1309     vEncSample->videoCoordinateY = 100;
1310     vEncSample->videoCoordinateWidth = bufferConfig.width;
1311     vEncSample->videoCoordinateHeight = bufferConfig.height;
1312 
1313     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1314     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1315     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1316     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1317     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1318     vEncSample->WaitForEOS();
1319 }
1320 
1321 /**
1322  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0190
1323  * @tc.name      : h265 set VIDEO_ENCODE_ENABLE_WATERMARK is 1
1324  * @tc.desc      : func test
1325  */
1326 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0190, TestSize.Level1)
1327 {
1328     auto vEncSample = make_unique<VEncNdkInnerSample>();
1329     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1330         return;
1331     }
1332     BufferRequestConfig bufferConfig = {
1333         .width = 128,
1334         .height = 72,
1335         .strideAlignment = 0x8,
1336         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1337         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1338         .timeout = 0,
1339     };
1340     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1341     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0190.h264";
1342     vEncSample->surfaceInput = true;
1343     vEncSample->enableWaterMark = true;
1344     vEncSample->videoCoordinateX = 100;
1345     vEncSample->videoCoordinateY = 100;
1346     vEncSample->videoCoordinateWidth = bufferConfig.width;
1347     vEncSample->videoCoordinateHeight = bufferConfig.height;
1348 
1349     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1350     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1351     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1352     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1353     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1354     vEncSample->WaitForEOS();
1355 }
1356 
1357 /**
1358  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0200
1359  * @tc.name      : h265 before config
1360  * @tc.desc      : func test
1361  */
1362 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0200, TestSize.Level1)
1363 {
1364     auto vEncSample = make_unique<VEncNdkInnerSample>();
1365     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1366         return;
1367     }
1368     BufferRequestConfig bufferConfig = {
1369         .width = 128,
1370         .height = 72,
1371         .strideAlignment = 0x8,
1372         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1373         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1374         .timeout = 0,
1375     };
1376     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1377     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0200.h264";
1378     vEncSample->surfaceInput = true;
1379     vEncSample->enableWaterMark = true;
1380     vEncSample->videoCoordinateX = 100;
1381     vEncSample->videoCoordinateY = 100;
1382     vEncSample->videoCoordinateWidth = bufferConfig.width;
1383     vEncSample->videoCoordinateHeight = bufferConfig.height;
1384 
1385     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1386     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1387     ASSERT_EQ(AVCS_ERR_INVALID_STATE, vEncSample->SetCustomBuffer(bufferConfig));
1388     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1389     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1390     vEncSample->WaitForEOS();
1391 }
1392 
1393 /**
1394  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0210
1395  * @tc.name      : h265 after start
1396  * @tc.desc      : func test
1397  */
1398 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0210, TestSize.Level1)
1399 {
1400     auto vEncSample = make_unique<VEncNdkInnerSample>();
1401     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1402         return;
1403     }
1404     BufferRequestConfig bufferConfig = {
1405         .width = 128,
1406         .height = 72,
1407         .strideAlignment = 0x8,
1408         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1409         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1410         .timeout = 0,
1411     };
1412     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1413     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0210.h264";
1414     vEncSample->surfaceInput = true;
1415     vEncSample->enableWaterMark = true;
1416     vEncSample->videoCoordinateX = 100;
1417     vEncSample->videoCoordinateY = 100;
1418     vEncSample->videoCoordinateWidth = bufferConfig.width;
1419     vEncSample->videoCoordinateHeight = bufferConfig.height;
1420 
1421     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1422     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1423     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1424     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1425     ASSERT_EQ(AVCS_ERR_INVALID_STATE, vEncSample->SetCustomBuffer(bufferConfig));
1426     vEncSample->WaitForEOS();
1427 }
1428 
1429 /**
1430  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0220
1431  * @tc.name      : h265 reset-config-SetCustomBuffer
1432  * @tc.desc      : func test
1433  */
1434 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0220, TestSize.Level1)
1435 {
1436     auto vEncSample = make_unique<VEncNdkInnerSample>();
1437     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1438         return;
1439     }
1440     BufferRequestConfig bufferConfig = {
1441         .width = 128,
1442         .height = 72,
1443         .strideAlignment = 0x8,
1444         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1445         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1446         .timeout = 0,
1447     };
1448     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1449     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0220.h264";
1450     vEncSample->surfaceInput = true;
1451     vEncSample->enableWaterMark = true;
1452     vEncSample->videoCoordinateX = 100;
1453     vEncSample->videoCoordinateY = 100;
1454     vEncSample->videoCoordinateWidth = bufferConfig.width;
1455     vEncSample->videoCoordinateHeight = bufferConfig.height;
1456 
1457     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1458     ASSERT_EQ(AV_ERR_OK, vEncSample->Reset());
1459     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1460     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1461     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1462     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1463     vEncSample->WaitForEOS();
1464 }
1465 
1466 /**
1467  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0230
1468  * @tc.name      : h265 before prepare, after config
1469  * @tc.desc      : func test
1470  */
1471 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0230, TestSize.Level1)
1472 {
1473     auto vEncSample = make_unique<VEncNdkInnerSample>();
1474     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1475         return;
1476     }
1477     BufferRequestConfig bufferConfig = {
1478         .width = 128,
1479         .height = 72,
1480         .strideAlignment = 0x8,
1481         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1482         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1483         .timeout = 0,
1484     };
1485     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1486     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0230.h264";
1487     vEncSample->surfaceInput = true;
1488     vEncSample->enableWaterMark = true;
1489     vEncSample->videoCoordinateX = 100;
1490     vEncSample->videoCoordinateY = 100;
1491     vEncSample->videoCoordinateWidth = bufferConfig.width;
1492     vEncSample->videoCoordinateHeight = bufferConfig.height;
1493 
1494     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1495     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1496     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1497     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1498     ASSERT_EQ(AV_ERR_OK, vEncSample->Prepare());
1499     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1500     vEncSample->WaitForEOS();
1501 }
1502 
1503 /**
1504  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0240
1505  * @tc.name      : h265 before start, after prepare
1506  * @tc.desc      : func test
1507  */
1508 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0240, TestSize.Level1)
1509 {
1510     auto vEncSample = make_unique<VEncNdkInnerSample>();
1511     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1512         return;
1513     }
1514     BufferRequestConfig bufferConfig = {
1515         .width = 128,
1516         .height = 72,
1517         .strideAlignment = 0x8,
1518         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1519         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1520         .timeout = 0,
1521     };
1522     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1523     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0240.h264";
1524     vEncSample->surfaceInput = true;
1525     vEncSample->enableWaterMark = true;
1526     vEncSample->videoCoordinateX = 100;
1527     vEncSample->videoCoordinateY = 100;
1528     vEncSample->videoCoordinateWidth = bufferConfig.width;
1529     vEncSample->videoCoordinateHeight = bufferConfig.height;
1530 
1531     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1532     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1533     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1534     ASSERT_EQ(AV_ERR_OK, vEncSample->Prepare());
1535     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1536     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1537     vEncSample->WaitForEOS();
1538 }
1539 
1540 /**
1541  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0250
1542  * @tc.name      : h265 two times SetCustomBuffer with different watermark contents
1543  * @tc.desc      : func test
1544  */
1545 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0250, TestSize.Level1)
1546 {
1547     auto vEncSample = make_unique<VEncNdkInnerSample>();
1548     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1549         return;
1550     }
1551     BufferRequestConfig bufferConfig = {
1552         .width = 256,
1553         .height = 144,
1554         .strideAlignment = 0x8,
1555         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1556         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1557         .timeout = 0,
1558     };
1559     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1560     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0250.h264";
1561     vEncSample->surfaceInput = true;
1562     vEncSample->enableWaterMark = true;
1563     vEncSample->videoCoordinateX = 100;
1564     vEncSample->videoCoordinateY = 100;
1565     vEncSample->videoCoordinateWidth = bufferConfig.width;
1566     vEncSample->videoCoordinateHeight = bufferConfig.height;
1567 
1568     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1569     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1570     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1571     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1572     vEncSample->WATER_MARK_DIR = "/data/test/media/256_144.rgba";
1573     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1574     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1575     vEncSample->WaitForEOS();
1576 }
1577 
1578 /**
1579  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0260
1580  * @tc.name      : h265 the watermark transparency is 0% and located in the bottom right corner with 128*72
1581  * @tc.desc      : func test
1582  */
1583 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0260, TestSize.Level1)
1584 {
1585     auto vEncSample = make_unique<VEncNdkInnerSample>();
1586     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1587         return;
1588     }
1589     BufferRequestConfig bufferConfig = {
1590         .width = 128,
1591         .height = 72,
1592         .strideAlignment = 0x8,
1593         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1594         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1595         .timeout = 0,
1596     };
1597     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1598     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0260.h264";
1599     vEncSample->WATER_MARK_DIR = "/data/test/media/128_72_0.rgba";
1600 
1601     vEncSample->surfaceInput = true;
1602     vEncSample->enableWaterMark = true;
1603     vEncSample->videoCoordinateX = vEncSample->DEFAULT_WIDTH - bufferConfig.width;
1604     vEncSample->videoCoordinateY = vEncSample->DEFAULT_HEIGHT - bufferConfig.height;
1605     vEncSample->videoCoordinateWidth = bufferConfig.width;
1606     vEncSample->videoCoordinateHeight = bufferConfig.height;
1607 
1608     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1609     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1610     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1611     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1612     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1613     vEncSample->WaitForEOS();
1614 }
1615 
1616 /**
1617  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0270
1618  * @tc.name      : h265 the watermark transparency is 100% and located in the bottom right corner with 128*72
1619  * @tc.desc      : func test
1620  */
1621 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0270, TestSize.Level1)
1622 {
1623     auto vEncSample = make_unique<VEncNdkInnerSample>();
1624     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1625         return;
1626     }
1627     BufferRequestConfig bufferConfig = {
1628         .width = 128,
1629         .height = 72,
1630         .strideAlignment = 0x8,
1631         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1632         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1633         .timeout = 0,
1634     };
1635     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1636     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0270.h264";
1637     vEncSample->WATER_MARK_DIR = "/data/test/media/128_72_100.rgba";
1638 
1639     vEncSample->surfaceInput = true;
1640     vEncSample->enableWaterMark = true;
1641     vEncSample->videoCoordinateX = vEncSample->DEFAULT_WIDTH - bufferConfig.width;
1642     vEncSample->videoCoordinateY = vEncSample->DEFAULT_HEIGHT - bufferConfig.height;
1643     vEncSample->videoCoordinateWidth = bufferConfig.width;
1644     vEncSample->videoCoordinateHeight = bufferConfig.height;
1645 
1646     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1647     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1648     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1649     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1650     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1651     vEncSample->WaitForEOS();
1652 }
1653 
1654 /**
1655  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0280
1656  * @tc.name      : h265 the watermark transparency is 25% and located in the bottom left corner with 256*144
1657  * @tc.desc      : func test
1658  */
1659 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0280, TestSize.Level0)
1660 {
1661     auto vEncSample = make_unique<VEncNdkInnerSample>();
1662     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1663         return;
1664     }
1665     BufferRequestConfig bufferConfig = {
1666         .width = 256,
1667         .height = 144,
1668         .strideAlignment = 0x8,
1669         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1670         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1671         .timeout = 0,
1672     };
1673     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1674     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0280.h264";
1675     vEncSample->WATER_MARK_DIR = "/data/test/media/256_144.rgba";
1676 
1677     vEncSample->surfaceInput = true;
1678     vEncSample->enableWaterMark = true;
1679     vEncSample->videoCoordinateX = 0;
1680     vEncSample->videoCoordinateY = vEncSample->DEFAULT_HEIGHT - bufferConfig.height;
1681     vEncSample->videoCoordinateWidth = bufferConfig.width;
1682     vEncSample->videoCoordinateHeight = bufferConfig.height;
1683 
1684     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1685     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1686     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1687     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1688     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1689     vEncSample->WaitForEOS();
1690 }
1691 
1692 /**
1693  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0290
1694  * @tc.name      : h265 the watermark transparency is 25% and located in the bottom right corner with 256*144
1695  * @tc.desc      : func test
1696  */
1697 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0290, TestSize.Level1)
1698 {
1699     auto vEncSample = make_unique<VEncNdkInnerSample>();
1700     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1701         return;
1702     }
1703     BufferRequestConfig bufferConfig = {
1704         .width = 256,
1705         .height = 144,
1706         .strideAlignment = 0x8,
1707         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1708         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1709         .timeout = 0,
1710     };
1711     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1712     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0290.h264";
1713     vEncSample->WATER_MARK_DIR = "/data/test/media/256_144.rgba";
1714 
1715     vEncSample->surfaceInput = true;
1716     vEncSample->enableWaterMark = true;
1717     vEncSample->videoCoordinateX = vEncSample->DEFAULT_WIDTH - bufferConfig.width;
1718     vEncSample->videoCoordinateY = vEncSample->DEFAULT_HEIGHT - bufferConfig.height;
1719     vEncSample->videoCoordinateWidth = bufferConfig.width;
1720     vEncSample->videoCoordinateHeight = bufferConfig.height;
1721 
1722     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1723     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1724     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1725     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1726     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1727     vEncSample->WaitForEOS();
1728 }
1729 
1730 
1731 /**
1732  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0300
1733  * @tc.name      : h265 the watermark transparency is 50% and located in the upper left corner with 200*100
1734  * @tc.desc      : func test
1735  */
1736 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0300, TestSize.Level1)
1737 {
1738     auto vEncSample = make_unique<VEncNdkInnerSample>();
1739     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1740         return;
1741     }
1742     BufferRequestConfig bufferConfig = {
1743         .width = 200,
1744         .height = 100,
1745         .strideAlignment = 0x8,
1746         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1747         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1748         .timeout = 0,
1749     };
1750     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1751     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0300.h264";
1752     vEncSample->WATER_MARK_DIR = "/data/test/media/200_100.rgba";
1753 
1754     vEncSample->surfaceInput = true;
1755     vEncSample->enableWaterMark = true;
1756     vEncSample->videoCoordinateX = 0;
1757     vEncSample->videoCoordinateY = 0;
1758     vEncSample->videoCoordinateWidth = bufferConfig.width;
1759     vEncSample->videoCoordinateHeight = bufferConfig.height;
1760 
1761     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1762     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1763     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1764     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1765     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1766     vEncSample->WaitForEOS();
1767 }
1768 
1769 /**
1770  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0310
1771  * @tc.name      : h265 the watermark transparency is 50% and located in the upper right corner with 200*100
1772  * @tc.desc      : func test
1773  */
1774 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0310, TestSize.Level1)
1775 {
1776     auto vEncSample = make_unique<VEncNdkInnerSample>();
1777     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1778         return;
1779     }
1780     BufferRequestConfig bufferConfig = {
1781         .width = 200,
1782         .height = 100,
1783         .strideAlignment = 0x8,
1784         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1785         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1786         .timeout = 0,
1787     };
1788     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1789     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0310.h264";
1790     vEncSample->WATER_MARK_DIR = "/data/test/media/200_100.rgba";
1791 
1792     vEncSample->surfaceInput = true;
1793     vEncSample->enableWaterMark = true;
1794     vEncSample->videoCoordinateX = vEncSample->DEFAULT_WIDTH - bufferConfig.width;
1795     vEncSample->videoCoordinateY = 0;
1796     vEncSample->videoCoordinateWidth = bufferConfig.width;
1797     vEncSample->videoCoordinateHeight = bufferConfig.height;
1798 
1799     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1800     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1801     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1802     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1803     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1804     vEncSample->WaitForEOS();
1805 }
1806 
1807 /**
1808  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0320
1809  * @tc.name      : h265 the watermark transparency is 50% and located in the middle with 200*100
1810  * @tc.desc      : func test
1811  */
1812 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0320, TestSize.Level1)
1813 {
1814     auto vEncSample = make_unique<VEncNdkInnerSample>();
1815     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1816         return;
1817     }
1818     BufferRequestConfig bufferConfig = {
1819         .width = 200,
1820         .height = 100,
1821         .strideAlignment = 0x8,
1822         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1823         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1824         .timeout = 0,
1825     };
1826     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1827     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0320.h264";
1828     vEncSample->WATER_MARK_DIR = "/data/test/media/200_100.rgba";
1829 
1830     vEncSample->surfaceInput = true;
1831     vEncSample->enableWaterMark = true;
1832     vEncSample->videoCoordinateX = (vEncSample->DEFAULT_WIDTH - bufferConfig.width) / 2;
1833     vEncSample->videoCoordinateY = (vEncSample->DEFAULT_HEIGHT - bufferConfig.height) / 2;
1834     vEncSample->videoCoordinateWidth = bufferConfig.width;
1835     vEncSample->videoCoordinateHeight = bufferConfig.height;
1836 
1837     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1838     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1839     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1840     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1841     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1842     vEncSample->WaitForEOS();
1843 }
1844 
1845 /**
1846  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0330
1847  * @tc.name      : h265 the watermark transparency is 0% with 1280*720
1848  * @tc.desc      : func test
1849  */
1850 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0330, TestSize.Level1)
1851 {
1852     auto vEncSample = make_unique<VEncNdkInnerSample>();
1853     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1854         return;
1855     }
1856     BufferRequestConfig bufferConfig = {
1857         .width = 1280,
1858         .height = 720,
1859         .strideAlignment = 0x8,
1860         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1861         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1862         .timeout = 0,
1863     };
1864     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1865     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0330.h264";
1866     vEncSample->WATER_MARK_DIR = "/data/test/media/1280_720_0.rgba";
1867 
1868     vEncSample->surfaceInput = true;
1869     vEncSample->enableWaterMark = true;
1870     vEncSample->videoCoordinateX = 0;
1871     vEncSample->videoCoordinateY = 0;
1872     vEncSample->videoCoordinateWidth = bufferConfig.width;
1873     vEncSample->videoCoordinateHeight = bufferConfig.height;
1874 
1875     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1876     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1877     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1878     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1879     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1880     vEncSample->WaitForEOS();
1881 }
1882 
1883 /**
1884  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0340
1885  * @tc.name      : h265 the watermark transparency is 100% with 1280*720
1886  * @tc.desc      : func test
1887  */
1888 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0340, TestSize.Level1)
1889 {
1890     auto vEncSample = make_unique<VEncNdkInnerSample>();
1891     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1892         return;
1893     }
1894     BufferRequestConfig bufferConfig = {
1895         .width = 1280,
1896         .height = 720,
1897         .strideAlignment = 0x8,
1898         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1899         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1900         .timeout = 0,
1901     };
1902     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1903     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0340.h264";
1904     vEncSample->WATER_MARK_DIR = "/data/test/media/1280_720_100.rgba";
1905 
1906     vEncSample->surfaceInput = true;
1907     vEncSample->enableWaterMark = true;
1908     vEncSample->videoCoordinateX = 0;
1909     vEncSample->videoCoordinateY = 0;
1910     vEncSample->videoCoordinateWidth = bufferConfig.width;
1911     vEncSample->videoCoordinateHeight = bufferConfig.height;
1912 
1913     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1914     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1915     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1916     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1917     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1918     vEncSample->WaitForEOS();
1919 }
1920 
1921 /**
1922  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0350
1923  * @tc.name      : h265 the watermark transparency is 50% with 1280*720
1924  * @tc.desc      : func test
1925  */
1926 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0350, TestSize.Level1)
1927 {
1928     auto vEncSample = make_unique<VEncNdkInnerSample>();
1929     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1930         return;
1931     }
1932     BufferRequestConfig bufferConfig = {
1933         .width = 1280,
1934         .height = 720,
1935         .strideAlignment = 0x8,
1936         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1937         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1938         .timeout = 0,
1939     };
1940     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1941     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0350.h265";
1942     vEncSample->WATER_MARK_DIR = "/data/test/media/1280_720_50.rgba";
1943 
1944     vEncSample->surfaceInput = true;
1945     vEncSample->enableWaterMark = true;
1946     vEncSample->videoCoordinateX = 0;
1947     vEncSample->videoCoordinateY = 0;
1948     vEncSample->videoCoordinateWidth = bufferConfig.width;
1949     vEncSample->videoCoordinateHeight = bufferConfig.height;
1950 
1951     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
1952     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1953     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1954     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1955     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1956     vEncSample->WaitForEOS();
1957 }
1958 
1959 /**
1960  * @tc.number    : VIDEO_ENCODE_INNER_WATERMARK_FUNC_0360
1961  * @tc.name      : h264 the watermark transparency is 50% with 1280*720
1962  * @tc.desc      : func test
1963  */
1964 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_WATERMARK_FUNC_0360, TestSize.Level1)
1965 {
1966     auto vEncSample = make_unique<VEncNdkInnerSample>();
1967     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
1968         return;
1969     }
1970     BufferRequestConfig bufferConfig = {
1971         .width = 1280,
1972         .height = 720,
1973         .strideAlignment = 0x8,
1974         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
1975         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
1976         .timeout = 0,
1977     };
1978     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
1979     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_WATERMARK_FUNC_0360.h264";
1980     vEncSample->WATER_MARK_DIR = "/data/test/media/1280_720_50.rgba";
1981 
1982     vEncSample->surfaceInput = true;
1983     vEncSample->enableWaterMark = true;
1984     vEncSample->videoCoordinateX = 0;
1985     vEncSample->videoCoordinateY = 0;
1986     vEncSample->videoCoordinateWidth = bufferConfig.width;
1987     vEncSample->videoCoordinateHeight = bufferConfig.height;
1988 
1989     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
1990     ASSERT_EQ(AV_ERR_OK, vEncSample->SetCallback());
1991     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
1992     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
1993     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
1994     vEncSample->WaitForEOS();
1995 }
1996 
1997 /**
1998  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0010
1999  * @tc.name      : h265 encode config 320_240 surface change 640_480 1280_720 1920_1080
2000  * @tc.desc      : function test
2001  */
2002 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0010, TestSize.Level1)
2003 {
2004     if (!access("/system/lib64/media/", 0)) {
2005         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2006         vEncInnerSample->DEFAULT_WIDTH = 320;
2007         vEncInnerSample->DEFAULT_HEIGHT = 240;
2008         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0010.h265";
2009         vEncInnerSample->surfaceInput = true;
2010         vEncInnerSample->readMultiFiles = true;
2011         vEncInnerSample->fileInfos.push_back(file_640_480_rgba);
2012         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12);
2013         vEncInnerSample->fileInfos.push_back(file_1920_1080_nv21);
2014         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2015         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2016         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2017         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2018         vEncInnerSample->WaitForEOS();
2019     }
2020 }
2021 
2022 /**
2023  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0020
2024  * @tc.name      : h265 encode config 1280_720 surface change 640_480 1280_720 1920_1080
2025  * @tc.desc      : function test
2026  */
2027 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0020, TestSize.Level1)
2028 {
2029     if (!access("/system/lib64/media/", 0)) {
2030         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2031         vEncInnerSample->DEFAULT_WIDTH = 1280;
2032         vEncInnerSample->DEFAULT_HEIGHT = 720;
2033         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0020.h265";
2034         vEncInnerSample->surfaceInput = true;
2035         vEncInnerSample->readMultiFiles = true;
2036         vEncInnerSample->fileInfos.push_back(file_640_480_rgba);
2037         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12);
2038         vEncInnerSample->fileInfos.push_back(file_1920_1080_nv21);
2039         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2040         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2041         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2042         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2043         vEncInnerSample->WaitForEOS();
2044     }
2045 }
2046 
2047 /**
2048  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0030
2049  * @tc.name      : h265 encode config 3840_2160 surface change 640_480 1280_536 1280_720 1920_816 1920_1080 3840_2160
2050  * @tc.desc      : function test
2051  */
2052 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0030, TestSize.Level0)
2053 {
2054     if (!access("/system/lib64/media/", 0)) {
2055         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2056         vEncInnerSample->DEFAULT_WIDTH = 3840;
2057         vEncInnerSample->DEFAULT_HEIGHT = 2160;
2058         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0030.h265";
2059         vEncInnerSample->surfaceInput = true;
2060         vEncInnerSample->readMultiFiles = true;
2061         vEncInnerSample->fileInfos.push_back(file_640_480_rgba);
2062         vEncInnerSample->fileInfos.push_back(file_1280_536_nv21);
2063         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12);
2064         vEncInnerSample->fileInfos.push_back(file_1920_816_rgba);
2065         vEncInnerSample->fileInfos.push_back(file_1920_1080_nv21);
2066         vEncInnerSample->fileInfos.push_back(file_3840_2160_nv12);
2067         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2068         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2069         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2070         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2071         vEncInnerSample->WaitForEOS();
2072     }
2073 }
2074 
2075 /**
2076  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0040
2077  * @tc.name      : h265 encode config 1920_1080 surface change 1920_1080 1080_1920 1280_1280
2078  * @tc.desc      : function test
2079  */
2080 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0040, TestSize.Level1)
2081 {
2082     if (!access("/system/lib64/media/", 0)) {
2083         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2084         vEncInnerSample->DEFAULT_WIDTH = 1920;
2085         vEncInnerSample->DEFAULT_HEIGHT = 1080;
2086         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0040.h265";
2087         vEncInnerSample->surfaceInput = true;
2088         vEncInnerSample->readMultiFiles = true;
2089         vEncInnerSample->fileInfos.push_back(file_1920_1080_nv21);
2090         vEncInnerSample->fileInfos.push_back(file_1080_1920_nv12);
2091         vEncInnerSample->fileInfos.push_back(file_1280_1280_nv12);
2092         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2093         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2094         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2095         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2096         vEncInnerSample->WaitForEOS();
2097     }
2098 }
2099 
2100 /**
2101  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0050
2102  * @tc.name      : h264 encode config 320_240 surface change 640_480 1280_720 1920_1080
2103  * @tc.desc      : function test
2104  */
2105 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0050, TestSize.Level1)
2106 {
2107     if (!access("/system/lib64/media/", 0)) {
2108         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2109         vEncInnerSample->DEFAULT_WIDTH = 320;
2110         vEncInnerSample->DEFAULT_HEIGHT = 240;
2111         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0050.h264";
2112         vEncInnerSample->surfaceInput = true;
2113         vEncInnerSample->readMultiFiles = true;
2114         vEncInnerSample->fileInfos.push_back(file_640_480_rgba);
2115         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12);
2116         vEncInnerSample->fileInfos.push_back(file_1920_1080_nv21);
2117         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
2118         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2119         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2120         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2121         vEncInnerSample->WaitForEOS();
2122     }
2123 }
2124 
2125 /**
2126  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0060
2127  * @tc.name      : h264 encode config 1280_720 surface change 640_480 1280_720 1920_1080
2128  * @tc.desc      : function test
2129  */
2130 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0060, TestSize.Level1)
2131 {
2132     if (!access("/system/lib64/media/", 0)) {
2133         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2134         vEncInnerSample->DEFAULT_WIDTH = 1280;
2135         vEncInnerSample->DEFAULT_HEIGHT = 720;
2136         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0060.h264";
2137         vEncInnerSample->surfaceInput = true;
2138         vEncInnerSample->readMultiFiles = true;
2139         vEncInnerSample->fileInfos.push_back(file_640_480_rgba);
2140         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12);
2141         vEncInnerSample->fileInfos.push_back(file_1920_1080_nv21);
2142         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
2143         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2144         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2145         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2146         vEncInnerSample->WaitForEOS();
2147     }
2148 }
2149 
2150 /**
2151  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0070
2152  * @tc.name      : h264 encode config 3840_2160 surface change 640_480 1280_536 1280_720 1920_816 1920_1080 3840_2160
2153  * @tc.desc      : function test
2154  */
2155 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0070, TestSize.Level0)
2156 {
2157     if (!access("/system/lib64/media/", 0)) {
2158         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2159         vEncInnerSample->DEFAULT_WIDTH = 3840;
2160         vEncInnerSample->DEFAULT_HEIGHT = 2160;
2161         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0070.h264";
2162         vEncInnerSample->surfaceInput = true;
2163         vEncInnerSample->readMultiFiles = true;
2164         vEncInnerSample->fileInfos.push_back(file_640_480_rgba);
2165         vEncInnerSample->fileInfos.push_back(file_1280_536_nv21);
2166         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12);
2167         vEncInnerSample->fileInfos.push_back(file_1920_816_rgba);
2168         vEncInnerSample->fileInfos.push_back(file_1920_1080_nv21);
2169         vEncInnerSample->fileInfos.push_back(file_3840_2160_nv12);
2170         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
2171         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2172         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2173         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2174         vEncInnerSample->WaitForEOS();
2175     }
2176 }
2177 
2178 /**
2179  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0080
2180  * @tc.name      : h264 encode config 1920_1080 surface change 1920_1080 1080_1920 1280_1280
2181  * @tc.desc      : function test
2182  */
2183 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0080, TestSize.Level1)
2184 {
2185     if (!access("/system/lib64/media/", 0)) {
2186         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2187         vEncInnerSample->DEFAULT_WIDTH = 1920;
2188         vEncInnerSample->DEFAULT_HEIGHT = 1080;
2189         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0080.h264";
2190         vEncInnerSample->surfaceInput = true;
2191         vEncInnerSample->readMultiFiles = true;
2192         vEncInnerSample->fileInfos.push_back(file_1920_1080_nv21);
2193         vEncInnerSample->fileInfos.push_back(file_1080_1920_nv12);
2194         vEncInnerSample->fileInfos.push_back(file_1280_1280_nv12);
2195         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecName));
2196         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2197         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2198         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2199         vEncInnerSample->WaitForEOS();
2200     }
2201 }
2202 
2203 /**
2204  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0090
2205  * @tc.name      : config main10 set format 8bit surface send 8bit yuv
2206  * @tc.desc      : function test
2207  */
2208 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0090, TestSize.Level2)
2209 {
2210     if (!access("/system/lib64/media/", 0)) {
2211         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2212         vEncInnerSample->DEFAULT_WIDTH = 3840;
2213         vEncInnerSample->DEFAULT_HEIGHT = 2160;
2214         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0090.h265";
2215         vEncInnerSample->surfaceInput = true;
2216         vEncInnerSample->readMultiFiles = true;
2217         vEncInnerSample->configMain10 = true;
2218         vEncInnerSample->setFormat8Bit = true;
2219         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12);
2220         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2221         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2222         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2223         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2224         vEncInnerSample->WaitForEOS();
2225     }
2226 }
2227 
2228 /**
2229  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0100
2230  * @tc.name      : config main set format 10bit surface send 10bit yuv
2231  * @tc.desc      : function test
2232  */
2233 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0100, TestSize.Level2)
2234 {
2235     if (!access("/system/lib64/media/", 0)) {
2236         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2237         vEncInnerSample->DEFAULT_WIDTH = 3840;
2238         vEncInnerSample->DEFAULT_HEIGHT = 2160;
2239         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0100.h265";
2240         vEncInnerSample->surfaceInput = true;
2241         vEncInnerSample->readMultiFiles = true;
2242         vEncInnerSample->configMain = true;
2243         vEncInnerSample->setFormat10Bit = true;
2244         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12_10bit);
2245         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2246         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2247         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2248         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2249         vEncInnerSample->WaitForEOS();
2250     }
2251 }
2252 
2253 /**
2254  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0110
2255  * @tc.name      : Not supported pixelFormat rgbx
2256  * @tc.desc      : function test
2257  */
2258 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0110, TestSize.Level2)
2259 {
2260     if (!access("/system/lib64/media/", 0)) {
2261         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2262         vEncInnerSample->DEFAULT_WIDTH = 3840;
2263         vEncInnerSample->DEFAULT_HEIGHT = 2160;
2264         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0110.h265";
2265         vEncInnerSample->surfaceInput = true;
2266         vEncInnerSample->readMultiFiles = true;
2267         vEncInnerSample->setFormatRbgx = true;
2268         vEncInnerSample->fileInfos.push_back(file_640_480_rgba);
2269         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2270         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2271         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2272         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2273         vEncInnerSample->WaitForEOS();
2274     }
2275 }
2276 
2277 /**
2278  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0120
2279  * @tc.name      : config main set format 8bit send 10bit yuv
2280  * @tc.desc      : function test
2281  */
2282 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0120, TestSize.Level2)
2283 {
2284     if (!access("/system/lib64/media/", 0)) {
2285         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2286         vEncInnerSample->DEFAULT_WIDTH = 3840;
2287         vEncInnerSample->DEFAULT_HEIGHT = 2160;
2288         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0120.h265";
2289         vEncInnerSample->surfaceInput = true;
2290         vEncInnerSample->readMultiFiles = true;
2291         vEncInnerSample->configMain = true;
2292         vEncInnerSample->setFormat8Bit = true;
2293         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12_10bit);
2294         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2295         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2296         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2297         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2298         vEncInnerSample->WaitForEOS();
2299     }
2300 }
2301 
2302 /**
2303  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0130
2304  * @tc.name      : config main10 set format 10bit send 8bit yuv
2305  * @tc.desc      : function test
2306  */
2307 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0130, TestSize.Level2)
2308 {
2309     if (!access("/system/lib64/media/", 0)) {
2310         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2311         vEncInnerSample->DEFAULT_WIDTH = 3840;
2312         vEncInnerSample->DEFAULT_HEIGHT = 2160;
2313         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0130.h265";
2314         vEncInnerSample->surfaceInput = true;
2315         vEncInnerSample->readMultiFiles = true;
2316         vEncInnerSample->configMain10 = true;
2317         vEncInnerSample->setFormat10Bit = true;
2318         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12);
2319         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2320         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2321         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2322         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2323         vEncInnerSample->WaitForEOS();
2324     }
2325 }
2326 
2327 /**
2328  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0140
2329  * @tc.name      : config main10 set format 8bit send 10bit yuv
2330  * @tc.desc      : function test
2331  */
2332 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0140, TestSize.Level2)
2333 {
2334     if (!access("/system/lib64/media/", 0)) {
2335         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2336         vEncInnerSample->DEFAULT_WIDTH = 3840;
2337         vEncInnerSample->DEFAULT_HEIGHT = 2160;
2338         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0140.h265";
2339         vEncInnerSample->surfaceInput = true;
2340         vEncInnerSample->readMultiFiles = true;
2341         vEncInnerSample->configMain10 = true;
2342         vEncInnerSample->setFormat8Bit = true;
2343         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12_10bit);
2344         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2345         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2346         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2347         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2348         vEncInnerSample->WaitForEOS();
2349     }
2350 }
2351 
2352 /**
2353  * @tc.number    : VIDEO_ENCODE_INNER_MULTIFILE_0150
2354  * @tc.name      : config main10 set format 10bit send 8bit yuv
2355  * @tc.desc      : function test
2356  */
2357 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_INNER_MULTIFILE_0150, TestSize.Level2)
2358 {
2359     if (!access("/system/lib64/media/", 0)) {
2360         auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2361         vEncInnerSample->DEFAULT_WIDTH = 3840;
2362         vEncInnerSample->DEFAULT_HEIGHT = 2160;
2363         vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_INNER_MULTIFILE_0150.h265";
2364         vEncInnerSample->surfaceInput = true;
2365         vEncInnerSample->readMultiFiles = true;
2366         vEncInnerSample->configMain10 = true;
2367         vEncInnerSample->setFormat10Bit = true;
2368         vEncInnerSample->fileInfos.push_back(file_1280_720_nv12);
2369         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2370         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2371         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2372         ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2373         vEncInnerSample->WaitForEOS();
2374     }
2375 }
2376 
2377 /**
2378  * @tc.number    : VIDEO_ENCODE_SYNC_FUNC_0340
2379  * @tc.name      : 264 waterMark encode
2380  * @tc.desc      : func test
2381  */
2382 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_SYNC_FUNC_0340, TestSize.Level2)
2383 {
2384     auto vEncSample = make_unique<VEncNdkInnerSample>();
2385     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
2386         return;
2387     }
2388     BufferRequestConfig bufferConfig = {
2389         .width = 128,
2390         .height = 72,
2391         .strideAlignment = 0x8,
2392         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
2393         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
2394         .timeout = 0,
2395     };
2396     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
2397     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_SYNC_FUNC_0340.h264";
2398     vEncSample->surfaceInput = true;
2399     vEncSample->enableWaterMark = true;
2400     vEncSample->videoCoordinateX = 100;
2401     vEncSample->videoCoordinateY = 100;
2402     vEncSample->enbleSyncMode = 1;
2403     vEncSample->videoCoordinateWidth = bufferConfig.width;
2404     vEncSample->videoCoordinateHeight = bufferConfig.height;
2405 
2406     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecName));
2407     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
2408     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
2409     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
2410     vEncSample->WaitForEOS();
2411 }
2412 
2413 /**
2414  * @tc.number    : VIDEO_ENCODE_SYNC_FUNC_0350
2415  * @tc.name      : 265 waterMark encode
2416  * @tc.desc      : func test
2417  */
2418 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_SYNC_FUNC_0350, TestSize.Level2)
2419 {
2420     auto vEncSample = make_unique<VEncNdkInnerSample>();
2421     if (!vEncSample->GetWaterMarkCapability(g_codecMime)) {
2422         return;
2423     }
2424     BufferRequestConfig bufferConfig = {
2425         .width = 1280,
2426         .height = 720,
2427         .strideAlignment = 0x8,
2428         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
2429         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
2430         .timeout = 0,
2431     };
2432     vEncSample->INP_DIR = "/data/test/media/1280_720_nv.yuv";
2433     vEncSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_SYNC_FUNC_0350.h265";
2434     vEncSample->WATER_MARK_DIR = "/data/test/media/1280_720_50.rgba";
2435 
2436     vEncSample->surfaceInput = true;
2437     vEncSample->enableWaterMark = true;
2438     vEncSample->videoCoordinateX = 0;
2439     vEncSample->videoCoordinateY = 0;
2440     vEncSample->enbleSyncMode = 1;
2441     vEncSample->videoCoordinateWidth = bufferConfig.width;
2442     vEncSample->videoCoordinateHeight = bufferConfig.height;
2443 
2444     ASSERT_EQ(AV_ERR_OK, vEncSample->CreateByName(g_codecNameHevc));
2445     ASSERT_EQ(AV_ERR_OK, vEncSample->Configure());
2446     ASSERT_EQ(AVCS_ERR_OK, vEncSample->SetCustomBuffer(bufferConfig));
2447     ASSERT_EQ(AV_ERR_OK, vEncSample->StartVideoEncoder());
2448     vEncSample->WaitForEOS();
2449 }
2450 
2451 /**
2452  * @tc.number    : VIDEO_ENCODE_RGBA1010102_0100
2453  * @tc.name      : waterMark rgba1010102 265 surface encode
2454  * @tc.desc      : func test
2455  */
2456 HWTEST_F(HwEncInnerFuncNdkTest, VIDEO_ENCODE_RGBA1010102_0100, TestSize.Level2)
2457 {
2458     auto vEncInnerSample = make_unique<VEncNdkInnerSample>();
2459     if (!vEncInnerSample->GetWaterMarkCapability(g_codecMime) || !IsSupportRgba1010102Format()) {
2460         return;
2461     }
2462     BufferRequestConfig bufferConfig = {
2463         .width = 1280,
2464         .height = 720,
2465         .strideAlignment = 0x8,
2466         .format = GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888,
2467         .usage = BUFFER_USAGE_CPU_READ | BUFFER_USAGE_CPU_WRITE | BUFFER_USAGE_MEM_DMA,
2468         .timeout = 0,
2469     };
2470     vEncInnerSample->INP_DIR = "/data/test/media/1280_720_rgba1010102.yuv";
2471     vEncInnerSample->OUT_DIR = "/data/test/media/VIDEO_ENCODE_RGBA1010102_0100.h265";
2472     vEncInnerSample->WATER_MARK_DIR = "/data/test/media/1280_720_50.rgba";
2473 
2474     vEncInnerSample->surfaceInput = true;
2475     vEncInnerSample->enableWaterMark = true;
2476     vEncInnerSample->videoCoordinateX = 0;
2477     vEncInnerSample->configMain10 = true;
2478     vEncInnerSample->videoCoordinateY = 0;
2479     vEncInnerSample->DEFAULT_PIX_FMT = static_cast<int32_t>(VideoPixelFormat::RGBA1010102);
2480     vEncInnerSample->videoCoordinateWidth = bufferConfig.width;
2481     vEncInnerSample->videoCoordinateHeight = bufferConfig.height;
2482 
2483     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->CreateByName(g_codecNameHevc));
2484     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->SetCallback());
2485     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->Configure());
2486     ASSERT_EQ(AVCS_ERR_OK, vEncInnerSample->SetCustomBuffer(bufferConfig));
2487     ASSERT_EQ(AV_ERR_OK, vEncInnerSample->StartVideoEncoder());
2488     vEncInnerSample->WaitForEOS();
2489 }
2490 } // namespace