• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <vector>
17 #include "gtest/gtest.h"
18 
19 #include "image_effect_errors.h"
20 #include "image_effect.h"
21 #include "image_effect_filter.h"
22 #include "image_type.h"
23 #include "efilter_factory.h"
24 #include "brightness_efilter.h"
25 #include "contrast_efilter.h"
26 #include "test_common.h"
27 #include "external_loader.h"
28 #include "native_effect_base.h"
29 #include "native_window.h"
30 #include "mock_pixel_map.h"
31 #include "pixelmap_native_impl.h"
32 #include "test_native_buffer_utils.h"
33 #include "test_pixel_map_utils.h"
34 #include "crop_efilter.h"
35 #include "mock_producer_surface.h"
36 #include "surface_utils.h"
37 #include "mock_picture.h"
38 #include "picture_native_impl.h"
39 
40 using namespace testing::ext;
41 using namespace OHOS::Media;
42 using namespace OHOS::Media::Effect::Test;
43 using ::testing::InSequence;
44 using ::testing::Mock;
45 
46 static std::string g_jpgPath;
47 static std::string g_notJpgPath;
48 static std::string g_jpgUri;
49 static std::string g_notJpgUri;
50 static std::string g_jpgHdrPath;
51 static std::string g_adobeHdrPath;
52 static OHNativeWindow *g_nativeWindow = nullptr;
53 
54 namespace {
55     constexpr uint32_t CROP_FACTOR = 2;
56 }
57 
58 namespace OHOS {
59 namespace Media {
60 namespace Effect {
61 class CustomTestEFilter : public EFilter {
62 public:
CustomTestEFilter(const std::string & name)63     explicit CustomTestEFilter(const std::string &name) : EFilter(name) {}
~CustomTestEFilter()64     ~CustomTestEFilter() {}
65 
Render(EffectBuffer * buffer,std::shared_ptr<EffectContext> & context)66     ErrorCode Render(EffectBuffer *buffer, std::shared_ptr<EffectContext> &context) override
67     {
68         return PushData(buffer, context);
69     }
70 
Render(EffectBuffer * src,EffectBuffer * dst,std::shared_ptr<EffectContext> & context)71     ErrorCode Render(EffectBuffer *src, EffectBuffer *dst, std::shared_ptr<EffectContext> &context) override
72     {
73         return ErrorCode::SUCCESS;
74     }
75 
Restore(const EffectJsonPtr & values)76     ErrorCode Restore(const EffectJsonPtr &values) override
77     {
78         return ErrorCode::SUCCESS;
79     }
80 
GetEffectInfo(const std::string & name)81     static std::shared_ptr<EffectInfo> GetEffectInfo(const std::string &name)
82     {
83         std::shared_ptr<EffectInfo> effectInfo = std::make_shared<EffectInfo>();
84         effectInfo->formats_.emplace(IEffectFormat::RGBA8888, std::vector<IPType>{ IPType::GPU });
85         return effectInfo;
86     }
87 
Save(EffectJsonPtr & res)88     ErrorCode Save(EffectJsonPtr &res) override
89     {
90         res->Put("name", name_);
91         EffectJsonPtr jsonValues = EffectJsonHelper::CreateObject();
92         Plugin::Any any;
93         auto it = values_.find(Test::KEY_FILTER_INTENSITY);
94         if (it == values_.end()) {
95             return ErrorCode::ERR_UNKNOWN;
96         }
97 
98         auto value = Plugin::AnyCast<void *>(&it->second);
99         if (value == nullptr) {
100             return ErrorCode::ERR_UNKNOWN;
101         }
102 
103         std::string jsonValue = *reinterpret_cast<char **>(value);
104         jsonValues->Put(it->first, jsonValue);
105         res->Put("values", jsonValues);
106         return ErrorCode::SUCCESS;
107     }
108 };
109 
110 class CustomTestEFilter2 : public CustomTestEFilter {
111 public:
CustomTestEFilter2(const std::string & name)112     explicit CustomTestEFilter2(const std::string &name) : CustomTestEFilter(name) {}
~CustomTestEFilter2()113     ~CustomTestEFilter2() {}
GetEffectInfo(const std::string & name)114     static std::shared_ptr<EffectInfo> GetEffectInfo(const std::string &name)
115     {
116         std::shared_ptr<EffectInfo> effectInfo = std::make_shared<EffectInfo>();
117         effectInfo->formats_.emplace(IEffectFormat::RGBA8888, std::vector<IPType>{ IPType::CPU });
118         return effectInfo;
119     }
120 };
121 
122 namespace Test {
123 class NativeImageEffectUnittest : public testing::Test {
124 public:
125     NativeImageEffectUnittest() = default;
126 
127     ~NativeImageEffectUnittest() override = default;
128 
SetUpTestCase()129     static void SetUpTestCase()
130     {
131         g_jpgPath = std::string("/data/test/resource/image_effect_1k_test1.jpg");
132         g_notJpgPath = std::string("/data/test/resource/image_effect_1k_test1.png");
133         g_jpgUri = std::string("file:///data/test/resource/image_effect_1k_test1.jpg");
134         g_notJpgUri = std::string("file:///data/test/resource/image_effect_1k_test1.png");
135         g_jpgHdrPath = std::string("/data/test/resource/image_effect_hdr_test1.jpg");
136         g_adobeHdrPath = std::string("/data/test/resource/image_effect_adobe_test1.jpg");
137         consumerSurface_ = Surface::CreateSurfaceAsConsumer("UnitTest");
138         sptr<IBufferProducer> producer = consumerSurface_->GetProducer();
139         sptr<ProducerSurface> surf = new(std::nothrow) MockProducerSurface(producer);
140         surf->Init();
141         auto utils = SurfaceUtils::GetInstance();
142         utils->Add(surf->GetUniqueId(), surf);
143         ohSurface_ = surf;
144         g_nativeWindow = CreateNativeWindowFromSurface(&ohSurface_);
145 
146         nativeBufferRgba_ = TestNativeBufferUtils::CreateNativeBuffer(GraphicPixelFormat::GRAPHIC_PIXEL_FMT_RGBA_8888);
147         nativeBufferNV12_ =
148             TestNativeBufferUtils::CreateNativeBuffer(GraphicPixelFormat::GRAPHIC_PIXEL_FMT_YCBCR_420_SP);
149         nativeBufferNV21_ =
150             TestNativeBufferUtils::CreateNativeBuffer(GraphicPixelFormat::GRAPHIC_PIXEL_FMT_YCRCB_420_SP);
151     }
152 
TearDownTestCase()153     static void TearDownTestCase()
154     {
155         if (g_nativeWindow != nullptr) {
156             DestoryNativeWindow(g_nativeWindow);
157             g_nativeWindow = nullptr;
158         }
159         consumerSurface_ = nullptr;
160         ohSurface_ = nullptr;
161         nativeBufferRgba_ = nullptr;
162         nativeBufferNV12_ = nullptr;
163         nativeBufferNV21_ = nullptr;
164     }
165 
SetUp()166     void SetUp() override
167     {
168         mockPixelMap_ = std::make_shared<MockPixelMap>();
169         pixelmapNative_ = new OH_PixelmapNative(mockPixelMap_);
170         ExternLoader::Instance()->InitExt();
171         EFilterFactory::Instance()->functions_.clear();
172         EFilterFactory::Instance()->RegisterEFilter<BrightnessEFilter>(BRIGHTNESS_EFILTER);
173         EFilterFactory::Instance()->RegisterEFilter<ContrastEFilter>(CONTRAST_EFILTER);
174         EFilterFactory::Instance()->RegisterEFilter<CustomTestEFilter>(CUSTOM_TEST_EFILTER);
175         EFilterFactory::Instance()->RegisterEFilter<CustomTestEFilter2>(CUSTOM_TEST_EFILTER2);
176         EFilterFactory::Instance()->RegisterEFilter<CropEFilter>(CROP_EFILTER);
177         EFilterFactory::Instance()->delegates_.clear();
178         filterInfo_ = OH_EffectFilterInfo_Create();
179         OH_EffectFilterInfo_SetFilterName(filterInfo_, BRIGHTNESS_EFILTER);
180         ImageEffect_BufferType bufferTypes[] = { ImageEffect_BufferType::EFFECT_BUFFER_TYPE_PIXEL };
181         OH_EffectFilterInfo_SetSupportedBufferTypes(filterInfo_, sizeof(bufferTypes) / sizeof(ImageEffect_BufferType),
182             bufferTypes);
183         ImageEffect_Format formats[] = { ImageEffect_Format::EFFECT_PIXEL_FORMAT_RGBA8888,
184             ImageEffect_Format::EFFECT_PIXEL_FORMAT_NV12, ImageEffect_Format::EFFECT_PIXEL_FORMAT_NV21};
185         OH_EffectFilterInfo_SetSupportedFormats(filterInfo_, sizeof(formats) / sizeof(ImageEffect_Format), formats);
186     }
187 
TearDown()188     void TearDown() override
189     {
190         delete pixelmapNative_;
191         mockPixelMap_ = nullptr;
192 
193         pixelmapNative_ = nullptr;
194         if (filterInfo_ != nullptr) {
195             OH_EffectFilterInfo_Release(filterInfo_);
196             filterInfo_ = nullptr;
197         }
198     }
199 
200     std::shared_ptr<PixelMap> mockPixelMap_;
201     OH_PixelmapNative *pixelmapNative_ = nullptr;
202 
203     ImageEffect_FilterDelegate delegate_ = {
__anon775fb18a0202() 204         .setValue = [](OH_EffectFilter *filter, const char *key, const ImageEffect_Any *value) { return true; },
__anon775fb18a0302() 205         .render = [](OH_EffectFilter *filter, OH_EffectBufferInfo *src, OH_EffectFilterDelegate_PushData pushData) {
206             void *addr = nullptr;
207             (void)OH_EffectBufferInfo_GetAddr(src, &addr);
208             int32_t width = 0;
209             (void)OH_EffectBufferInfo_GetWidth(src, &width);
210             int32_t height = 0;
211             (void)OH_EffectBufferInfo_GetHeight(src, &height);
212             int32_t rowSize = 0;
213             (void)OH_EffectBufferInfo_GetRowSize(src, &rowSize);
214             ImageEffect_Format format = ImageEffect_Format::EFFECT_PIXEL_FORMAT_UNKNOWN;
215             (void)OH_EffectBufferInfo_GetEffectFormat(src, &format);
216             int64_t timestamp = 0;
217             (void)OH_EffectBufferInfo_GetTimestamp(src, &timestamp);
218 
219             (void)OH_EffectBufferInfo_SetAddr(src, addr);
220             (void)OH_EffectBufferInfo_SetWidth(src, width);
221             (void)OH_EffectBufferInfo_SetHeight(src, height);
222             (void)OH_EffectBufferInfo_SetRowSize(src, rowSize);
223             (void)OH_EffectBufferInfo_SetEffectFormat(src, format);
224             (void)OH_EffectBufferInfo_SetTimestamp(src, timestamp);
225 
226             pushData(filter, src);
227             return true;
228         },
__anon775fb18a0402() 229         .save = [](OH_EffectFilter *filter, char **info) {
230             EffectJsonPtr root = EffectJsonHelper::CreateObject();
231             root->Put("name", std::string(CUSTOM_BRIGHTNESS_EFILTER));
232             std::string infoStr = root->ToString();
233             char *infoChar = static_cast<char *>(malloc(infoStr.length() + 1));
234             infoChar[infoStr.length()] = '\0';
235             auto res = strcpy_s(infoChar, infoStr.length() + 1, infoStr.c_str());
236             if (res != 0) {
237                 return false;
238             }
239             *info = infoChar;
240             return true;
241         },
__anon775fb18a0502() 242         .restore = [](const char *info) {
243             OH_EffectFilter *filter = OH_EffectFilter_Create(CUSTOM_BRIGHTNESS_EFILTER);
244             ImageEffect_Any value;
245             value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
246             value.dataValue.floatValue = 50.f;
247             OH_EffectFilter_SetValue(filter, BRIGHTNESS_EFILTER, &value);
248             return filter;
249         }
250     };
251 
252     OH_EffectFilterInfo *filterInfo_ = nullptr;
253     static inline sptr<Surface> consumerSurface_;
254     static inline sptr<Surface> ohSurface_;
255     static inline std::shared_ptr<OH_NativeBuffer> nativeBufferRgba_;
256     static inline std::shared_ptr<OH_NativeBuffer> nativeBufferNV12_;
257     static inline std::shared_ptr<OH_NativeBuffer> nativeBufferNV21_;
258 };
259 
260 /**
261  * Feature: ImageEffect
262  * Function: Test OH_ImageEffect_SetInputUri with normal parameter
263  * SubFunction: NA
264  * FunctionPoints: NA
265  * EnvConditions: NA
266  * CaseDescription: Test OH_ImageEffect_SetInputUri with normal parameter
267  */
268 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetInputUri001, TestSize.Level1)
269 {
270     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
271     ASSERT_NE(imageEffect, nullptr);
272 
273     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
274     ASSERT_NE(filter, nullptr);
275 
276     ImageEffect_Any value;
277     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
278     value.dataValue.floatValue = 100.f;
279     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
280     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
281 
282     errorCode = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
283     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
284 
285     errorCode = OH_ImageEffect_Start(imageEffect);
286     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
287 
288     errorCode = OH_ImageEffect_Release(imageEffect);
289     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
290 }
291 
292 /**
293  * Feature: ImageEffect
294  * Function: Test OH_ImageEffect_SetInputUri with all empty parameter
295  * SubFunction: NA
296  * FunctionPoints: NA
297  * EnvConditions: NA
298  * CaseDescription: Test OH_ImageEffect_SetInputUri with all empty parameter
299  */
300 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetInputUri002, TestSize.Level1)
301 {
302     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
303     ASSERT_NE(imageEffect, nullptr);
304 
305     ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputUri(nullptr, nullptr);
306     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
307 
308     errorCode = OH_ImageEffect_Start(imageEffect);
309     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
310 
311     errorCode = OH_ImageEffect_Release(imageEffect);
312     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
313 }
314 
315 /**
316  * Feature: ImageEffect
317  * Function: Test OH_ImageEffect_SetInputUri with empty OH_ImageEffect
318  * SubFunction: NA
319  * FunctionPoints: NA
320  * EnvConditions: NA
321  * CaseDescription: Test OH_ImageEffect_SetInputUri with empty OH_ImageEffect
322  */
323 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetInputUri003, TestSize.Level1)
324 {
325     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
326     ASSERT_NE(imageEffect, nullptr);
327 
328     ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputUri(nullptr, g_jpgUri.c_str());
329     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
330 
331     errorCode = OH_ImageEffect_Start(imageEffect);
332     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
333 
334     errorCode = OH_ImageEffect_Release(imageEffect);
335     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
336 }
337 
338 /**
339  * Feature: ImageEffect
340  * Function: Test OH_ImageEffect_SetInputUri with empty path
341  * SubFunction: NA
342  * FunctionPoints: NA
343  * EnvConditions: NA
344  * CaseDescription: Test OH_ImageEffect_SetInputUri with empty path
345  */
346 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetInputUri004, TestSize.Level1)
347 {
348     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
349     ASSERT_NE(imageEffect, nullptr);
350 
351     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
352     ASSERT_NE(filter, nullptr);
353 
354     ImageEffect_Any value;
355     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
356     value.dataValue.floatValue = 100.f;
357     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
358     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
359 
360     errorCode = OH_ImageEffect_SetInputUri(imageEffect, nullptr);
361     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
362 
363     errorCode = OH_ImageEffect_Start(imageEffect);
364     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
365 
366     errorCode = OH_ImageEffect_Release(imageEffect);
367     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
368 }
369 
370 /**
371  * Feature: ImageEffect
372  * Function: Test OH_ImageEffect_SetInputUri with unsupport path
373  * SubFunction: NA
374  * FunctionPoints: NA
375  * EnvConditions: NA
376  * CaseDescription: Test OH_ImageEffect_SetInputUri with unsupport path
377  */
378 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetInputUri005, TestSize.Level1)
379 {
380     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
381     ASSERT_NE(imageEffect, nullptr);
382 
383     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
384     ASSERT_NE(filter, nullptr);
385 
386     ImageEffect_Any value;
387     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
388     value.dataValue.floatValue = 100.f;
389     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
390     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
391 
392     errorCode = OH_ImageEffect_SetInputUri(imageEffect, g_notJpgUri.c_str());
393     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
394 
395     errorCode = OH_ImageEffect_Start(imageEffect);
396     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
397 
398     errorCode = OH_ImageEffect_Release(imageEffect);
399     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
400 }
401 
402 /**
403  * Feature: ImageEffect
404  * Function: Test OH_ImageEffect_SetOutputUri with normal parameter
405  * SubFunction: NA
406  * FunctionPoints: NA
407  * EnvConditions: NA
408  * CaseDescription: Test OH_ImageEffect_SetOutputUri with normal parameter
409  */
410 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputUri001, TestSize.Level1)
411 {
412     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
413     ASSERT_NE(imageEffect, nullptr);
414 
415     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
416     ASSERT_NE(filter, nullptr);
417 
418     ImageEffect_Any value;
419     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
420     value.dataValue.floatValue = 100.f;
421     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
422     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
423 
424     errorCode = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
425     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
426 
427     errorCode = OH_ImageEffect_SetOutputUri(imageEffect, g_jpgUri.c_str());
428     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
429 
430     errorCode = OH_ImageEffect_Start(imageEffect);
431     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
432 
433     errorCode = OH_ImageEffect_Release(imageEffect);
434     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
435 }
436 
437 /**
438  * Feature: ImageEffect
439  * Function: Test OH_ImageEffect_SetOutputUri with all empty parameter
440  * SubFunction: NA
441  * FunctionPoints: NA
442  * EnvConditions: NA
443  * CaseDescription: Test OH_ImageEffect_SetOutputUri with all empty parameter
444  */
445 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputUri002, TestSize.Level1)
446 {
447     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
448     ASSERT_NE(imageEffect, nullptr);
449 
450     ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
451     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
452 
453     errorCode = OH_ImageEffect_SetOutputUri(nullptr, nullptr);
454     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
455 
456     errorCode = OH_ImageEffect_Start(imageEffect);
457     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
458 
459     errorCode = OH_ImageEffect_Release(imageEffect);
460     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
461 }
462 
463 /**
464  * Feature: ImageEffect
465  * Function: Test OH_ImageEffect_SetOutputUri with empty OH_ImageEffect
466  * SubFunction: NA
467  * FunctionPoints: NA
468  * EnvConditions: NA
469  * CaseDescription: Test OH_ImageEffect_SetOutputUri with empty OH_ImageEffect
470  */
471 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputUri003, TestSize.Level1)
472 {
473     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
474     ASSERT_NE(imageEffect, nullptr);
475 
476     ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
477     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
478 
479     errorCode = OH_ImageEffect_SetOutputUri(nullptr, g_jpgUri.c_str());
480     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
481 
482     errorCode = OH_ImageEffect_Start(imageEffect);
483     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
484 
485     errorCode = OH_ImageEffect_Release(imageEffect);
486     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
487 }
488 
489 /**
490  * Feature: ImageEffect
491  * Function: Test OH_ImageEffect_SetOutputUri with empty path
492  * SubFunction: NA
493  * FunctionPoints: NA
494  * EnvConditions: NA
495  * CaseDescription: Test OH_ImageEffect_SetOutputUri with empty path
496  */
497 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputUri004, TestSize.Level1)
498 {
499     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
500     ASSERT_NE(imageEffect, nullptr);
501 
502     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
503     ASSERT_NE(filter, nullptr);
504 
505     ImageEffect_Any value;
506     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
507     value.dataValue.floatValue = 100.f;
508     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
509     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
510 
511     errorCode = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
512     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
513 
514     errorCode = OH_ImageEffect_SetOutputUri(imageEffect, nullptr);
515     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
516 
517     errorCode = OH_ImageEffect_Start(imageEffect);
518     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
519 
520     errorCode = OH_ImageEffect_Release(imageEffect);
521     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
522 }
523 
524 /**
525  * Feature: ImageEffect
526  * Function: Test OH_ImageEffect_SetOutputUri with unsupport path
527  * SubFunction: NA
528  * FunctionPoints: NA
529  * EnvConditions: NA
530  * CaseDescription: Test OH_ImageEffect_SetOutputUri with unsupport path
531  */
532 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputUri005, TestSize.Level1)
533 {
534     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
535     ASSERT_NE(imageEffect, nullptr);
536 
537     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
538     ASSERT_NE(filter, nullptr);
539 
540     ImageEffect_Any value;
541     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
542     value.dataValue.floatValue = 100.f;
543     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
544     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
545 
546     errorCode = OH_ImageEffect_SetInputUri(imageEffect, g_jpgUri.c_str());
547     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
548 
549     errorCode = OH_ImageEffect_SetOutputUri(imageEffect, g_notJpgUri.c_str());
550     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
551 
552     errorCode = OH_ImageEffect_Start(imageEffect);
553     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
554 
555     errorCode = OH_ImageEffect_Release(imageEffect);
556     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
557 }
558 
559 /**
560  * Feature: ImageEffect
561  * Function: Test OH_ImageEffect_SetOutputUri with no OH_ImageEffect_SetInputUri
562  * SubFunction: NA
563  * FunctionPoints: NA
564  * EnvConditions: NA
565  * CaseDescription: Test OH_ImageEffect_SetOutputUri with no OH_ImageEffect_SetInputUri
566  */
567 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputUri006, TestSize.Level1)
568 {
569     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
570     ASSERT_NE(imageEffect, nullptr);
571 
572     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
573     ASSERT_NE(filter, nullptr);
574 
575     ImageEffect_Any value;
576     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
577     value.dataValue.floatValue = 100.f;
578     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
579     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
580 
581     errorCode = OH_ImageEffect_SetOutputUri(imageEffect, g_jpgUri.c_str());
582     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
583 
584     errorCode = OH_ImageEffect_Start(imageEffect);
585     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); // not set input data
586 
587     errorCode = OH_ImageEffect_Release(imageEffect);
588     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
589 }
590 
591 /**
592  * Feature: ImageEffect
593  * Function: Test OH_ImageEffect_SetInputNativeBuffer with normal parameter
594  * SubFunction: NA
595  * FunctionPoints: NA
596  * EnvConditions: NA
597  * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with normal parameter
598  */
599 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetInputNativeBufferUnittest001, TestSize.Level1)
600 {
601     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
602     ASSERT_NE(imageEffect, nullptr);
603 
604     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
605     ASSERT_NE(filter, nullptr);
606 
607     ImageEffect_Any value;
608     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
609     value.dataValue.floatValue = 100.f;
610     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
611     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
612 
613     errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBufferRgba_.get());
614     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
615 
616     errorCode = OH_ImageEffect_Start(imageEffect);
617     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
618 
619     errorCode = OH_ImageEffect_Release(imageEffect);
620     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
621 }
622 
623 /**
624  * Feature: ImageEffect
625  * Function: Test OH_ImageEffect_SetInputNativeBuffer with all empty parameter
626  * SubFunction: NA
627  * FunctionPoints: NA
628  * EnvConditions: NA
629  * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with all empty parameter
630  */
631 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetInputNativeBufferUnittest002, TestSize.Level1)
632 {
633     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
634     ASSERT_NE(imageEffect, nullptr);
635 
636     ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputNativeBuffer(nullptr, nullptr);
637     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
638 
639     errorCode = OH_ImageEffect_Start(imageEffect);
640     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
641 
642     errorCode = OH_ImageEffect_Release(imageEffect);
643     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
644 }
645 
646 /**
647  * Feature: ImageEffect
648  * Function: Test OH_ImageEffect_SetInputNativeBuffer with empty OH_ImageEffect
649  * SubFunction: NA
650  * FunctionPoints: NA
651  * EnvConditions: NA
652  * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with empty OH_ImageEffect
653  */
654 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetInputNativeBufferUnittest003, TestSize.Level1)
655 {
656     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
657     ASSERT_NE(imageEffect, nullptr);
658 
659     OH_NativeBuffer *nativeBuffer = nativeBufferRgba_.get();
660     ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputNativeBuffer(nullptr, nativeBuffer);
661     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
662 
663     errorCode = OH_ImageEffect_Start(imageEffect);
664     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
665 
666     errorCode = OH_ImageEffect_Release(imageEffect);
667     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
668 }
669 
670 /**
671  * Feature: ImageEffect
672  * Function: Test OH_ImageEffect_SetInputNativeBuffer with empty OH_NativeBuffer
673  * SubFunction: NA
674  * FunctionPoints: NA
675  * EnvConditions: NA
676  * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with empty OH_NativeBuffer
677  */
678 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetInputNativeBufferUnittest004, TestSize.Level1)
679 {
680     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
681     ASSERT_NE(imageEffect, nullptr);
682 
683     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
684     ASSERT_NE(filter, nullptr);
685 
686     ImageEffect_Any value;
687     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
688     value.dataValue.floatValue = 100.f;
689     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
690     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
691 
692     errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nullptr);
693     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
694 
695     errorCode = OH_ImageEffect_Start(imageEffect);
696     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
697 
698     errorCode = OH_ImageEffect_Release(imageEffect);
699     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
700 }
701 
702 /**
703  * Feature: ImageEffect
704  * Function: Test OH_ImageEffect_SetOutputNativeBuffer with normal parameter
705  * SubFunction: NA
706  * FunctionPoints: NA
707  * EnvConditions: NA
708  * CaseDescription: Test OH_ImageEffect_SetOutputNativeBuffer with normal parameter
709  */
710 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputNativeBuffer001, TestSize.Level1)
711 {
712     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
713     ASSERT_NE(imageEffect, nullptr);
714 
715     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
716     ASSERT_NE(filter, nullptr);
717 
718     ImageEffect_Any value;
719     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
720     value.dataValue.floatValue = 100.f;
721     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
722     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
723 
724     OH_NativeBuffer *inNativeBuffer = nativeBufferRgba_.get();
725     errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, inNativeBuffer);
726     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
727 
728     OH_NativeBuffer *outNativeBuffer = nativeBufferRgba_.get();
729     errorCode = OH_ImageEffect_SetOutputNativeBuffer(imageEffect, outNativeBuffer);
730     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
731 
732     errorCode = OH_ImageEffect_Start(imageEffect);
733     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
734 
735     errorCode = OH_ImageEffect_Release(imageEffect);
736     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
737 }
738 
739 /**
740  * Feature: ImageEffect
741  * Function: Test OH_ImageEffect_SetOutputNativeBuffer with all empty parameter
742  * SubFunction: NA
743  * FunctionPoints: NA
744  * EnvConditions: NA
745  * CaseDescription: Test OH_ImageEffect_SetOutputNativeBuffer with all empty parameter
746  */
747 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputNativeBuffer002, TestSize.Level1)
748 {
749     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
750     ASSERT_NE(imageEffect, nullptr);
751 
752     OH_NativeBuffer *inNativeBuffer = nativeBufferRgba_.get();
753     ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, inNativeBuffer);
754     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
755 
756     errorCode = OH_ImageEffect_SetOutputNativeBuffer(nullptr, nullptr);
757     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
758 
759     errorCode = OH_ImageEffect_Start(imageEffect);
760     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
761 
762     errorCode = OH_ImageEffect_Release(imageEffect);
763     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
764 }
765 
766 /**
767  * Feature: ImageEffect
768  * Function: Test OH_ImageEffect_SetOutputNativeBuffer with empty OH_ImageEffect
769  * SubFunction: NA
770  * FunctionPoints: NA
771  * EnvConditions: NA
772  * CaseDescription: Test OH_ImageEffect_SetOutputNativeBuffer with empty OH_ImageEffect
773  */
774 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputNativeBuffer003, TestSize.Level1)
775 {
776     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
777     ASSERT_NE(imageEffect, nullptr);
778 
779     OH_NativeBuffer *inNativeBuffer = nativeBufferRgba_.get();
780     ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, inNativeBuffer);
781     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
782 
783     OH_NativeBuffer *outNativeBuffer = nativeBufferRgba_.get();
784     errorCode = OH_ImageEffect_SetOutputNativeBuffer(nullptr, outNativeBuffer);
785     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
786 
787     errorCode = OH_ImageEffect_Start(imageEffect);
788     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
789 
790     errorCode = OH_ImageEffect_Release(imageEffect);
791     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
792 }
793 
794 /**
795  * Feature: ImageEffect
796  * Function: Test OH_ImageEffect_SetOutputNativeBuffer with empty OH_NativeBuffer
797  * SubFunction: NA
798  * FunctionPoints: NA
799  * EnvConditions: NA
800  * CaseDescription: Test OH_ImageEffect_SetOutputNativeBuffer with empty OH_NativeBuffer
801  */
802 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputNativeBuffer004, TestSize.Level1)
803 {
804     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
805     ASSERT_NE(imageEffect, nullptr);
806 
807     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
808     ASSERT_NE(filter, nullptr);
809 
810     ImageEffect_Any value;
811     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
812     value.dataValue.floatValue = 100.f;
813     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
814     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
815 
816     OH_NativeBuffer *inNativeBuffer = nativeBufferRgba_.get();
817     errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, inNativeBuffer);
818     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
819 
820     errorCode = OH_ImageEffect_SetOutputNativeBuffer(imageEffect, nullptr);
821     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
822 
823     errorCode = OH_ImageEffect_Start(imageEffect);
824     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
825 
826     errorCode = OH_ImageEffect_Release(imageEffect);
827     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
828 }
829 
830 /**
831  * Feature: ImageEffect
832  * Function: Test OH_ImageEffect_SetOutputNativeBuffer with no OH_ImageEffect_SetInputNativeBuffer
833  * SubFunction: NA
834  * FunctionPoints: NA
835  * EnvConditions: NA
836  * CaseDescription: Test OH_ImageEffect_SetOutputNativeBuffer with no OH_ImageEffect_SetInputNativeBuffer
837  */
838 HWTEST_F(NativeImageEffectUnittest, OHImageEffectSetOutputNativeBuffer005, TestSize.Level1)
839 {
840     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
841     ASSERT_NE(imageEffect, nullptr);
842 
843     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
844     ASSERT_NE(filter, nullptr);
845 
846     ImageEffect_Any value;
847     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
848     value.dataValue.floatValue = 100.f;
849     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
850     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
851 
852     OH_NativeBuffer *outNativeBuffer = nativeBufferRgba_.get();
853     errorCode = OH_ImageEffect_SetOutputNativeBuffer(imageEffect, outNativeBuffer);
854     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
855 
856     errorCode = OH_ImageEffect_Start(imageEffect);
857     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); // not set input data
858 
859     errorCode = OH_ImageEffect_Release(imageEffect);
860     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
861 }
862 
863 /**
864  * Feature: ImageEffect
865  * Function: Test OH_EffectFilter_LookupFilters with normal parameter
866  * SubFunction: NA
867  * FunctionPoints: NA
868  * EnvConditions: NA
869  * CaseDescription: Test OH_EffectFilter_LookupFilters with normal parameter
870  */
871 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilterInfo001, TestSize.Level1)
872 {
873     ImageEffect_Format formats[] = { ImageEffect_Format::EFFECT_PIXEL_FORMAT_NV12,
874         ImageEffect_Format::EFFECT_PIXEL_FORMAT_NV21};
875     OH_EffectFilterInfo_SetSupportedFormats(filterInfo_, sizeof(formats) / sizeof(ImageEffect_Format), formats);
876     ImageEffect_FilterDelegate delegate = {
__anon775fb18a0602() 877         .setValue = [](OH_EffectFilter *filter, const char *key, const ImageEffect_Any *value) { return true; },
__anon775fb18a0702() 878         .render = [](OH_EffectFilter *filter, OH_EffectBufferInfo *src, OH_EffectFilterDelegate_PushData pushData) {
879             pushData(filter, src);
880             return true;
881         },
__anon775fb18a0802() 882         .save = [](OH_EffectFilter *filter, char **info) { return true; },
__anon775fb18a0902() 883         .restore = [](const char *info) { return OH_EffectFilter_Create(BRIGHTNESS_EFILTER); }
884     };
885 
886     ImageEffect_ErrorCode errorCode = OH_EffectFilter_Register(filterInfo_, &delegate);
887     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
888 
889     const char *name = BRIGHTNESS_EFILTER;
890     OH_EffectFilterInfo *info = OH_EffectFilterInfo_Create();
891     errorCode = OH_EffectFilter_LookupFilterInfo(name, info);
892     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
893     char *filterName = nullptr;
894     OH_EffectFilterInfo_GetFilterName(info, &filterName);
895     ASSERT_STREQ(filterName, BRIGHTNESS_EFILTER);
896     uint32_t bufferTypeSize = 0;
897     ImageEffect_BufferType *bufferTypeArray = nullptr;
898     OH_EffectFilterInfo_GetSupportedBufferTypes(info, &bufferTypeSize, &bufferTypeArray);
899     ASSERT_EQ(bufferTypeSize, 1);
900     uint32_t formatSize = 0;
901     ImageEffect_Format *formatArray = nullptr;
902     OH_EffectFilterInfo_GetSupportedFormats(info, &formatSize, &formatArray);
903     ASSERT_EQ(formatSize, 2);
904     OH_EffectFilterInfo_Release(info);
905 }
906 
907 /**
908  * Feature: ImageEffect
909  * Function: Test OH_EffectFilter_LookupFilters with not support name
910  * SubFunction: NA
911  * FunctionPoints: NA
912  * EnvConditions: NA
913  * CaseDescription: Test OH_EffectFilter_LookupFilters with not support name
914  */
915 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilterInfo002, TestSize.Level1)
916 {
917     ImageEffect_FilterDelegate delegate = {
__anon775fb18a0a02() 918         .setValue = [](OH_EffectFilter *filter, const char *key, const ImageEffect_Any *value) { return true; },
__anon775fb18a0b02() 919         .render = [](OH_EffectFilter *filter, OH_EffectBufferInfo *src, OH_EffectFilterDelegate_PushData pushData) {
920             pushData(filter, src);
921             return true;
922         },
__anon775fb18a0c02() 923         .save = [](OH_EffectFilter *filter, char **info) { return true; },
__anon775fb18a0d02() 924         .restore = [](const char *info) { return OH_EffectFilter_Create(BRIGHTNESS_EFILTER); }
925     };
926 
927     ImageEffect_ErrorCode errorCode = OH_EffectFilter_Register(filterInfo_, &delegate);
928     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
929 
930     const char *name = "TestEFilter";
931     OH_EffectFilterInfo *info = OH_EffectFilterInfo_Create();
932     errorCode = OH_EffectFilter_LookupFilterInfo(name, info);
933     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
934     OH_EffectFilterInfo_Release(info);
935 }
936 
937 /**
938  * Feature: ImageEffect
939  * Function: Test OH_EffectFilter_LookupFilters with not OH_EFilter_Register
940  * SubFunction: NA
941  * FunctionPoints: NA
942  * EnvConditions: NA
943  * CaseDescription: Test OH_EffectFilter_LookupFilters with not OH_EFilter_Register
944  */
945 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilterInfo003, TestSize.Level1)
946 {
947     const char *name = "TestEFilter";
948     OH_EffectFilterInfo *info = OH_EffectFilterInfo_Create();
949     ImageEffect_ErrorCode errorCode = OH_EffectFilter_LookupFilterInfo(name, info);
950     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
951     OH_EffectFilterInfo_Release(info);
952 }
953 
954 /**
955  * Feature: ImageEffect
956  * Function: Test OH_EffectFilter_LookupFilters with all empty parameter
957  * SubFunction: NA
958  * FunctionPoints: NA
959  * EnvConditions: NA
960  * CaseDescription: Test OH_EffectFilter_LookupFilters with all empty parameter
961  */
962 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilterInfo004, TestSize.Level1)
963 {
964     ImageEffect_ErrorCode errorCode = OH_EffectFilter_LookupFilterInfo(nullptr, nullptr);
965     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
966 }
967 
968 /**
969  * Feature: ImageEffect
970  * Function: Test OH_EffectFilter_LookupFilters with empty name
971  * SubFunction: NA
972  * FunctionPoints: NA
973  * EnvConditions: NA
974  * CaseDescription: Test OH_EffectFilter_LookupFilters with empty name
975  */
976 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilterInfo005, TestSize.Level1)
977 {
978     OH_EffectFilterInfo *info = OH_EffectFilterInfo_Create();
979     ImageEffect_ErrorCode errorCode = OH_EffectFilter_LookupFilterInfo(nullptr, info);
980     ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
981     OH_EffectFilterInfo_Release(info);
982 }
983 
984 /**
985  * Feature: ImageEffect
986  * Function: Test OH_EffectFilter_LookupFilters with normal parameter
987  * SubFunction: NA
988  * FunctionPoints: NA
989  * EnvConditions: NA
990  * CaseDescription: Test OH_EffectFilter_LookupFilters with normal parameter
991  */
992 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilters001, TestSize.Level1)
993 {
994     ImageEffect_FilterNames *filterNames = OH_EffectFilter_LookupFilters("Format:default");
995     const char **nameList = filterNames->nameList;
996     uint32_t size = filterNames->size;
997 
998     ASSERT_NE(filterNames, nullptr);
999     ASSERT_EQ(size, static_cast<uint32_t>(5));
1000 
1001     std::vector<string> filterNamesVector;
1002     for (uint32_t i = 0; i < size; i++) {
1003         filterNamesVector.emplace_back(nameList[i]);
1004     }
1005 
1006     auto brightnessIndex = std::find(filterNamesVector.begin(), filterNamesVector.end(), BRIGHTNESS_EFILTER);
1007     ASSERT_NE(brightnessIndex, filterNamesVector.end());
1008 
1009     auto contrastIndex = std::find(filterNamesVector.begin(), filterNamesVector.end(), CONTRAST_EFILTER);
1010     ASSERT_NE(contrastIndex, filterNamesVector.end());
1011 }
1012 
1013 /**
1014  * Feature: ImageEffect
1015  * Function: Test OH_EffectFilter_LookupFilters with empty parameter
1016  * SubFunction: NA
1017  * FunctionPoints: NA
1018  * EnvConditions: NA
1019  * CaseDescription: Test OH_EffectFilter_LookupFilters with empty parameter
1020  */
1021 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilters002, TestSize.Level1)
1022 {
1023     ImageEffect_FilterNames *filterNames= OH_EffectFilter_LookupFilters(nullptr);
1024     ASSERT_EQ(filterNames, nullptr);
1025 }
1026 
1027 /**
1028  * Feature: ImageEffect
1029  * Function: Test OH_EffectFilter_LookupFilters with not support parameter
1030  * SubFunction: NA
1031  * FunctionPoints: NA
1032  * EnvConditions: NA
1033  * CaseDescription: Test OH_EffectFilter_LookupFilters with not support parameter
1034  */
1035 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilters003, TestSize.Level1)
1036 {
1037     bool result = OH_EffectFilter_LookupFilters("test");
1038     ASSERT_EQ(result, true);
1039 }
1040 
1041 /**
1042  * Feature: ImageEffect
1043  * Function: Test OH_EffectFilter_LookupFilters with not support key parameter
1044  * SubFunction: NA
1045  * FunctionPoints: NA
1046  * EnvConditions: NA
1047  * CaseDescription: Test OH_EffectFilter_LookupFilters with not support key parameter
1048  */
1049 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilters004, TestSize.Level1)
1050 {
1051     bool result = OH_EffectFilter_LookupFilters("test:default");
1052     ASSERT_EQ(result, true);
1053 }
1054 
1055 /**
1056  * Feature: ImageEffect
1057  * Function: Test OH_EffectFilter_LookupFilters with not support value parameter
1058  * SubFunction: NA
1059  * FunctionPoints: NA
1060  * EnvConditions: NA
1061  * CaseDescription: Test OH_EffectFilter_LookupFilters with not support value parameter
1062  */
1063 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilters005, TestSize.Level1)
1064 {
1065     bool result = OH_EffectFilter_LookupFilters("Category:test");
1066     ASSERT_EQ(result, true);
1067 }
1068 
1069 /**
1070  * Feature: ImageEffect
1071  * Function: Test CustomFilterAdjustmentSaveAndRestore with normal process
1072  * SubFunction: NA
1073  * FunctionPoints: NA
1074  * EnvConditions: NA
1075  * CaseDescription: Test CustomFilterAdjustmentSaveAndRestore with normal process
1076  */
1077 HWTEST_F(NativeImageEffectUnittest, CustomFilterAdjustmentSaveAndRestore001, TestSize.Level1)
1078 {
1079     OH_EffectFilterInfo_SetFilterName(filterInfo_, CUSTOM_BRIGHTNESS_EFILTER);
1080 
1081     ImageEffect_ErrorCode errorCode = OH_EffectFilter_Register(filterInfo_, &delegate_);
1082     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1083 
1084     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1085     ASSERT_NE(imageEffect, nullptr);
1086 
1087     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_BRIGHTNESS_EFILTER);
1088     ASSERT_NE(filter, nullptr);
1089 
1090     ImageEffect_Any value;
1091     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1092     value.dataValue.floatValue = 50.f;
1093     errorCode = OH_EffectFilter_SetValue(filter, BRIGHTNESS_EFILTER, &value);
1094     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1095 
1096     char *imageEffectInfo = nullptr;
1097     errorCode = OH_ImageEffect_Save(imageEffect, &imageEffectInfo);
1098     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1099     ASSERT_NE(imageEffectInfo, nullptr);
1100     std::string saveInfo = imageEffectInfo;
1101 
1102     errorCode = OH_ImageEffect_Release(imageEffect);
1103     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1104 
1105     imageEffect = OH_ImageEffect_Restore(saveInfo.c_str());
1106     ASSERT_NE(imageEffect, nullptr);
1107 
1108     errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative_);
1109     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1110 
1111     std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr);
1112     std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_jpgPath);
1113     pixelmapNative->pixelmap_ = std::move(pixelMap);
1114     errorCode = OH_ImageEffect_SetOutputPixelmap(imageEffect, pixelmapNative.get());
1115     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1116 
1117     errorCode = OH_ImageEffect_Start(imageEffect);
1118     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1119 
1120     errorCode = OH_ImageEffect_Release(imageEffect);
1121     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1122 }
1123 
1124 /**
1125  * Feature: ImageEffect
1126  * Function: Test CustomTestFilterSave001 with non-utf-8 abnormal json object
1127  * SubFunction: NA
1128  * FunctionPoints: NA
1129  * EnvConditions: NA
1130  * CaseDescription: Test CustomTestFilterSave001 with non-utf-8 abnormal json object
1131  */
1132 HWTEST_F(NativeImageEffectUnittest, CustomTestFilterSave001, TestSize.Level1)
1133 {
1134     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1135     ASSERT_NE(imageEffect, nullptr);
1136 
1137     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_TEST_EFILTER);
1138     ASSERT_NE(filter, nullptr);
1139 
1140     char value[] = { static_cast<char>(0xb2), static_cast<char>(0xe2), static_cast<char>(0xca),
1141         static_cast<char>(0xd4), '\0' }; // ANSI encode data
1142 
1143     ImageEffect_Any any = {
1144         .dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_PTR,
1145         .dataValue.ptrValue = static_cast<void *>(value),
1146     };
1147     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &any);
1148     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1149 
1150     char *info = nullptr;
1151     errorCode = OH_ImageEffect_Save(imageEffect, &info);
1152     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1153     ASSERT_NE(info, nullptr);
1154 
1155     std::string data = info;
1156     EffectJsonPtr root = EffectJsonHelper::ParseJsonData(data);
1157     ASSERT_NE(root, nullptr);
1158 
1159     EffectJsonPtr imageInfo = root->GetElement("imageEffect");
1160     ASSERT_NE(imageInfo, nullptr);
1161 
1162     std::vector<EffectJsonPtr> filters = imageInfo->GetArray("filters");
1163     ASSERT_EQ(filters.size(), 1);
1164 
1165     EffectJsonPtr values = filters[0]->GetElement("values");
1166     ASSERT_NE(values, nullptr);
1167 
1168     std::string parsedValue = values->GetString(KEY_FILTER_INTENSITY);
1169     ASSERT_STREQ(parsedValue.c_str(), value);
1170 }
1171 
1172 HWTEST_F(NativeImageEffectUnittest, OHImageEffectDataTypeSurface001, TestSize.Level1)
1173 {
1174     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1175     ASSERT_NE(imageEffect, nullptr);
1176 
1177     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
1178     ASSERT_NE(filter, nullptr);
1179 
1180     ImageEffect_Any value;
1181     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1182     value.dataValue.floatValue = 100.f;
1183     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1184     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1185 
1186     errorCode = OH_ImageEffect_SetOutputSurface(imageEffect, g_nativeWindow);
1187     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1188 
1189     NativeWindow *nativeWindow = nullptr;
1190     errorCode = OH_ImageEffect_GetInputSurface(imageEffect, &nativeWindow);
1191     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1192     ASSERT_NE(nativeWindow, nullptr);
1193 
1194     errorCode = OH_ImageEffect_Start(imageEffect);
1195     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1196 
1197     OH_ImageEffect_Release(imageEffect);
1198     OH_NativeWindow_DestroyNativeWindow(nativeWindow);
1199 }
1200 
1201 /**
1202  * Feature: ImageEffect
1203  * Function: Test OH_ImageEffect_SetInputNativeBuffer with brightness yuv nv21
1204  * SubFunction: NA
1205  * FunctionPoints: NA
1206  * EnvConditions: NA
1207  * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with brightness yuv nv21
1208  */
1209 HWTEST_F(NativeImageEffectUnittest, OHImageEffectYuvUnittest001, TestSize.Level1)
1210 {
1211     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1212     ASSERT_NE(imageEffect, nullptr);
1213 
1214     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
1215     ASSERT_NE(filter, nullptr);
1216 
1217     ImageEffect_Any value;
1218     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1219     value.dataValue.floatValue = 50.f;
1220     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1221     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1222 
1223     OH_NativeBuffer *nativeBuffer = nativeBufferNV21_.get();
1224     errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBuffer);
1225     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1226 
1227     std::shared_ptr<OH_NativeBuffer> nativeBufferNV21 =
1228         TestNativeBufferUtils::CreateNativeBuffer(GraphicPixelFormat::GRAPHIC_PIXEL_FMT_YCRCB_420_SP);
1229     errorCode = OH_ImageEffect_SetOutputNativeBuffer(imageEffect, nativeBufferNV21.get());
1230     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1231 
1232     int32_t ipType = 2;
1233     ImageEffect_Any runningType;
1234     runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1235     runningType.dataValue.int32Value = ipType;
1236     errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType);
1237     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1238 
1239     errorCode = OH_ImageEffect_Start(imageEffect);
1240     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1241 
1242     errorCode = OH_ImageEffect_Release(imageEffect);
1243     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1244 }
1245 
1246 /**
1247  * Feature: ImageEffect
1248  * Function: Test OH_ImageEffect_SetInputNativeBuffer with yuv brightness yuv nv12
1249  * SubFunction: NA
1250  * FunctionPoints: NA
1251  * EnvConditions: NA
1252  * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with yuv brightness yuv nv12
1253  */
1254 HWTEST_F(NativeImageEffectUnittest, OHImageEffectYuvUnittest002, TestSize.Level1)
1255 {
1256     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1257     ASSERT_NE(imageEffect, nullptr);
1258 
1259     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
1260     ASSERT_NE(filter, nullptr);
1261 
1262     ImageEffect_Any value;
1263     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1264     value.dataValue.floatValue = 0.f;
1265     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1266     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1267 
1268     OH_EffectFilter *contrastFilter = OH_ImageEffect_AddFilter(imageEffect, CONTRAST_EFILTER);
1269     ASSERT_NE(contrastFilter, nullptr);
1270 
1271     ImageEffect_Any contrastValue;
1272     contrastValue.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1273     contrastValue.dataValue.floatValue = 0.f;
1274     errorCode = OH_EffectFilter_SetValue(contrastFilter, KEY_FILTER_INTENSITY, &contrastValue);
1275     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1276 
1277     OH_NativeBuffer *nativeBuffer = nativeBufferNV12_.get();
1278     errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBuffer);
1279     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1280 
1281     std::shared_ptr<OH_NativeBuffer> nativeBufferNV12 =
1282         TestNativeBufferUtils::CreateNativeBuffer(GraphicPixelFormat::GRAPHIC_PIXEL_FMT_YCBCR_420_SP);
1283     errorCode = OH_ImageEffect_SetOutputNativeBuffer(imageEffect, nativeBufferNV12.get());
1284     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1285 
1286     int32_t ipType = 2;
1287     ImageEffect_Any runningType;
1288     runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1289     runningType.dataValue.int32Value = ipType;
1290     errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType);
1291     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1292 
1293     errorCode = OH_ImageEffect_Start(imageEffect);
1294     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1295 
1296     errorCode = OH_ImageEffect_Release(imageEffect);
1297     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1298 }
1299 
1300 /**
1301  * Feature: ImageEffect
1302  * Function: Test OH_ImageEffect_SetInputNativeBuffer with brightness gpu yuv nv21
1303  * SubFunction: NA
1304  * FunctionPoints: NA
1305  * EnvConditions: NA
1306  * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with brightness gpu yuv nv21
1307  */
1308 HWTEST_F(NativeImageEffectUnittest, OHImageEffectYuvUnittest003, TestSize.Level1)
1309 {
1310     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1311     ASSERT_NE(imageEffect, nullptr);
1312 
1313     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
1314     ASSERT_NE(filter, nullptr);
1315 
1316     ImageEffect_Any value;
1317     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1318     value.dataValue.floatValue = 0.f;
1319     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1320     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1321 
1322     OH_EffectFilter *contrastFilter = OH_ImageEffect_AddFilter(imageEffect, CONTRAST_EFILTER);
1323     ASSERT_NE(contrastFilter, nullptr);
1324 
1325     ImageEffect_Any contrastValue;
1326     contrastValue.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1327     contrastValue.dataValue.floatValue = 0.f;
1328     errorCode = OH_EffectFilter_SetValue(contrastFilter, KEY_FILTER_INTENSITY, &contrastValue);
1329     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1330 
1331     OH_NativeBuffer *nativeBuffer = nativeBufferNV21_.get();
1332     errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBuffer);
1333     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1334 
1335     std::shared_ptr<OH_NativeBuffer> nativeBufferNV21 =
1336         TestNativeBufferUtils::CreateNativeBuffer(GraphicPixelFormat::GRAPHIC_PIXEL_FMT_YCRCB_420_SP);
1337     errorCode = OH_ImageEffect_SetOutputNativeBuffer(imageEffect, nativeBufferNV21.get());
1338     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1339 
1340     int32_t ipType = 1;
1341     ImageEffect_Any runningType;
1342     runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1343     runningType.dataValue.int32Value = ipType;
1344     errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType);
1345     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1346 
1347     errorCode = OH_ImageEffect_Start(imageEffect);
1348     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1349 
1350     errorCode = OH_ImageEffect_Release(imageEffect);
1351     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1352 }
1353 
1354 /**
1355  * Feature: ImageEffect
1356  * Function: Test OH_ImageEffect_SetInputNativeBuffer with contrast gpu yuv nv21
1357  * SubFunction: NA
1358  * FunctionPoints: NA
1359  * EnvConditions: NA
1360  * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with contrast gpu yuv nv21
1361  */
1362 HWTEST_F(NativeImageEffectUnittest, OHImageEffectYuvUnittest004, TestSize.Level1)
1363 {
1364     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1365     ASSERT_NE(imageEffect, nullptr);
1366 
1367     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, CONTRAST_EFILTER);
1368     ASSERT_NE(filter, nullptr);
1369 
1370     ImageEffect_Any value;
1371     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1372     value.dataValue.floatValue = 50.f;
1373     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1374     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1375 
1376     OH_NativeBuffer *nativeBuffer = nativeBufferNV21_.get();
1377     errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBuffer);
1378     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1379 
1380     std::shared_ptr<OH_NativeBuffer> nativeBufferNV21 =
1381         TestNativeBufferUtils::CreateNativeBuffer(GraphicPixelFormat::GRAPHIC_PIXEL_FMT_YCRCB_420_SP);
1382     errorCode = OH_ImageEffect_SetOutputNativeBuffer(imageEffect, nativeBufferNV21.get());
1383     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1384 
1385     int32_t ipType = 1;
1386     ImageEffect_Any runningType;
1387     runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1388     runningType.dataValue.int32Value = ipType;
1389     errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType);
1390     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1391 
1392     errorCode = OH_ImageEffect_Start(imageEffect);
1393     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1394 
1395     errorCode = OH_ImageEffect_Release(imageEffect);
1396     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1397 }
1398 
1399 /**
1400  * Feature: ImageEffect
1401  * Function: Test OH_ImageEffect_Hdr with BRIGHTNESS_EFILTER
1402  * SubFunction: NA
1403  * FunctionPoints: NA
1404  * EnvConditions: NA
1405  * CaseDescription: Test OH_ImageEffect_Hdr with BRIGHTNESS_EFILTER
1406  */
1407 HWTEST_F(NativeImageEffectUnittest, OHImageEffectHdr001, TestSize.Level1)
1408 {
1409     std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr);
1410     std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_jpgHdrPath);
1411     pixelmapNative->pixelmap_ = std::move(pixelMap);
1412 
1413     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1414     ASSERT_NE(imageEffect, nullptr);
1415 
1416     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
1417     ASSERT_NE(filter, nullptr);
1418 
1419     ImageEffect_Any value;
1420     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1421     value.dataValue.floatValue = 100.f;
1422     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1423     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1424 
1425     errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative_);
1426     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1427 
1428     int32_t ipType = 2;
1429     ImageEffect_Any runningType;
1430     runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1431     runningType.dataValue.int32Value = ipType;
1432     errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType);
1433     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1434 
1435     errorCode = OH_ImageEffect_Start(imageEffect);
1436     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1437 
1438     errorCode = OH_ImageEffect_Release(imageEffect);
1439     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1440 }
1441 
1442 /**
1443  * Feature: ImageEffect
1444  * Function: Test OH_ImageEffect_Hdr with CROP_EFILTER
1445  * SubFunction: NA
1446  * FunctionPoints: NA
1447  * EnvConditions: NA
1448  * CaseDescription: Test OH_ImageEffect_Hdr with CROP_EFILTER
1449  */
1450 HWTEST_F(NativeImageEffectUnittest, OHImageEffectHdr002, TestSize.Level1)
1451 {
1452     std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr);
1453     std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_jpgHdrPath);
1454     pixelmapNative->pixelmap_ = std::move(pixelMap);
1455 
1456     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1457     ASSERT_NE(imageEffect, nullptr);
1458 
1459     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, CROP_EFILTER);
1460     ASSERT_NE(filter, nullptr);
1461 
1462     uint32_t x1 = static_cast<uint32_t>(pixelmapNative->pixelmap_->GetWidth() / CROP_FACTOR);
1463     uint32_t y1 = static_cast<uint32_t>(pixelmapNative->pixelmap_->GetHeight() / CROP_FACTOR);
1464     uint32_t areaInfo[] = { 0, 0, x1, y1};
1465     ImageEffect_Any value;
1466     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_PTR;
1467     value.dataValue.ptrValue = static_cast<void *>(areaInfo);
1468     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_REGION, &value);
1469     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1470 
1471     errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative.get());
1472     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1473 
1474     errorCode = OH_ImageEffect_Start(imageEffect);
1475     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1476 
1477     errorCode = OH_ImageEffect_Release(imageEffect);
1478     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1479 }
1480 
1481 /**
1482  * Feature: ImageEffect
1483  * Function: Test OH_ImageEffect_Hdr with SetOutputPixelmap
1484  * SubFunction: NA
1485  * FunctionPoints: NA
1486  * EnvConditions: NA
1487  * CaseDescription: Test OH_ImageEffect_Hdr with SetOutputPixelmap
1488  */
1489 HWTEST_F(NativeImageEffectUnittest, OHImageEffectHdr003, TestSize.Level1)
1490 {
1491     std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr);
1492     std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_jpgHdrPath);
1493     ASSERT_NE(pixelMap, nullptr);
1494     pixelmapNative->pixelmap_ = std::move(pixelMap);
1495 
1496     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1497     ASSERT_NE(imageEffect, nullptr);
1498 
1499     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
1500     ASSERT_NE(filter, nullptr);
1501 
1502     ImageEffect_Any value;
1503     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1504     value.dataValue.floatValue = 100.f;
1505     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1506     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1507 
1508     errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative.get());
1509     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1510 
1511     errorCode = OH_ImageEffect_SetOutputPixelmap(imageEffect, pixelmapNative_);
1512     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1513 
1514     int32_t ipType = 2;
1515     ImageEffect_Any runningType;
1516     runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1517     runningType.dataValue.int32Value = ipType;
1518     errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType);
1519     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1520 
1521     errorCode = OH_ImageEffect_Start(imageEffect);
1522     if (pixelmapNative->pixelmap_->IsHdr()) {
1523         ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1524     } else {
1525         ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1526     }
1527 
1528     errorCode = OH_ImageEffect_Release(imageEffect);
1529     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1530 }
1531 
1532 /**
1533  * Feature: ImageEffect
1534  * Function: Test OH_ImageEffect_Hdr with ConverCPU2GPU and ConverGPU2CPU
1535  * SubFunction: NA
1536  * FunctionPoints: NA
1537  * EnvConditions: NA
1538  * CaseDescription: Test OH_ImageEffect_Hdr with ConverCPU2GPU and ConverGPU2CPU
1539  */
1540 HWTEST_F(NativeImageEffectUnittest, OHImageEffectHdr004, TestSize.Level1)
1541 {
1542     std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr);
1543     std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_jpgHdrPath);
1544     ASSERT_NE(pixelMap, nullptr);
1545     pixelmapNative->pixelmap_ = std::move(pixelMap);
1546 
1547     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1548     ASSERT_NE(imageEffect, nullptr);
1549 
1550     OH_EffectFilter *customfilter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_TEST_EFILTER);
1551     ASSERT_NE(customfilter, nullptr);
1552 
1553     customfilter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_TEST_EFILTER2);
1554     ASSERT_NE(customfilter, nullptr);
1555 
1556     customfilter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_TEST_EFILTER);
1557     ASSERT_NE(customfilter, nullptr);
1558 
1559     ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative.get());
1560     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1561 
1562     int32_t ipType = 1;
1563     ImageEffect_Any runningType;
1564     runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1565     runningType.dataValue.int32Value = ipType;
1566     errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType);
1567     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1568 
1569     errorCode = OH_ImageEffect_Start(imageEffect);
1570     if (pixelmapNative->pixelmap_->IsHdr()) {
1571         ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1572     } else {
1573         ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1574     }
1575 
1576     errorCode = OH_ImageEffect_Stop(imageEffect);
1577     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1578 
1579     errorCode = OH_ImageEffect_Release(imageEffect);
1580     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1581 }
1582 
1583 /**
1584  * Feature: ImageEffect
1585  * Function: Test OH_ImageEffect_Hdr with Adobe
1586  * SubFunction: NA
1587  * FunctionPoints: NA
1588  * EnvConditions: NA
1589  * CaseDescription: Test OH_ImageEffect_Hdr with Adobe
1590  */
1591 HWTEST_F(NativeImageEffectUnittest, OHImageEffectAdobe001, TestSize.Level1)
1592 {
1593     std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr);
1594     std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_adobeHdrPath);
1595     pixelmapNative->pixelmap_ = std::move(pixelMap);
1596 
1597     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1598     ASSERT_NE(imageEffect, nullptr);
1599 
1600     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER);
1601     ASSERT_NE(filter, nullptr);
1602 
1603     ImageEffect_Any value;
1604     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1605     value.dataValue.floatValue = 100.f;
1606     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1607     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1608 
1609     errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative.get());
1610     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1611 
1612     int32_t ipType = 2;
1613     ImageEffect_Any runningType;
1614     runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32;
1615     runningType.dataValue.int32Value = ipType;
1616     errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType);
1617     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1618 
1619     errorCode = OH_ImageEffect_Start(imageEffect);
1620     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1621 
1622     errorCode = OH_ImageEffect_Release(imageEffect);
1623     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1624 }
1625 
1626 /**
1627  * Feature: ImageEffect
1628  * Function: Test OH_ImageEffect with picture
1629  * SubFunction: NA
1630  * FunctionPoints: NA
1631  * EnvConditions: NA
1632  * CaseDescription: Test OH_ImageEffect with picture
1633  */
1634 HWTEST_F(NativeImageEffectUnittest, OHImageEffectPicture001, TestSize.Level1)
1635 {
1636     std::shared_ptr<Picture> picture = std::make_shared<MockPicture>();
1637     std::shared_ptr<OH_PictureNative> pictureNative = std::make_shared<OH_PictureNative>(picture);
1638 
1639     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
1640     ASSERT_NE(imageEffect, nullptr);
1641 
1642     OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER);
1643     ASSERT_NE(filter, nullptr);
1644 
1645     ImageEffect_Any value;
1646     value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT;
1647     value.dataValue.floatValue = 100.f;
1648     ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value);
1649     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1650 
1651     errorCode = OH_ImageEffect_SetInputPicture(imageEffect, pictureNative.get());
1652     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1653 
1654     // start with input
1655     errorCode = OH_ImageEffect_Start(imageEffect);
1656     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1657 
1658     // start with in and out(input equal to output)
1659     errorCode = OH_ImageEffect_SetOutputPicture(imageEffect, pictureNative.get());
1660     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1661     errorCode = OH_ImageEffect_Start(imageEffect);
1662     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1663 
1664     // start with in and out
1665     std::shared_ptr<Picture> outputPicture = std::make_shared<MockPicture>();
1666     std::shared_ptr<OH_PictureNative> outputPictureNative = std::make_shared<OH_PictureNative>(outputPicture);
1667     errorCode = OH_ImageEffect_SetOutputPicture(imageEffect, outputPictureNative.get());
1668     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1669     errorCode = OH_ImageEffect_Start(imageEffect);
1670     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1671 
1672     errorCode = OH_ImageEffect_Release(imageEffect);
1673     ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS);
1674 }
1675 
1676 /**
1677  * Feature: ImageEffect
1678  * Function: Test OH_ImageEffect with picture for abnormal input parameters.
1679  * SubFunction: NA
1680  * FunctionPoints: NA
1681  * EnvConditions: NA
1682  * CaseDescription: Test OH_ImageEffect with picture for abnormal input parameters.
1683  */
1684 HWTEST_F(NativeImageEffectUnittest, OHImageEffectPicture002, TestSize.Level1)
1685 {
1686     OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME);
__anon775fb18a0e02(OH_ImageEffect *imageEffect) 1687     std::shared_ptr<OH_ImageEffect> imageEffectPtr(imageEffect, [](OH_ImageEffect *imageEffect) {
1688         if (imageEffect != nullptr) {
1689             OH_ImageEffect_Release(imageEffect);
1690         }
1691     });
1692     std::shared_ptr<Picture> picture = std::make_shared<MockPicture>();
1693     std::shared_ptr<OH_PictureNative> pictureNative = std::make_shared<OH_PictureNative>(picture);
1694     std::shared_ptr<Picture> defaultPicture;
1695     std::shared_ptr<OH_PictureNative> abnormalPictureNative = std::make_shared<OH_PictureNative>(defaultPicture);
1696 
1697     ASSERT_NE(OH_ImageEffect_SetInputPicture(nullptr, pictureNative.get()), ImageEffect_ErrorCode::EFFECT_SUCCESS);
1698     ASSERT_NE(OH_ImageEffect_SetInputPicture(imageEffectPtr.get(), nullptr), ImageEffect_ErrorCode::EFFECT_SUCCESS);
1699     ASSERT_NE(OH_ImageEffect_SetInputPicture(imageEffectPtr.get(), abnormalPictureNative.get()),
1700         ImageEffect_ErrorCode::EFFECT_SUCCESS);
1701     ASSERT_EQ(OH_ImageEffect_SetInputPicture(imageEffectPtr.get(), pictureNative.get()),
1702         ImageEffect_ErrorCode::EFFECT_SUCCESS);
1703 
1704     ASSERT_NE(OH_ImageEffect_SetOutputPicture(nullptr, pictureNative.get()), ImageEffect_ErrorCode::EFFECT_SUCCESS);
1705     ASSERT_EQ(OH_ImageEffect_SetOutputPicture(imageEffectPtr.get(), nullptr), ImageEffect_ErrorCode::EFFECT_SUCCESS);
1706     ASSERT_EQ(OH_ImageEffect_SetOutputPicture(imageEffectPtr.get(), abnormalPictureNative.get()),
1707         ImageEffect_ErrorCode::EFFECT_SUCCESS);
1708     ASSERT_EQ(OH_ImageEffect_SetOutputPicture(imageEffectPtr.get(), pictureNative.get()),
1709         ImageEffect_ErrorCode::EFFECT_SUCCESS);
1710 }
1711 } // namespace Test
1712 } // namespace Effect
1713 } // namespace Media
1714 } // namespace OHOS
1715