• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <cstdlib>
17 #include <cstdio>
18 #include <ctime>
19 #include <dlfcn.h>
20 #include <fstream>
21 #include <memory>
22 #include <string>
23 
24 #include <gtest/gtest.h>
25 
26 #include "algorithm_common.h"
27 #include "algorithm_errors.h"
28 #include "graphic_common_c.h"
29 #include "detailEnh_sample.h"
30 #include "detailEnh_sample_define.h"
31 #include "detail_enhancer_image.h"
32 
33 using namespace std;
34 using namespace testing::ext;
35 
36 constexpr int32_t DEFAULT_FORMAT_RGBAEIGHT = OHOS::GRAPHIC_PIXEL_FMT_RGBA_8888;
37 constexpr int32_t DEFAULT_FORMAT_YCBCRSP = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_SP;
38 
39 namespace OHOS {
40 namespace Media {
41 namespace VideoProcessingEngine {
42 
GetFileSize(int32_t width,int32_t height,int32_t format)43 int32_t GetFileSize(int32_t width, int32_t height, int32_t format)
44 {
45     int32_t size = width * height;
46     switch (format) {
47         case OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_SP:
48         case OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P:
49             size = size * 3 / 2; // 3; 2
50             break;
51         case OHOS::GRAPHIC_PIXEL_FMT_RGBA_8888:
52             size *= 4; // 4
53             break;
54         default:
55             size *= 3; // 3
56             break;
57     }
58     return size;
59 }
60 
61 class DetailEnhancerUnitTest : public testing::Test {
62 public:
63     static void SetUpTestCase(void);
64     static void TearDownTestCase(void);
65     void SetUp();
66     void TearDown();
67 };
68 
SetUpTestCase(void)69 void DetailEnhancerUnitTest::SetUpTestCase(void)
70 {
71     cout << "[SetUpTestCase]: " << endl;
72 }
73 
TearDownTestCase(void)74 void DetailEnhancerUnitTest::TearDownTestCase(void)
75 {
76     cout << "[TearDownTestCase]: " << endl;
77 }
78 
SetUp(void)79 void DetailEnhancerUnitTest::SetUp(void)
80 {
81     cout << "[SetUp]: SetUp!!!" << endl;
82 }
83 
TearDown(void)84 void DetailEnhancerUnitTest::TearDown(void)
85 {
86     cout << "[TearDown]: over!!!" << endl;
87 }
88 
89 // detail enhancer init
90 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_01, TestSize.Level1)
91 {
92     auto detailEnh = DetailEnhancerImage::Create();
93     EXPECT_NE(detailEnh, nullptr);
94 }
95 
96 // detail enhancer init meultiple times
97 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_02, TestSize.Level1)
98 {
99     auto detailEnh = DetailEnhancerImage::Create();
100     detailEnh = DetailEnhancerImage::Create();
101     detailEnh = DetailEnhancerImage::Create();
102     detailEnh = DetailEnhancerImage::Create();
103     detailEnh = DetailEnhancerImage::Create();
104     EXPECT_NE(detailEnh, nullptr);
105 }
106 
107 // set parameter to high
108 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_04, TestSize.Level1)
109 {
110     auto detailEnh = DetailEnhancerImage::Create();
111     DetailEnhancerParameters param {
112         .uri = "",
113         .level = DETAIL_ENH_LEVEL_HIGH,
114     };
115     auto res = detailEnh->SetParameter(param);
116     EXPECT_EQ(res, VPE_ALGO_ERR_OK);
117 }
118 
119 // set parameter to medium
120 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_05, TestSize.Level1)
121 {
122     auto detailEnh = DetailEnhancerImage::Create();
123     DetailEnhancerParameters param {
124         .uri = "",
125         .level = DETAIL_ENH_LEVEL_MEDIUM,
126     };
127     auto res = detailEnh->SetParameter(param);
128     EXPECT_EQ(res, VPE_ALGO_ERR_OK);
129 }
130 
131 // set parameter to low
132 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_06, TestSize.Level1)
133 {
134     auto detailEnh = DetailEnhancerImage::Create();
135     DetailEnhancerParameters param {
136         .uri = "",
137         .level = DETAIL_ENH_LEVEL_LOW,
138     };
139     auto res = detailEnh->SetParameter(param);
140     EXPECT_EQ(res, VPE_ALGO_ERR_OK);
141 }
142 
143 // set parameter to none
144 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_07, TestSize.Level1)
145 {
146     auto detailEnh = DetailEnhancerImage::Create();
147     DetailEnhancerParameters param {
148         .uri = "",
149         .level = DETAIL_ENH_LEVEL_NONE,
150     };
151     auto res = detailEnh->SetParameter(param);
152     EXPECT_EQ(res, VPE_ALGO_ERR_OK);
153 }
154 
155 // get parameters after set to high
156 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_09, TestSize.Level1)
157 {
158     auto detailEnh = DetailEnhancerImage::Create();
159     DetailEnhancerParameters param {
160         .level = DETAIL_ENH_LEVEL_HIGH,
161         .uri = "",
162     };
163     auto res_set = detailEnh->SetParameter(param);
164     auto res_get = detailEnh->GetParameter(param);
165     EXPECT_EQ(res_set, VPE_ALGO_ERR_OK);
166     EXPECT_EQ(res_get, VPE_ALGO_ERR_OK);
167 }
168 
169 // get parameters after set to medium
170 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_10, TestSize.Level1)
171 {
172     auto detailEnh = DetailEnhancerImage::Create();
173     DetailEnhancerParameters param {
174         .level = DETAIL_ENH_LEVEL_MEDIUM,
175         .uri = "",
176     };
177     auto res_set = detailEnh->SetParameter(param);
178     auto res_get = detailEnh->GetParameter(param);
179     EXPECT_EQ(res_set, VPE_ALGO_ERR_OK);
180     EXPECT_EQ(res_get, VPE_ALGO_ERR_OK);
181 }
182 
183 // get parameters after set to low
184 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_11, TestSize.Level1)
185 {
186     auto detailEnh = DetailEnhancerImage::Create();
187     DetailEnhancerParameters param {
188         .level = DETAIL_ENH_LEVEL_LOW,
189         .uri = "",
190     };
191     auto res_set = detailEnh->SetParameter(param);
192     auto res_get = detailEnh->GetParameter(param);
193     EXPECT_EQ(res_set, VPE_ALGO_ERR_OK);
194     EXPECT_EQ(res_get, VPE_ALGO_ERR_OK);
195 }
196 
197 // get parameters after set to none
198 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_12, TestSize.Level1)
199 {
200     auto detailEnh = DetailEnhancerImage::Create();
201     DetailEnhancerParameters param {
202         .level = DETAIL_ENH_LEVEL_NONE,
203         .uri = "",
204     };
205     auto res_set = detailEnh->SetParameter(param);
206     auto res_get = detailEnh->GetParameter(param);
207     EXPECT_EQ(res_set, VPE_ALGO_ERR_OK);
208     EXPECT_EQ(res_get, VPE_ALGO_ERR_OK);
209 }
210 
211 // get parameters
212 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_13, TestSize.Level1)
213 {
214     auto detailEnh = DetailEnhancerImage::Create();
215     DetailEnhancerParameters param {
216         .level = DETAIL_ENH_LEVEL_HIGH,
217         .uri = "",
218     };
219     auto res = detailEnh->GetParameter(param);
220     EXPECT_EQ(res, VPE_ALGO_ERR_OK);
221 }
222 
223 // test getBuffer with bad size
224 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_14, TestSize.Level1)
225 {
226     auto createdBuffer = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, -1, -1);
227     EXPECT_EQ(createdBuffer, nullptr);
228 }
229 
230 // set parameter uri to abnormal value
231 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_init_15, TestSize.Level1)
232 {
233     auto detailEnh = DetailEnhancerImage::Create();
234     DetailEnhancerParameters param {
235         .uri = "x",
236         .level = DETAIL_ENH_LEVEL_NONE,
237     };
238     auto res = detailEnh->SetParameter(param);
239     EXPECT_EQ(res, VPE_ALGO_ERR_OK);
240 }
241 
242 // process RGB to RGB, aisr
243 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_01, TestSize.Level1)
244 {
245     auto detailEnh = DetailEnhancerImage::Create();
246     DetailEnhancerParameters param {
247         .uri = "",
248         .level = DETAIL_ENH_LEVEL_HIGH,
249     };
250     detailEnh->SetParameter(param);
251     int32_t outputWidth = 4096;
252     int32_t outputHeight = 3072;
253     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 1024, 768);
254     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
255     int32_t ret = detailEnh->Process(input, output);
256     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
257 }
258 
259 // process RGB to RGB, high
260 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_02, TestSize.Level1)
261 {
262     auto detailEnh = DetailEnhancerImage::Create();
263     DetailEnhancerParameters param {
264         .uri = "",
265         .level = DETAIL_ENH_LEVEL_HIGH,
266     };
267     detailEnh->SetParameter(param);
268     int32_t outputWidth = 2048;
269     int32_t outputHeight = 1536;
270     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
271     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
272     int32_t ret = detailEnh->Process(input, output);
273     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
274 }
275 
276 // process RGB to RGB, medium
277 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_03, TestSize.Level1)
278 {
279     auto detailEnh = DetailEnhancerImage::Create();
280     DetailEnhancerParameters param {
281         .uri = "",
282         .level = DETAIL_ENH_LEVEL_MEDIUM,
283     };
284     detailEnh->SetParameter(param);
285     int32_t outputWidth = 2048;
286     int32_t outputHeight = 1536;
287     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
288     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
289     int32_t ret = detailEnh->Process(input, output);
290     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
291 }
292 
293 // process RGB to RGB, low
294 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_04, TestSize.Level1)
295 {
296     auto detailEnh = DetailEnhancerImage::Create();
297     DetailEnhancerParameters param {
298         .uri = "",
299         .level = DETAIL_ENH_LEVEL_LOW,
300     };
301     detailEnh->SetParameter(param);
302     int32_t outputWidth = 2048;
303     int32_t outputHeight = 1536;
304     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
305     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
306     int32_t ret = detailEnh->Process(input, output);
307     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
308 }
309 
310 // process RGB to RGB, none
311 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_05, TestSize.Level1)
312 {
313     auto detailEnh = DetailEnhancerImage::Create();
314     DetailEnhancerParameters param {
315         .uri = "",
316         .level = DETAIL_ENH_LEVEL_NONE,
317     };
318     detailEnh->SetParameter(param);
319     int32_t outputWidth = 2048;
320     int32_t outputHeight = 1536;
321     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
322     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
323     int32_t ret = detailEnh->Process(input, output);
324     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
325 }
326 
327 // process RGB to RGB different resolution 0.5x, aisr MOVED TO VPE_EXT
328 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_06, TestSize.Level1)
329 {
330     auto detailEnh = DetailEnhancerImage::Create();
331     DetailEnhancerParameters param {
332         .uri = "",
333         .level = DETAIL_ENH_LEVEL_HIGH,
334     };
335     detailEnh->SetParameter(param);
336     int32_t outputWidth = 2048;
337     int32_t outputHeight = 1536;
338     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 1024, 768);
339     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
340     int32_t ret = detailEnh->Process(input, output);
341     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
342 }
343 
344 // process RGB to RGB different resolution 0.5x, high
345 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_07, TestSize.Level1)
346 {
347     auto detailEnh = DetailEnhancerImage::Create();
348     DetailEnhancerParameters param {
349         .uri = "",
350         .level = DETAIL_ENH_LEVEL_HIGH,
351     };
352     detailEnh->SetParameter(param);
353     int32_t outputWidth = 1024;
354     int32_t outputHeight = 768;
355     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
356     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
357     int32_t ret = detailEnh->Process(input, output);
358     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
359 }
360 
361 // process RGB to RGB different resolution 0.5x, medium
362 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_08, TestSize.Level1)
363 {
364     auto detailEnh = DetailEnhancerImage::Create();
365     DetailEnhancerParameters param {
366         .uri = "",
367         .level = DETAIL_ENH_LEVEL_MEDIUM,
368     };
369     detailEnh->SetParameter(param);
370     int32_t outputWidth = 1024;
371     int32_t outputHeight = 768;
372     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
373     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
374     int32_t ret = detailEnh->Process(input, output);
375     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
376 }
377 
378 // process RGB to RGB different resolution 0.5x, low
379 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_09, TestSize.Level1)
380 {
381     auto detailEnh = DetailEnhancerImage::Create();
382     DetailEnhancerParameters param {
383         .uri = "",
384         .level = DETAIL_ENH_LEVEL_LOW,
385     };
386     detailEnh->SetParameter(param);
387     int32_t outputWidth = 1024;
388     int32_t outputHeight = 768;
389     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
390     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
391     int32_t ret = detailEnh->Process(input, output);
392     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
393 }
394 
395 // process RGB to RGB different resolution 0.5x, none
396 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_10, TestSize.Level1)
397 {
398     auto detailEnh = DetailEnhancerImage::Create();
399     DetailEnhancerParameters param {
400         .uri = "",
401         .level = DETAIL_ENH_LEVEL_NONE,
402     };
403     detailEnh->SetParameter(param);
404     int32_t outputWidth = 1024;
405     int32_t outputHeight = 768;
406     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
407     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
408     int32_t ret = detailEnh->Process(input, output);
409     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
410 }
411 
412 // process RGB to RGB different resolution 2x, aisr
413 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_11, TestSize.Level1)
414 {
415     auto detailEnh = DetailEnhancerImage::Create();
416     DetailEnhancerParameters param {
417         .uri = "",
418         .level = DETAIL_ENH_LEVEL_HIGH,
419     };
420     detailEnh->SetParameter(param);
421     int32_t outputWidth = 8192;
422     int32_t outputHeight = 6144;
423     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 1024, 768);
424     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
425     int32_t ret = detailEnh->Process(input, output);
426     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
427 }
428 
429 // process RGB to RGB different resolution 2x, high
430 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_12, TestSize.Level1)
431 {
432     auto detailEnh = DetailEnhancerImage::Create();
433     DetailEnhancerParameters param {
434         .uri = "",
435         .level = DETAIL_ENH_LEVEL_HIGH,
436     };
437     detailEnh->SetParameter(param);
438     int32_t outputWidth = 4096;
439     int32_t outputHeight = 3072;
440     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
441     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
442     int32_t ret = detailEnh->Process(input, output);
443     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
444 }
445 
446 // process RGB to RGB different resolution 2x, medium
447 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_13, TestSize.Level1)
448 {
449     auto detailEnh = DetailEnhancerImage::Create();
450     DetailEnhancerParameters param {
451         .uri = "",
452         .level = DETAIL_ENH_LEVEL_MEDIUM,
453     };
454     detailEnh->SetParameter(param);
455     int32_t outputWidth = 4096;
456     int32_t outputHeight = 3072;
457     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
458     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
459     int32_t ret = detailEnh->Process(input, output);
460     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
461 }
462 
463 // process RGB to RGB different resolution 2x, low
464 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_14, TestSize.Level1)
465 {
466     auto detailEnh = DetailEnhancerImage::Create();
467     DetailEnhancerParameters param {
468         .uri = "",
469         .level = DETAIL_ENH_LEVEL_LOW,
470     };
471     detailEnh->SetParameter(param);
472     int32_t outputWidth = 4096;
473     int32_t outputHeight = 3072;
474     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
475     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
476     int32_t ret = detailEnh->Process(input, output);
477     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
478 }
479 
480 // process RGB to RGB different resolution 2x, none
481 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_15, TestSize.Level1)
482 {
483     auto detailEnh = DetailEnhancerImage::Create();
484     DetailEnhancerParameters param {
485         .uri = "",
486         .level = DETAIL_ENH_LEVEL_NONE,
487     };
488     detailEnh->SetParameter(param);
489     int32_t outputWidth = 4096;
490     int32_t outputHeight = 3072;
491     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
492     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
493     int32_t ret = detailEnh->Process(input, output);
494     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
495 }
496 
497 
498 // process RGB to RGB unusually resolution, aisr exceed x32 scales
499 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_16, TestSize.Level1)
500 {
501     auto detailEnh = DetailEnhancerImage::Create();
502     DetailEnhancerParameters param {
503         .uri = "",
504         .level = DETAIL_ENH_LEVEL_HIGH,
505     };
506     detailEnh->SetParameter(param);
507     int32_t outputWidth = 3145728;
508     int32_t outputHeight = 1;
509     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 1024, 768);
510     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
511     int32_t ret = detailEnh->Process(input, output);
512     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
513 }
514 
515 // process RGB to RGB unusually resolution, high
516 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_17, TestSize.Level1)
517 {
518     auto detailEnh = DetailEnhancerImage::Create();
519     DetailEnhancerParameters param {
520         .uri = "",
521         .level = DETAIL_ENH_LEVEL_HIGH,
522     };
523     detailEnh->SetParameter(param);
524     int32_t outputWidth = 3145728;
525     int32_t outputHeight = 1;
526     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
527     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
528     int32_t ret = detailEnh->Process(input, output);
529     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
530 }
531 
532 // process RGB to RGB unusually resolution, medium
533 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_18, TestSize.Level1)
534 {
535     auto detailEnh = DetailEnhancerImage::Create();
536     DetailEnhancerParameters param {
537         .uri = "",
538         .level = DETAIL_ENH_LEVEL_MEDIUM,
539     };
540     detailEnh->SetParameter(param);
541     int32_t outputWidth = 3145728;
542     int32_t outputHeight = 1;
543     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
544     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
545     int32_t ret = detailEnh->Process(input, output);
546     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
547 }
548 
549 // process RGB to RGB unusually resolution, low
550 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_19, TestSize.Level1)
551 {
552     auto detailEnh = DetailEnhancerImage::Create();
553     DetailEnhancerParameters param {
554         .uri = "",
555         .level = DETAIL_ENH_LEVEL_LOW,
556     };
557     detailEnh->SetParameter(param);
558     int32_t outputWidth = 3145728;
559     int32_t outputHeight = 1;
560     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
561     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
562     int32_t ret = detailEnh->Process(input, output);
563     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
564 }
565 
566 // process RGB to RGB unusually resolution, none
567 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_20, TestSize.Level1)
568 {
569     auto detailEnh = DetailEnhancerImage::Create();
570     DetailEnhancerParameters param {
571         .uri = "",
572         .level = DETAIL_ENH_LEVEL_NONE,
573     };
574     detailEnh->SetParameter(param);
575     int32_t outputWidth = 3145728;
576     int32_t outputHeight = 1;
577     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
578     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
579     int32_t ret = detailEnh->Process(input, output);
580     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
581 }
582 
583 // process NV12 to I420; different format, aisr
584 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_21, TestSize.Level1)
585 {
586     auto detailEnh = DetailEnhancerImage::Create();
587     DetailEnhancerParameters param {
588         .uri = "",
589         .level = DETAIL_ENH_LEVEL_HIGH,
590     };
591     detailEnh->SetParameter(param);
592     int32_t outputWidth = 2048;
593     int32_t outputHeight = 1536;
594     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
595     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 1024, 768);
596     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
597     int32_t ret = detailEnh->Process(input, output);
598     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
599 }
600 
601 // process NV12 to I420; different format, high
602 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_22, TestSize.Level1)
603 {
604     auto detailEnh = DetailEnhancerImage::Create();
605     DetailEnhancerParameters param {
606         .uri = "",
607         .level = DETAIL_ENH_LEVEL_HIGH,
608     };
609     detailEnh->SetParameter(param);
610     int32_t outputWidth = 2048;
611     int32_t outputHeight = 1536;
612     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
613     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
614     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
615     int32_t ret = detailEnh->Process(input, output);
616     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
617 }
618 
619 // process NV12 to I420; different format, medium
620 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_23, TestSize.Level1)
621 {
622     auto detailEnh = DetailEnhancerImage::Create();
623     DetailEnhancerParameters param {
624         .uri = "",
625         .level = DETAIL_ENH_LEVEL_MEDIUM,
626     };
627     detailEnh->SetParameter(param);
628     int32_t outputWidth = 2048;
629     int32_t outputHeight = 1536;
630     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
631     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
632     int32_t ret = detailEnh->Process(input, output);
633     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
634 }
635 
636 // process NV12 to I420; different format, low
637 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_24, TestSize.Level1)
638 {
639     auto detailEnh = DetailEnhancerImage::Create();
640     DetailEnhancerParameters param {
641         .uri = "",
642         .level = DETAIL_ENH_LEVEL_LOW,
643     };
644     detailEnh->SetParameter(param);
645     int32_t outputWidth = 2048;
646     int32_t outputHeight = 1536;
647     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
648     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
649     int32_t ret = detailEnh->Process(input, output);
650     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
651 }
652 
653 // process NV12 to I420; different format, none
654 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_25, TestSize.Level1)
655 {
656     auto detailEnh = DetailEnhancerImage::Create();
657     DetailEnhancerParameters param {
658         .uri = "",
659         .level = DETAIL_ENH_LEVEL_NONE,
660     };
661     detailEnh->SetParameter(param);
662     int32_t outputWidth = 2048;
663     int32_t outputHeight = 1536;
664     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
665     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
666     int32_t ret = detailEnh->Process(input, output);
667     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
668 }
669 
670 // process with unsupported input Format
671 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_26, TestSize.Level1)
672 {
673     auto detailEnh = DetailEnhancerImage::Create();
674     DetailEnhancerParameters param {
675         .uri = "",
676         .level = DETAIL_ENH_LEVEL_HIGH,
677     };
678     detailEnh->SetParameter(param);
679     int32_t outputWidth = 2048;
680     int32_t outputHeight = 1536;
681     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_422_SP; // unsupported format
682     auto input = CreateSurfaceBuffer(inputFormat, 4096, 3072);
683     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
684     int32_t ret = detailEnh->Process(input, output);
685     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
686 }
687 
688 // process with unsupported output Format
689 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_27, TestSize.Level1)
690 {
691     auto detailEnh = DetailEnhancerImage::Create();
692     DetailEnhancerParameters param {
693         .uri = "",
694         .level = DETAIL_ENH_LEVEL_HIGH,
695     };
696     detailEnh->SetParameter(param);
697     int32_t outputWidth = 2048;
698     int32_t outputHeight = 1536;
699     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_422_SP; // unsupported format
700     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
701     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
702     int32_t ret = detailEnh->Process(input, output);
703     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
704 }
705 
706 // process RGB to RGB witout setting parameters first
707 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_28, TestSize.Level1)
708 {
709     auto detailEnh = DetailEnhancerImage::Create();
710     int32_t outputWidth = 2048;
711     int32_t outputHeight = 1536;
712     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
713     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
714     int32_t ret = detailEnh->Process(input, output);
715     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
716 }
717 
718 // process NV12 to NV12 extremly small image input, aisr
719 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_29, TestSize.Level1)
720 {
721     auto detailEnh = DetailEnhancerImage::Create();
722     DetailEnhancerParameters param {
723         .uri = "",
724         .level = DETAIL_ENH_LEVEL_HIGH,
725     };
726     detailEnh->SetParameter(param);
727     int32_t outputWidth = 1;
728     int32_t outputHeight = 1;
729     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 1024, 768);
730     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
731     int32_t ret = detailEnh->Process(input, output);
732     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
733 }
734 
735 // process NV12 to NV12 extremly small image input, high
736 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_30, TestSize.Level1)
737 {
738     auto detailEnh = DetailEnhancerImage::Create();
739     DetailEnhancerParameters param {
740         .uri = "",
741         .level = DETAIL_ENH_LEVEL_HIGH,
742     };
743     detailEnh->SetParameter(param);
744     int32_t outputWidth = 1;
745     int32_t outputHeight = 1;
746     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
747     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
748     int32_t ret = detailEnh->Process(input, output);
749     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
750 }
751 
752 // process NV12 to NV12 extremly small image input, medium
753 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_31, TestSize.Level1)
754 {
755     auto detailEnh = DetailEnhancerImage::Create();
756     DetailEnhancerParameters param {
757         .uri = "",
758         .level = DETAIL_ENH_LEVEL_MEDIUM,
759     };
760     detailEnh->SetParameter(param);
761     int32_t outputWidth = 1;
762     int32_t outputHeight = 1;
763     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
764     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
765     int32_t ret = detailEnh->Process(input, output);
766     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
767 }
768 
769 // process NV12 to NV12 extremly small image input, low
770 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_32, TestSize.Level1)
771 {
772     auto detailEnh = DetailEnhancerImage::Create();
773     DetailEnhancerParameters param {
774         .uri = "",
775         .level = DETAIL_ENH_LEVEL_LOW,
776     };
777     detailEnh->SetParameter(param);
778     int32_t outputWidth = 1;
779     int32_t outputHeight = 1;
780     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
781     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
782     int32_t ret = detailEnh->Process(input, output);
783     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
784 }
785 
786 // process NV12 to NV12 extremly small image input, none
787 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_33, TestSize.Level1)
788 {
789     auto detailEnh = DetailEnhancerImage::Create();
790     DetailEnhancerParameters param {
791         .uri = "",
792         .level = DETAIL_ENH_LEVEL_NONE,
793     };
794     detailEnh->SetParameter(param);
795     int32_t outputWidth = 1;
796     int32_t outputHeight = 1;
797     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
798     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
799     int32_t ret = detailEnh->Process(input, output);
800     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
801 }
802 
803 // process NV12 to NV12 extremly big image input, aisr
804 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_34, TestSize.Level1)
805 {
806     auto detailEnh = DetailEnhancerImage::Create();
807     DetailEnhancerParameters param {
808         .uri = "",
809         .level = DETAIL_ENH_LEVEL_HIGH,
810     };
811     detailEnh->SetParameter(param);
812     int32_t outputWidth = 30720;
813     int32_t outputHeight = 17280;
814     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 1024, 768);
815     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
816     int32_t ret = detailEnh->Process(input, output);
817     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
818 }
819 
820 // process NV12 to NV12 extremly big image input, high
821 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_35, TestSize.Level1)
822 {
823     auto detailEnh = DetailEnhancerImage::Create();
824     DetailEnhancerParameters param {
825         .uri = "",
826         .level = DETAIL_ENH_LEVEL_HIGH,
827     };
828     detailEnh->SetParameter(param);
829     int32_t outputWidth = 30720;
830     int32_t outputHeight = 17280;
831     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
832     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
833     int32_t ret = detailEnh->Process(input, output);
834     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
835 }
836 
837 // process NV12 to NV12 extremly big image input, medium
838 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_36, TestSize.Level1)
839 {
840     auto detailEnh = DetailEnhancerImage::Create();
841     DetailEnhancerParameters param {
842         .uri = "",
843         .level = DETAIL_ENH_LEVEL_MEDIUM,
844     };
845     detailEnh->SetParameter(param);
846     int32_t outputWidth = 30720;
847     int32_t outputHeight = 17280;
848     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
849     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
850     int32_t ret = detailEnh->Process(input, output);
851     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
852 }
853 
854 // process NV12 to NV12 extremly big image input, low
855 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_37, TestSize.Level1)
856 {
857     auto detailEnh = DetailEnhancerImage::Create();
858     DetailEnhancerParameters param {
859         .uri = "",
860         .level = DETAIL_ENH_LEVEL_LOW,
861     };
862     detailEnh->SetParameter(param);
863     int32_t outputWidth = 30720;
864     int32_t outputHeight = 17280;
865     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
866     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
867     int32_t ret = detailEnh->Process(input, output);
868     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
869 }
870 
871 // process NV12 to NV12 extremly big image input, none
872 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_38, TestSize.Level1)
873 {
874     auto detailEnh = DetailEnhancerImage::Create();
875     DetailEnhancerParameters param {
876         .uri = "",
877         .level = DETAIL_ENH_LEVEL_NONE,
878     };
879     detailEnh->SetParameter(param);
880     int32_t outputWidth = 30720;
881     int32_t outputHeight = 17280;
882     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
883     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
884     int32_t ret = detailEnh->Process(input, output);
885     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
886 }
887 
888 // process NV12 to NV12 odd number input, aisr MOVED TO VPE_EXT
889 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_39, TestSize.Level1)
890 {
891     auto detailEnh = DetailEnhancerImage::Create();
892     DetailEnhancerParameters param {
893         .uri = "",
894         .level = DETAIL_ENH_LEVEL_HIGH,
895     };
896     detailEnh->SetParameter(param);
897     int32_t outputWidth = 1025;
898     int32_t outputHeight = 767;
899     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 1024, 768);
900     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
901     int32_t ret = detailEnh->Process(input, output);
902     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
903 }
904 
905 // process NV12 to NV12 odd number input, high
906 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_40, TestSize.Level1)
907 {
908     auto detailEnh = DetailEnhancerImage::Create();
909     DetailEnhancerParameters param {
910         .uri = "",
911         .level = DETAIL_ENH_LEVEL_HIGH,
912     };
913     detailEnh->SetParameter(param);
914     int32_t outputWidth = 1025;
915     int32_t outputHeight = 767;
916     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
917     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
918     int32_t ret = detailEnh->Process(input, output);
919     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
920 }
921 
922 // process NV12 to NV12 odd number input, medium
923 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_41, TestSize.Level1)
924 {
925     auto detailEnh = DetailEnhancerImage::Create();
926     DetailEnhancerParameters param {
927         .uri = "",
928         .level = DETAIL_ENH_LEVEL_MEDIUM,
929     };
930     detailEnh->SetParameter(param);
931     int32_t outputWidth = 1025;
932     int32_t outputHeight = 767;
933     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
934     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
935     int32_t ret = detailEnh->Process(input, output);
936     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
937 }
938 
939 // process NV12 to NV12 odd number input, low
940 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_42, TestSize.Level1)
941 {
942     auto detailEnh = DetailEnhancerImage::Create();
943     DetailEnhancerParameters param {
944         .uri = "",
945         .level = DETAIL_ENH_LEVEL_LOW,
946     };
947     detailEnh->SetParameter(param);
948     int32_t outputWidth = 1025;
949     int32_t outputHeight = 767;
950     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
951     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
952     int32_t ret = detailEnh->Process(input, output);
953     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
954 }
955 
956 // process NV12 to NV12 odd number input, nonw
957 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_43, TestSize.Level1)
958 {
959     auto detailEnh = DetailEnhancerImage::Create();
960     DetailEnhancerParameters param {
961         .uri = "",
962         .level = DETAIL_ENH_LEVEL_NONE,
963     };
964     detailEnh->SetParameter(param);
965     int32_t outputWidth = 1025;
966     int32_t outputHeight = 767;
967     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
968     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
969     int32_t ret = detailEnh->Process(input, output);
970     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
971 }
972 
973 // process NV12 to NV12 input output different width/height ratio, aisr MOVED TO VPE_EXT, unsupport resolution
974 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_44, TestSize.Level1)
975 {
976     auto detailEnh = DetailEnhancerImage::Create();
977     DetailEnhancerParameters param {
978         .uri = "",
979         .level = DETAIL_ENH_LEVEL_HIGH,
980     };
981     detailEnh->SetParameter(param);
982     int32_t outputWidth = 1024;
983     int32_t outputHeight = 480;
984     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 1024, 768);
985     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
986     int32_t ret = detailEnh->Process(input, output);
987     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
988 }
989 
990 // process NV12 to NV12 input output different width/height ratio, high
991 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_45, TestSize.Level1)
992 {
993     auto detailEnh = DetailEnhancerImage::Create();
994     DetailEnhancerParameters param {
995         .uri = "",
996         .level = DETAIL_ENH_LEVEL_HIGH,
997     };
998     detailEnh->SetParameter(param);
999     int32_t outputWidth = 1024;
1000     int32_t outputHeight = 480;
1001     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
1002     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
1003     int32_t ret = detailEnh->Process(input, output);
1004     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1005 }
1006 
1007 // process NV12 to NV12 input output different width/height ratio, medium
1008 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_46, TestSize.Level1)
1009 {
1010     auto detailEnh = DetailEnhancerImage::Create();
1011     DetailEnhancerParameters param {
1012         .uri = "",
1013         .level = DETAIL_ENH_LEVEL_MEDIUM,
1014     };
1015     detailEnh->SetParameter(param);
1016     int32_t outputWidth = 1024;
1017     int32_t outputHeight = 480;
1018     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
1019     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
1020     int32_t ret = detailEnh->Process(input, output);
1021     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1022 }
1023 
1024 // process NV12 to NV12 input output different width/height ratio, low
1025 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_47, TestSize.Level1)
1026 {
1027     auto detailEnh = DetailEnhancerImage::Create();
1028     DetailEnhancerParameters param {
1029         .uri = "",
1030         .level = DETAIL_ENH_LEVEL_LOW,
1031     };
1032     detailEnh->SetParameter(param);
1033     int32_t outputWidth = 1024;
1034     int32_t outputHeight = 480;
1035     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
1036     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
1037     int32_t ret = detailEnh->Process(input, output);
1038     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1039 }
1040 
1041 // process NV12 to NV12 input output different width/height ratio, none
1042 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_48, TestSize.Level1)
1043 {
1044     auto detailEnh = DetailEnhancerImage::Create();
1045     DetailEnhancerParameters param {
1046         .uri = "",
1047         .level = DETAIL_ENH_LEVEL_NONE,
1048     };
1049     detailEnh->SetParameter(param);
1050     int32_t outputWidth = 1024;
1051     int32_t outputHeight = 480;
1052     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
1053     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
1054     int32_t ret = detailEnh->Process(input, output);
1055     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1056 }
1057 
1058 // process but buffer is nullptr
1059 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_49, TestSize.Level1)
1060 {
1061     auto detailEnh = DetailEnhancerImage::Create();
1062     DetailEnhancerParameters param {
1063         .uri = "",
1064         .level = DETAIL_ENH_LEVEL_HIGH,
1065     };
1066     detailEnh->SetParameter(param);
1067     int32_t ret = detailEnh->Process(nullptr, nullptr);
1068     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1069 }
1070 
1071 // repeating process I420 to I420 with set parameters
1072 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_50, TestSize.Level1)
1073 {
1074     auto detailEnh = DetailEnhancerImage::Create();
1075     DetailEnhancerParameters param {
1076         .uri = "",
1077         .level = DETAIL_ENH_LEVEL_HIGH,
1078     };
1079     detailEnh->SetParameter(param);
1080     int32_t outputWidth = 2048;
1081     int32_t outputHeight = 1536;
1082     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, 4096, 3072);
1083     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
1084     int32_t ret = detailEnh->Process(input, output);
1085     // repeat again with AISR
1086     DetailEnhancerParameters param2 {
1087         .uri = "",
1088         .level = DETAIL_ENH_LEVEL_HIGH,
1089     };
1090     detailEnh->SetParameter(param2);
1091     int32_t ret2 = detailEnh->Process(input, output);
1092     // repeat again with medium
1093     DetailEnhancerParameters param3 {
1094         .uri = "",
1095         .level = DETAIL_ENH_LEVEL_MEDIUM,
1096     };
1097     detailEnh->SetParameter(param3);
1098     int32_t ret3 = detailEnh->Process(input, output);
1099     // repeat again with low
1100     DetailEnhancerParameters param4 {
1101         .uri = "",
1102         .level = DETAIL_ENH_LEVEL_LOW,
1103     };
1104     detailEnh->SetParameter(param4);
1105     int32_t ret4 = detailEnh->Process(input, output);
1106     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1107     EXPECT_EQ(ret2, VPE_ALGO_ERR_OK);
1108     EXPECT_NE(ret3, VPE_ALGO_ERR_OK);
1109     EXPECT_NE(ret4, VPE_ALGO_ERR_OK);
1110 }
1111 
1112 // process twice
1113 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_51, TestSize.Level1)
1114 {
1115     auto detailEnh = DetailEnhancerImage::Create();
1116     DetailEnhancerParameters param {
1117         .uri = "",
1118         .level = DETAIL_ENH_LEVEL_HIGH,
1119     };
1120     detailEnh->SetParameter(param);
1121     int32_t inputWidth = 4096;
1122     int32_t inputHeight = 3072;
1123     int32_t outputWidth = 2048;
1124     int32_t outputHeight = 1536;
1125     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, inputWidth, inputHeight);
1126     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_YCBCRSP, outputWidth, outputHeight);
1127     int32_t ret = detailEnh->Process(input, output);
1128     ret = detailEnh->Process(input, output);
1129     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1130 }
1131 
1132 // check extern c interface
1133 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_52, TestSize.Level1)
1134 {
1135     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
1136     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 2048, 1536);
1137     DetailEnhancerLevel level = DETAIL_ENH_LEVEL_HIGH;
1138     void* lib = dlopen("/system/lib64/libvideoprocessingengine.z.so", RTLD_LAZY);
1139     if (lib == nullptr) {
1140         printf("cannot load vpe lib\n");
1141         return;
1142     }
1143 
1144     typedef int32_t (*DetailEnhancerCreate)(int32_t*);
1145     typedef int32_t (*DetailEnhancerProcessImage)(int32_t,
1146         OHNativeWindowBuffer*, OHNativeWindowBuffer*, int32_t);
1147     typedef int32_t (*DetailEnhancerDestroy)(int32_t*);
1148 
1149     auto detailEnhCreate = reinterpret_cast<DetailEnhancerCreate>(dlsym(lib, "DetailEnhancerCreate"));
1150     auto detailEnhProcessImage =
1151         reinterpret_cast<DetailEnhancerProcessImage>(dlsym(lib, "DetailEnhancerProcessImage"));
1152     auto detailEnhDestroy = reinterpret_cast<DetailEnhancerDestroy>(dlsym(lib, "DetailEnhancerDestroy"));
1153 
1154     int32_t instanceSrId = -1;
1155     int32_t res = detailEnhCreate(&instanceSrId);
1156     if (res != 0 || instanceSrId == -1) {
1157         detailEnhDestroy(&instanceSrId);
1158         dlclose(lib);
1159         return;
1160     }
1161     if (input == nullptr || output == nullptr) {
1162         detailEnhDestroy(&instanceSrId);
1163         dlclose(lib);
1164         return;
1165     }
1166     OHNativeWindowBuffer* srIn = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&input);
1167     OHNativeWindowBuffer* srOut = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&output);
1168     res = detailEnhProcessImage(instanceSrId, srIn, srOut, static_cast<int>(level));
1169     if (res != 0) {
1170         detailEnhDestroy(&instanceSrId);
1171         dlclose(lib);
1172         return;
1173     }
1174     res = detailEnhDestroy(&instanceSrId);
1175     if (res != 0) {
1176         dlclose(lib);
1177         return;
1178     }
1179     EXPECT_EQ(res, VPE_ALGO_ERR_OK);
1180     res = detailEnhDestroy(&instanceSrId); // destroy twice
1181     dlclose(lib);
1182     EXPECT_NE(res, VPE_ALGO_ERR_OK);
1183 }
1184 
1185 // check extern c interface, create with null instance
1186 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_53, TestSize.Level1)
1187 {
1188     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
1189     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 2048, 1536);
1190     void* lib = dlopen("/system/lib64/libvideoprocessingengine.z.so", RTLD_LAZY);
1191     if (lib == nullptr) {
1192         printf("cannot load vpe lib\n");
1193         return;
1194     }
1195     typedef int32_t (*DetailEnhancerCreate)(int32_t*);
1196     auto detailEnhCreate = reinterpret_cast<DetailEnhancerCreate>(dlsym(lib, "DetailEnhancerCreate"));
1197     int32_t ret = detailEnhCreate(nullptr);
1198     dlclose(lib);
1199     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1200 }
1201 
1202 // check extern c interface, process with null output buffer
1203 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_54, TestSize.Level1)
1204 {
1205     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
1206     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 2048, 1536);
1207     DetailEnhancerLevel level = DETAIL_ENH_LEVEL_HIGH;
1208     void* lib = dlopen("/system/lib64/libvideoprocessingengine.z.so", RTLD_LAZY);
1209     if (lib == nullptr) {
1210         printf("cannot load vpe lib\n");
1211         return;
1212     }
1213 
1214     typedef int32_t (*DetailEnhancerCreate)(int32_t*);
1215     typedef int32_t (*DetailEnhancerProcessImage)(int32_t,
1216         OHNativeWindowBuffer*, OHNativeWindowBuffer*, int32_t);
1217     typedef int32_t (*DetailEnhancerDestroy)(int32_t*);
1218 
1219     auto detailEnhCreate = reinterpret_cast<DetailEnhancerCreate>(dlsym(lib, "DetailEnhancerCreate"));
1220     auto detailEnhProcessImage =
1221         reinterpret_cast<DetailEnhancerProcessImage>(dlsym(lib, "DetailEnhancerProcessImage"));
1222     auto detailEnhDestroy = reinterpret_cast<DetailEnhancerDestroy>(dlsym(lib, "DetailEnhancerDestroy"));
1223 
1224     int32_t instanceSrId = -1;
1225     int32_t res = detailEnhCreate(&instanceSrId);
1226     if (res != 0 || instanceSrId == -1) {
1227         detailEnhDestroy(&instanceSrId);
1228         dlclose(lib);
1229         return;
1230     }
1231     if (input == nullptr || output == nullptr) {
1232         detailEnhDestroy(&instanceSrId);
1233         dlclose(lib);
1234         return;
1235     }
1236     OHNativeWindowBuffer* srIn = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&input);
1237     res = detailEnhProcessImage(instanceSrId, srIn, nullptr, static_cast<int>(level));
1238     if (res != 0) {
1239         detailEnhDestroy(&instanceSrId);
1240         dlclose(lib);
1241         return;
1242     }
1243     res = detailEnhDestroy(&instanceSrId);
1244     if (res != 0) {
1245         dlclose(lib);
1246         return;
1247     }
1248     dlclose(lib);
1249     EXPECT_NE(res, VPE_ALGO_ERR_OK);
1250 }
1251 
1252 // check extern c interface, destroy nullptr
1253 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_55, TestSize.Level1)
1254 {
1255     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
1256     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 2048, 1536);
1257     DetailEnhancerLevel level = DETAIL_ENH_LEVEL_HIGH;
1258     void* lib = dlopen("/system/lib64/libvideoprocessingengine.z.so", RTLD_LAZY);
1259     if (lib == nullptr) {
1260         printf("cannot load vpe lib\n");
1261         return;
1262     }
1263 
1264     typedef int32_t (*DetailEnhancerCreate)(int32_t*);
1265     typedef int32_t (*DetailEnhancerProcessImage)(int32_t,
1266         OHNativeWindowBuffer*, OHNativeWindowBuffer*, int32_t);
1267     typedef int32_t (*DetailEnhancerDestroy)(int32_t*);
1268 
1269     auto detailEnhCreate = reinterpret_cast<DetailEnhancerCreate>(dlsym(lib, "DetailEnhancerCreate"));
1270     auto detailEnhProcessImage =
1271         reinterpret_cast<DetailEnhancerProcessImage>(dlsym(lib, "DetailEnhancerProcessImage"));
1272     auto detailEnhDestroy = reinterpret_cast<DetailEnhancerDestroy>(dlsym(lib, "DetailEnhancerDestroy"));
1273 
1274     int32_t instanceSrId = -1;
1275     int32_t res = detailEnhCreate(&instanceSrId);
1276     if (res != 0 || instanceSrId == -1) {
1277         detailEnhDestroy(&instanceSrId);
1278         dlclose(lib);
1279         return;
1280     }
1281     if (input == nullptr || output == nullptr) {
1282         detailEnhDestroy(&instanceSrId);
1283         dlclose(lib);
1284         return;
1285     }
1286     OHNativeWindowBuffer* srIn = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&input);
1287     OHNativeWindowBuffer* srOut = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&output);
1288     res = detailEnhProcessImage(instanceSrId, srIn, srOut, static_cast<int>(level));
1289     if (res != 0) {
1290         detailEnhDestroy(&instanceSrId);
1291         dlclose(lib);
1292         return;
1293     }
1294     res = detailEnhDestroy(nullptr);
1295     if (res != 0) {
1296         dlclose(lib);
1297         return;
1298     }
1299     dlclose(lib);
1300     EXPECT_NE(res, VPE_ALGO_ERR_OK);
1301 }
1302 
1303 // process BGR to BGR, aisr
1304 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_56, TestSize.Level1)
1305 {
1306     auto detailEnh = DetailEnhancerImage::Create();
1307     DetailEnhancerParameters param {
1308         .uri = "",
1309         .level = DETAIL_ENH_LEVEL_HIGH,
1310     };
1311     detailEnh->SetParameter(param);
1312     int32_t outputWidth = 4096;
1313     int32_t outputHeight = 3072;
1314     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1315     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1316     auto input = CreateSurfaceBuffer(inputFormat, 1024, 768);
1317     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1318     int32_t ret = detailEnh->Process(input, output);
1319     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1320 }
1321 
1322 // process BGR to BGR, high
1323 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_57, TestSize.Level1)
1324 {
1325     auto detailEnh = DetailEnhancerImage::Create();
1326     DetailEnhancerParameters param {
1327         .uri = "",
1328         .level = DETAIL_ENH_LEVEL_HIGH,
1329     };
1330     detailEnh->SetParameter(param);
1331     int32_t outputWidth = 2048;
1332     int32_t outputHeight = 1536;
1333     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1334     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1335     auto input = CreateSurfaceBuffer(inputFormat, 4096, 3072);
1336     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1337     int32_t ret = detailEnh->Process(input, output);
1338     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1339 }
1340 
1341 // process BGR to BGR, medium
1342 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_58, TestSize.Level1)
1343 {
1344     auto detailEnh = DetailEnhancerImage::Create();
1345     DetailEnhancerParameters param {
1346         .uri = "",
1347         .level = DETAIL_ENH_LEVEL_MEDIUM,
1348     };
1349     detailEnh->SetParameter(param);
1350     int32_t outputWidth = 2048;
1351     int32_t outputHeight = 1536;
1352     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1353     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1354     auto input = CreateSurfaceBuffer(inputFormat, 4096, 3072);
1355     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1356     int32_t ret = detailEnh->Process(input, output);
1357     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1358 }
1359 
1360 // process BGR to BGR, low
1361 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_59, TestSize.Level1)
1362 {
1363     auto detailEnh = DetailEnhancerImage::Create();
1364     DetailEnhancerParameters param {
1365         .uri = "",
1366         .level = DETAIL_ENH_LEVEL_LOW,
1367     };
1368     detailEnh->SetParameter(param);
1369     int32_t outputWidth = 2048;
1370     int32_t outputHeight = 1536;
1371     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1372     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1373     auto input = CreateSurfaceBuffer(inputFormat, 4096, 3072);
1374     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1375     int32_t ret = detailEnh->Process(input, output);
1376     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1377 }
1378 
1379 // process BGR to BGR, none
1380 HWTEST_F(DetailEnhancerUnitTest, detailenhancer_process_60, TestSize.Level1)
1381 {
1382     auto detailEnh = DetailEnhancerImage::Create();
1383     DetailEnhancerParameters param {
1384         .uri = "",
1385         .level = DETAIL_ENH_LEVEL_NONE,
1386     };
1387     detailEnh->SetParameter(param);
1388     int32_t outputWidth = 2048;
1389     int32_t outputHeight = 1536;
1390     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1391     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1392     auto input = CreateSurfaceBuffer(inputFormat, 4096, 3072);
1393     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1394     int32_t ret = detailEnh->Process(input, output);
1395     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1396 }
1397 
1398 // check extension extream vision engine, process YCRCB_420_SP, aisr MOVED TO VPE_EXT
1399 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_01, TestSize.Level1)
1400 {
1401     auto detailEnh = DetailEnhancerImage::Create();
1402     DetailEnhancerParameters param {
1403         .uri = "",
1404         .level = DETAIL_ENH_LEVEL_HIGH,
1405     };
1406     detailEnh->SetParameter(param);
1407     int32_t inputWidth = 1024;
1408     int32_t inputHeight = 768;
1409     int32_t outputWidth = 2048;
1410     int32_t outputHeight = 1536;
1411     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1412     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1413     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1414     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1415     int32_t ret = detailEnh->Process(input, output);
1416     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1417 }
1418 
1419 // check extension extream vision engine, process YCRCB_420_SP, high
1420 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_02, TestSize.Level1)
1421 {
1422     auto detailEnh = DetailEnhancerImage::Create();
1423     DetailEnhancerParameters param {
1424         .uri = "",
1425         .level = DETAIL_ENH_LEVEL_HIGH,
1426     };
1427     detailEnh->SetParameter(param);
1428     int32_t inputWidth = 4096;
1429     int32_t inputHeight = 3072;
1430     int32_t outputWidth = 2048;
1431     int32_t outputHeight = 1536;
1432     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1433     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1434     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1435     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1436     int32_t ret = detailEnh->Process(input, output);
1437     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1438 }
1439 
1440 // check extension extream vision engine, process YCRCB_420_SP, medium
1441 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_03, TestSize.Level1)
1442 {
1443     auto detailEnh = DetailEnhancerImage::Create();
1444     DetailEnhancerParameters param {
1445         .uri = "",
1446         .level = DETAIL_ENH_LEVEL_MEDIUM,
1447     };
1448     detailEnh->SetParameter(param);
1449     int32_t inputWidth = 4096;
1450     int32_t inputHeight = 3072;
1451     int32_t outputWidth = 2048;
1452     int32_t outputHeight = 1536;
1453     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1454     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1455     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1456     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1457     int32_t ret = detailEnh->Process(input, output);
1458     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1459 }
1460 
1461 // check extension extream vision engine, process YCRCB_420_SP, low
1462 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_04, TestSize.Level1)
1463 {
1464     auto detailEnh = DetailEnhancerImage::Create();
1465     DetailEnhancerParameters param {
1466         .uri = "",
1467         .level = DETAIL_ENH_LEVEL_LOW,
1468     };
1469     detailEnh->SetParameter(param);
1470     int32_t inputWidth = 4096;
1471     int32_t inputHeight = 3072;
1472     int32_t outputWidth = 2048;
1473     int32_t outputHeight = 1536;
1474     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1475     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1476     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1477     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1478     int32_t ret = detailEnh->Process(input, output);
1479     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1480 }
1481 
1482 // check extension extream vision engine, process YCRCB_420_SP, none
1483 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_05, TestSize.Level1)
1484 {
1485     auto detailEnh = DetailEnhancerImage::Create();
1486     DetailEnhancerParameters param {
1487         .uri = "",
1488         .level = DETAIL_ENH_LEVEL_NONE,
1489     };
1490     detailEnh->SetParameter(param);
1491     int32_t inputWidth = 4096;
1492     int32_t inputHeight = 3072;
1493     int32_t outputWidth = 2048;
1494     int32_t outputHeight = 1536;
1495     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1496     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1497     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1498     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1499     int32_t ret = detailEnh->Process(input, output);
1500     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1501 }
1502 
1503 // check extension extream vision engine, process YCBCR_420_P, aisr MOVED TO VPE_EXT
1504 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_06, TestSize.Level1)
1505 {
1506     auto detailEnh = DetailEnhancerImage::Create();
1507     DetailEnhancerParameters param {
1508         .uri = "",
1509         .level = DETAIL_ENH_LEVEL_HIGH,
1510     };
1511     detailEnh->SetParameter(param);
1512     int32_t inputWidth = 1024;
1513     int32_t inputHeight = 768;
1514     int32_t outputWidth = 2048;
1515     int32_t outputHeight = 1536;
1516     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1517     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1518     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1519     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1520     int32_t ret = detailEnh->Process(input, output);
1521     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1522 }
1523 
1524 // check extension extream vision engine, process YCBCR_420_P, high
1525 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_07, TestSize.Level1)
1526 {
1527     auto detailEnh = DetailEnhancerImage::Create();
1528     DetailEnhancerParameters param {
1529         .uri = "",
1530         .level = DETAIL_ENH_LEVEL_HIGH,
1531     };
1532     detailEnh->SetParameter(param);
1533     int32_t inputWidth = 4096;
1534     int32_t inputHeight = 3072;
1535     int32_t outputWidth = 2048;
1536     int32_t outputHeight = 1536;
1537     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1538     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1539     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1540     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1541     int32_t ret = detailEnh->Process(input, output);
1542     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1543 }
1544 
1545 // check extension extream vision engine, process YCBCR_420_P, medium
1546 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_08, TestSize.Level1)
1547 {
1548     auto detailEnh = DetailEnhancerImage::Create();
1549     DetailEnhancerParameters param {
1550         .uri = "",
1551         .level = DETAIL_ENH_LEVEL_MEDIUM,
1552     };
1553     detailEnh->SetParameter(param);
1554     int32_t inputWidth = 4096;
1555     int32_t inputHeight = 3072;
1556     int32_t outputWidth = 2048;
1557     int32_t outputHeight = 1536;
1558     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1559     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1560     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1561     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1562     int32_t ret = detailEnh->Process(input, output);
1563     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1564 }
1565 
1566 // check extension extream vision engine, process YCBCR_420_P, low
1567 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_09, TestSize.Level1)
1568 {
1569     auto detailEnh = DetailEnhancerImage::Create();
1570     DetailEnhancerParameters param {
1571         .uri = "",
1572         .level = DETAIL_ENH_LEVEL_LOW,
1573     };
1574     detailEnh->SetParameter(param);
1575     int32_t inputWidth = 4096;
1576     int32_t inputHeight = 3072;
1577     int32_t outputWidth = 2048;
1578     int32_t outputHeight = 1536;
1579     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1580     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1581     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1582     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1583     int32_t ret = detailEnh->Process(input, output);
1584     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1585 }
1586 
1587 // check extension extream vision engine, process YCBCR_420_P, none
1588 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_10, TestSize.Level1)
1589 {
1590     auto detailEnh = DetailEnhancerImage::Create();
1591     DetailEnhancerParameters param {
1592         .uri = "",
1593         .level = DETAIL_ENH_LEVEL_NONE,
1594     };
1595     detailEnh->SetParameter(param);
1596     int32_t inputWidth = 4096;
1597     int32_t inputHeight = 3072;
1598     int32_t outputWidth = 2048;
1599     int32_t outputHeight = 1536;
1600     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1601     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCBCR_420_P;
1602     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1603     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1604     int32_t ret = detailEnh->Process(input, output);
1605     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1606 }
1607 
1608 // check extension extream vision engine, process YCRCB_420_P, aisr MOVED TO VPE_EXT
1609 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_11, TestSize.Level1)
1610 {
1611     auto detailEnh = DetailEnhancerImage::Create();
1612     DetailEnhancerParameters param {
1613         .uri = "",
1614         .level = DETAIL_ENH_LEVEL_HIGH,
1615     };
1616     detailEnh->SetParameter(param);
1617     int32_t inputWidth = 1024;
1618     int32_t inputHeight = 768;
1619     int32_t outputWidth = 2048;
1620     int32_t outputHeight = 1536;
1621     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1622     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1623     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1624     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1625     int32_t ret = detailEnh->Process(input, output);
1626     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1627 }
1628 
1629 // check extension extream vision engine, process YCRCB_420_P, high
1630 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_12, TestSize.Level1)
1631 {
1632     auto detailEnh = DetailEnhancerImage::Create();
1633     DetailEnhancerParameters param {
1634         .uri = "",
1635         .level = DETAIL_ENH_LEVEL_HIGH,
1636     };
1637     detailEnh->SetParameter(param);
1638     int32_t inputWidth = 4096;
1639     int32_t inputHeight = 3072;
1640     int32_t outputWidth = 2048;
1641     int32_t outputHeight = 1536;
1642     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1643     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1644     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1645     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1646     int32_t ret = detailEnh->Process(input, output);
1647     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1648 }
1649 
1650 // check extension extream vision engine, process YCRCB_420_P, medium
1651 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_13, TestSize.Level1)
1652 {
1653     auto detailEnh = DetailEnhancerImage::Create();
1654     DetailEnhancerParameters param {
1655         .uri = "",
1656         .level = DETAIL_ENH_LEVEL_MEDIUM,
1657     };
1658     detailEnh->SetParameter(param);
1659     int32_t inputWidth = 4096;
1660     int32_t inputHeight = 3072;
1661     int32_t outputWidth = 2048;
1662     int32_t outputHeight = 1536;
1663     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1664     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1665     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1666     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1667     int32_t ret = detailEnh->Process(input, output);
1668     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1669 }
1670 
1671 // check extension extream vision engine, process YCRCB_420_P, low
1672 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_14, TestSize.Level1)
1673 {
1674     auto detailEnh = DetailEnhancerImage::Create();
1675     DetailEnhancerParameters param {
1676         .uri = "",
1677         .level = DETAIL_ENH_LEVEL_LOW,
1678     };
1679     detailEnh->SetParameter(param);
1680     int32_t inputWidth = 4096;
1681     int32_t inputHeight = 3072;
1682     int32_t outputWidth = 2048;
1683     int32_t outputHeight = 1536;
1684     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1685     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1686     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1687     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1688     int32_t ret = detailEnh->Process(input, output);
1689     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1690 }
1691 
1692 // check extension extream vision engine, process YCRCB_420_P, none
1693 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_15, TestSize.Level1)
1694 {
1695     auto detailEnh = DetailEnhancerImage::Create();
1696     DetailEnhancerParameters param {
1697         .uri = "",
1698         .level = DETAIL_ENH_LEVEL_NONE,
1699     };
1700     detailEnh->SetParameter(param);
1701     int32_t inputWidth = 4096;
1702     int32_t inputHeight = 3072;
1703     int32_t outputWidth = 2048;
1704     int32_t outputHeight = 1536;
1705     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1706     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1707     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1708     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1709     int32_t ret = detailEnh->Process(input, output);
1710     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1711 }
1712 
1713 // check extension extream vision engine, process invalid resolution
1714 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_16, TestSize.Level1)
1715 {
1716     auto detailEnh = DetailEnhancerImage::Create();
1717     DetailEnhancerParameters param {
1718         .uri = "",
1719         .level = DETAIL_ENH_LEVEL_HIGH,
1720     };
1721     detailEnh->SetParameter(param);
1722     int32_t inputWidth = 0;
1723     int32_t inputHeight = 0;
1724     int32_t outputWidth = 2048;
1725     int32_t outputHeight = 1536;
1726     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1727     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1728     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1729     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1730     int32_t ret = detailEnh->Process(input, output);
1731     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1732 }
1733 
1734 // check extension extream vision engine, process invalid resolution
1735 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_17, TestSize.Level1)
1736 {
1737     auto detailEnh = DetailEnhancerImage::Create();
1738     DetailEnhancerParameters param {
1739         .uri = "",
1740         .level = DETAIL_ENH_LEVEL_HIGH,
1741     };
1742     detailEnh->SetParameter(param);
1743     int32_t inputWidth = 1024;
1744     int32_t inputHeight = 768;
1745     int32_t outputWidth = 0;
1746     int32_t outputHeight = 0;
1747     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1748     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
1749     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1750     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1751     int32_t ret = detailEnh->Process(input, output);
1752     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1753 }
1754 
1755 // check extension extream vision engine, process null output buffer
1756 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_18, TestSize.Level1)
1757 {
1758     auto detailEnh = DetailEnhancerImage::Create();
1759     DetailEnhancerParameters param {
1760         .uri = "",
1761         .level = DETAIL_ENH_LEVEL_HIGH,
1762     };
1763     detailEnh->SetParameter(param);
1764     int32_t inputWidth = 4096;
1765     int32_t inputHeight = 3072;
1766     int32_t outputWidth = 2048;
1767     int32_t outputHeight = 1536;
1768     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1769     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1770     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1771     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1772     int32_t ret = detailEnh->Process(input, nullptr);
1773     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1774 }
1775 
1776 // Exceeds minimum reduction ratio
1777 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_19, TestSize.Level1)
1778 {
1779     auto detailEnh = DetailEnhancerImage::Create();
1780     DetailEnhancerParameters param {
1781         .uri = "",
1782         .level = DETAIL_ENH_LEVEL_HIGH,
1783     };
1784     detailEnh->SetParameter(param);
1785     int32_t inputWidth = 4096;
1786     int32_t inputHeight = 3072;
1787     int32_t outputWidth = 2;
1788     int32_t outputHeight = 1;
1789     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1790     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_P;
1791     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1792     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1793     int32_t ret = detailEnh->Process(input, nullptr);
1794     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1795 }
1796 
1797 // check extension extream vision engine, process BGRA_8888, aisr MOVED TO VPE_EXT
1798 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_20, TestSize.Level1)
1799 {
1800     auto detailEnh = DetailEnhancerImage::Create();
1801     DetailEnhancerParameters param {
1802         .uri = "",
1803         .level = DETAIL_ENH_LEVEL_HIGH,
1804     };
1805     detailEnh->SetParameter(param);
1806     int32_t inputWidth = 1024;
1807     int32_t inputHeight = 768;
1808     int32_t outputWidth = 2048;
1809     int32_t outputHeight = 1536;
1810     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1811     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1812     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1813     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1814     int32_t ret = detailEnh->Process(input, output);
1815     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1816 }
1817 
1818 // check extension extream vision engine, process BGRA_8888, high
1819 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_21, TestSize.Level1)
1820 {
1821     auto detailEnh = DetailEnhancerImage::Create();
1822     DetailEnhancerParameters param {
1823         .uri = "",
1824         .level = DETAIL_ENH_LEVEL_HIGH,
1825     };
1826     detailEnh->SetParameter(param);
1827     int32_t inputWidth = 4096;
1828     int32_t inputHeight = 3072;
1829     int32_t outputWidth = 2048;
1830     int32_t outputHeight = 1536;
1831     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1832     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1833     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1834     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1835     int32_t ret = detailEnh->Process(input, output);
1836     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1837 }
1838 
1839 // check extension extream vision engine, process BGRA_8888, medium
1840 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_22, TestSize.Level1)
1841 {
1842     auto detailEnh = DetailEnhancerImage::Create();
1843     DetailEnhancerParameters param {
1844         .uri = "",
1845         .level = DETAIL_ENH_LEVEL_MEDIUM,
1846     };
1847     detailEnh->SetParameter(param);
1848     int32_t inputWidth = 4096;
1849     int32_t inputHeight = 3072;
1850     int32_t outputWidth = 2048;
1851     int32_t outputHeight = 1536;
1852     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1853     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1854     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1855     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1856     int32_t ret = detailEnh->Process(input, output);
1857     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1858 }
1859 
1860 // check extension extream vision engine, process BGRA_8888, low
1861 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_23, TestSize.Level1)
1862 {
1863     auto detailEnh = DetailEnhancerImage::Create();
1864     DetailEnhancerParameters param {
1865         .uri = "",
1866         .level = DETAIL_ENH_LEVEL_LOW,
1867     };
1868     detailEnh->SetParameter(param);
1869     int32_t inputWidth = 4096;
1870     int32_t inputHeight = 3072;
1871     int32_t outputWidth = 2048;
1872     int32_t outputHeight = 1536;
1873     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1874     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1875     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1876     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1877     int32_t ret = detailEnh->Process(input, output);
1878     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1879 }
1880 
1881 // check extension extream vision engine, process BGRA_8888, none
1882 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_24, TestSize.Level1)
1883 {
1884     auto detailEnh = DetailEnhancerImage::Create();
1885     DetailEnhancerParameters param {
1886         .uri = "",
1887         .level = DETAIL_ENH_LEVEL_NONE,
1888     };
1889     detailEnh->SetParameter(param);
1890     int32_t inputWidth = 4096;
1891     int32_t inputHeight = 3072;
1892     int32_t outputWidth = 2048;
1893     int32_t outputHeight = 1536;
1894     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1895     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_BGRA_8888;
1896     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1897     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1898     int32_t ret = detailEnh->Process(input, output);
1899     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
1900 }
1901 
1902 // check enforce extension extream vision engine, process RGBA1010102, HIGH
1903 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_25, TestSize.Level1)
1904 {
1905     auto detailEnh = DetailEnhancerImage::Create();
1906     DetailEnhancerParameters param {
1907         .uri = "",
1908         .level = DETAIL_ENH_LEVEL_HIGH,
1909     };
1910     detailEnh->SetParameter(param);
1911     int32_t inputWidth = 4096;
1912     int32_t inputHeight = 3072;
1913     int32_t outputWidth = 2048;
1914     int32_t outputHeight = 1536;
1915     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
1916     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
1917     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1918     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1919     int32_t ret = detailEnh->Process(input, output);
1920     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
1921 }
1922 
1923 // check enforce extension extream vision engine, process RGBA1010102, MEDIUM
1924 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_26, TestSize.Level1)
1925 {
1926     auto detailEnh = DetailEnhancerImage::Create();
1927     DetailEnhancerParameters param {
1928         .uri = "",
1929         .level = DETAIL_ENH_LEVEL_MEDIUM,
1930     };
1931     detailEnh->SetParameter(param);
1932     int32_t inputWidth = 4096;
1933     int32_t inputHeight = 3072;
1934     int32_t outputWidth = 2048;
1935     int32_t outputHeight = 1536;
1936     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
1937     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
1938     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1939     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1940     int32_t ret = detailEnh->Process(input, output);
1941     EXPECT_NE(ret, VPE_ALGO_ERR_OK);  // medium not support RGB1010102
1942 }
1943 
1944 // check enforce extension extream vision engine, process RGBA1010102, LOW
1945 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_27, TestSize.Level1)
1946 {
1947     auto detailEnh = DetailEnhancerImage::Create();
1948     DetailEnhancerParameters param {
1949         .uri = "",
1950         .level = DETAIL_ENH_LEVEL_LOW,
1951     };
1952     detailEnh->SetParameter(param);
1953     int32_t inputWidth = 4096;
1954     int32_t inputHeight = 3072;
1955     int32_t outputWidth = 2048;
1956     int32_t outputHeight = 1536;
1957     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
1958     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
1959     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1960     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1961     int32_t ret = detailEnh->Process(input, output);
1962     EXPECT_NE(ret, VPE_ALGO_ERR_OK); // low not support RGB1010102
1963 }
1964 
1965 // check enforce extension extream vision engine, process RGBA1010102, NONE
1966 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_28, TestSize.Level1)
1967 {
1968     auto detailEnh = DetailEnhancerImage::Create();
1969     DetailEnhancerParameters param {
1970         .uri = "",
1971         .level = DETAIL_ENH_LEVEL_NONE,
1972     };
1973     detailEnh->SetParameter(param);
1974     int32_t inputWidth = 4096;
1975     int32_t inputHeight = 3072;
1976     int32_t outputWidth = 2048;
1977     int32_t outputHeight = 1536;
1978     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
1979     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
1980     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
1981     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
1982     int32_t ret = detailEnh->Process(input, output);
1983     EXPECT_NE(ret, VPE_ALGO_ERR_OK); // none not support RGB1010102
1984 }
1985 
1986 // check extension extream vision engine, process RGBA1010102, HIGH
1987 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_29, TestSize.Level1)
1988 {
1989     auto detailEnh = DetailEnhancerImage::Create();
1990     DetailEnhancerParameters param {
1991         .uri = "",
1992         .level = DETAIL_ENH_LEVEL_HIGH,
1993     };
1994     detailEnh->SetParameter(param);
1995     int32_t inputWidth = 4096;
1996     int32_t inputHeight = 3072;
1997     int32_t outputWidth = 2048;
1998     int32_t outputHeight = 1536;
1999     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
2000     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
2001     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
2002     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
2003     int32_t ret = detailEnh->Process(input, output);
2004     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
2005 }
2006 
2007 // check extension extream vision engine, process RGBA1010102, HIGH, format is not consistent
2008 HWTEST_F(DetailEnhancerUnitTest, extream_vision_engine_process_30, TestSize.Level1)
2009 {
2010     auto detailEnh = DetailEnhancerImage::Create();
2011     DetailEnhancerParameters param {
2012         .uri = "",
2013         .level = DETAIL_ENH_LEVEL_HIGH,
2014     };
2015     detailEnh->SetParameter(param);
2016     int32_t inputWidth = 4096;
2017     int32_t inputHeight = 3072;
2018     int32_t outputWidth = 2048;
2019     int32_t outputHeight = 1536;
2020     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_RGBA_1010102;
2021     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
2022     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, outputWidth, outputHeight);
2023     int32_t ret = detailEnh->Process(input, output);
2024     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
2025 }
2026 
2027 // normal process of aisr, AISR MOVED TO VPE_EXT
2028 HWTEST_F(DetailEnhancerUnitTest, aisr_process_9, TestSize.Level1)
2029 {
2030     auto detailEnh = DetailEnhancerImage::Create();
2031     DetailEnhancerParameters param {
2032         .uri = "",
2033         .level = DETAIL_ENH_LEVEL_HIGH,
2034     };
2035     detailEnh->SetParameter(param);
2036     int32_t inputWidth = 1024;
2037     int32_t inputHeight = 768;
2038     int32_t outputWidth = 2048;
2039     int32_t outputHeight = 1536;
2040     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2041     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2042     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
2043     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
2044     int32_t ret = detailEnh->Process(input, output);
2045     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
2046     ret = detailEnh->Process(input, output); // try to process twice
2047     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
2048 }
2049 
2050 // normal process of aisr, high
2051 HWTEST_F(DetailEnhancerUnitTest, aisr_process_10, TestSize.Level1)
2052 {
2053     auto detailEnh = DetailEnhancerImage::Create();
2054     DetailEnhancerParameters param {
2055         .uri = "",
2056         .level = DETAIL_ENH_LEVEL_HIGH,
2057     };
2058     detailEnh->SetParameter(param);
2059     int32_t inputWidth = 4096;
2060     int32_t inputHeight = 3072;
2061     int32_t outputWidth = 2048;
2062     int32_t outputHeight = 1536;
2063     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2064     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2065     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
2066     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
2067     int32_t ret = detailEnh->Process(input, output);
2068     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
2069     ret = detailEnh->Process(input, output); // try to process twice
2070     EXPECT_EQ(ret, VPE_ALGO_ERR_OK);
2071 }
2072 
2073 // normal process of aisr, medium
2074 HWTEST_F(DetailEnhancerUnitTest, aisr_process_11, TestSize.Level1)
2075 {
2076     auto detailEnh = DetailEnhancerImage::Create();
2077     DetailEnhancerParameters param {
2078         .uri = "",
2079         .level = DETAIL_ENH_LEVEL_MEDIUM,
2080     };
2081     detailEnh->SetParameter(param);
2082     int32_t inputWidth = 4096;
2083     int32_t inputHeight = 3072;
2084     int32_t outputWidth = 2048;
2085     int32_t outputHeight = 1536;
2086     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2087     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2088     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
2089     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
2090     int32_t ret = detailEnh->Process(input, output);
2091     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
2092     ret = detailEnh->Process(input, output); // try to process twice
2093     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
2094 }
2095 
2096 // normal process of aisr, low
2097 HWTEST_F(DetailEnhancerUnitTest, aisr_process_12, TestSize.Level1)
2098 {
2099     auto detailEnh = DetailEnhancerImage::Create();
2100     DetailEnhancerParameters param {
2101         .uri = "",
2102         .level = DETAIL_ENH_LEVEL_LOW,
2103     };
2104     detailEnh->SetParameter(param);
2105     int32_t inputWidth = 4096;
2106     int32_t inputHeight = 3072;
2107     int32_t outputWidth = 2048;
2108     int32_t outputHeight = 1536;
2109     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2110     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2111     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
2112     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
2113     int32_t ret = detailEnh->Process(input, output);
2114     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
2115     ret = detailEnh->Process(input, output); // try to process twice
2116     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
2117 }
2118 
2119 // normal process of aisr, none
2120 HWTEST_F(DetailEnhancerUnitTest, aisr_process_13, TestSize.Level1)
2121 {
2122     auto detailEnh = DetailEnhancerImage::Create();
2123     DetailEnhancerParameters param {
2124         .uri = "",
2125         .level = DETAIL_ENH_LEVEL_NONE,
2126     };
2127     detailEnh->SetParameter(param);
2128     int32_t inputWidth = 4096;
2129     int32_t inputHeight = 3072;
2130     int32_t outputWidth = 2048;
2131     int32_t outputHeight = 1536;
2132     int32_t inputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2133     int32_t outputFormat = OHOS::GRAPHIC_PIXEL_FMT_YCRCB_420_SP;
2134     auto input = CreateSurfaceBuffer(inputFormat, inputWidth, inputHeight);
2135     auto output = CreateSurfaceBuffer(outputFormat, outputWidth, outputHeight);
2136     int32_t ret = detailEnh->Process(input, output);
2137     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
2138     ret = detailEnh->Process(input, output); // try to process twice
2139     EXPECT_NE(ret, VPE_ALGO_ERR_OK);
2140 }
2141 
2142 // destroy twice
2143 HWTEST_F(DetailEnhancerUnitTest, aisr_process_1, TestSize.Level1)
2144 {
2145     auto input = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 4096, 3072);
2146     auto output = CreateSurfaceBuffer(DEFAULT_FORMAT_RGBAEIGHT, 2048, 1536);
2147     DetailEnhancerLevel level = DETAIL_ENH_LEVEL_HIGH;
2148     void* lib = dlopen("/system/lib64/libvideoprocessingengine.z.so", RTLD_LAZY);
2149     if (lib == nullptr) {
2150         printf("cannot load vpe lib\n");
2151         return;
2152     }
2153 
2154     typedef int32_t (*DetailEnhancerCreate)(int32_t*);
2155     typedef int32_t (*DetailEnhancerProcessImage)(int32_t,
2156         OHNativeWindowBuffer*, OHNativeWindowBuffer*, int32_t);
2157     typedef int32_t (*DetailEnhancerDestroy)(int32_t*);
2158 
2159     auto detailEnhCreate = reinterpret_cast<DetailEnhancerCreate>(dlsym(lib, "DetailEnhancerCreate"));
2160     auto detailEnhProcessImage =
2161         reinterpret_cast<DetailEnhancerProcessImage>(dlsym(lib, "DetailEnhancerProcessImage"));
2162     auto detailEnhDestroy = reinterpret_cast<DetailEnhancerDestroy>(dlsym(lib, "DetailEnhancerDestroy"));
2163 
2164     int32_t instanceSrId = -1;
2165     int32_t res = detailEnhCreate(&instanceSrId);
2166     if (res != 0 || instanceSrId == -1) {
2167         detailEnhDestroy(&instanceSrId);
2168         dlclose(lib);
2169         return;
2170     }
2171     if (input == nullptr || output == nullptr) {
2172         detailEnhDestroy(&instanceSrId);
2173         dlclose(lib);
2174         return;
2175     }
2176     OHNativeWindowBuffer* srIn = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&input);
2177     OHNativeWindowBuffer* srOut = OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer(&output);
2178     res = detailEnhProcessImage(instanceSrId, srIn, srOut, static_cast<int>(level));
2179     if (res != 0) {
2180         detailEnhDestroy(&instanceSrId);
2181         dlclose(lib);
2182         return;
2183     }
2184     res = detailEnhDestroy(&instanceSrId);
2185     if (res != 0) {
2186         EXPECT_EQ(res, VPE_ALGO_ERR_OK);
2187         dlclose(lib);
2188         return;
2189     }
2190     EXPECT_EQ(res, VPE_ALGO_ERR_OK);
2191     res = detailEnhDestroy(&instanceSrId); // destroy twice
2192     dlclose(lib);
2193     EXPECT_NE(res, VPE_ALGO_ERR_OK);
2194 }
2195 
2196 } // namespace VideoProcessingEngine
2197 } // namespace Media
2198 } // namespace OHOS
2199