• 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 "image_effect_inner_unittest.h"
17 
18 #include "efilter_factory.h"
19 #include "brightness_efilter.h"
20 #include "contrast_efilter.h"
21 #include "test_common.h"
22 #include "external_loader.h"
23 #include "crop_efilter.h"
24 #include "mock_picture.h"
25 #include "mock_producer_surface.h"
26 #include "external_loader.h"
27 #include "color_space.h"
28 
29 using namespace testing::ext;
30 using ::testing::_;
31 using ::testing::A;
32 using ::testing::InSequence;
33 using ::testing::Mock;
34 using ::testing::Return;
35 using namespace OHOS::Media::Effect::Test;
36 
37 namespace {
38     constexpr uint32_t CROP_FACTOR = 2;
39 }
40 
41 namespace OHOS {
42 namespace Media {
43 namespace Effect {
44 class FakeEFilter : public EFilter {
45 public:
FakeEFilter(const std::string & name)46     explicit FakeEFilter(const std::string &name) : EFilter(name) {}
~FakeEFilter()47     ~FakeEFilter() {}
48 
Render(EffectBuffer * buffer,std::shared_ptr<EffectContext> & context)49     ErrorCode Render(EffectBuffer *buffer, std::shared_ptr<EffectContext> &context) override
50     {
51         return PushData(buffer, context);
52     }
53 
Render(EffectBuffer * src,EffectBuffer * dst,std::shared_ptr<EffectContext> & context)54     ErrorCode Render(EffectBuffer *src, EffectBuffer *dst, std::shared_ptr<EffectContext> &context) override
55     {
56         return ErrorCode::SUCCESS;
57     }
58 
Restore(const EffectJsonPtr & values)59     ErrorCode Restore(const EffectJsonPtr &values) override
60     {
61         return ErrorCode::SUCCESS;
62     }
63 };
64 
65 class FakeImageEffect : public ImageEffect {
66 public:
FakeImageEffect()67     explicit FakeImageEffect() : ImageEffect("ImageEffect") {}
~FakeImageEffect()68     ~FakeImageEffect() {}
69 };
70 
SetUpTestCase()71 void ImageEffectInnerUnittest::SetUpTestCase() {}
72 
TearDownTestCase()73 void ImageEffectInnerUnittest::TearDownTestCase() {}
74 
SetUp()75 void ImageEffectInnerUnittest::SetUp()
76 {
77     ExternLoader::Instance()->InitExt();
78     EFilterFactory::Instance()->functions_.clear();
79     EFilterFactory::Instance()->RegisterEFilter<BrightnessEFilter>(BRIGHTNESS_EFILTER);
80     EFilterFactory::Instance()->RegisterEFilter<ContrastEFilter>(CONTRAST_EFILTER);
81     EFilterFactory::Instance()->RegisterEFilter<CropEFilter>(CROP_EFILTER);
82     EFilterFactory::Instance()->delegates_.clear();
83     mockPixelMap_ = new MockPixelMap();
84     imageEffect_ = new FakeImageEffect();
85     efilter_ = new FakeEFilter(BRIGHTNESS_EFILTER);
86 
87     std::shared_ptr<BufferInfo> info = std::make_unique<BufferInfo>();
88     info->width_ = mockPixelMap_->GetWidth();
89     info->height_ = mockPixelMap_->GetHeight();
90     info->rowStride_ = mockPixelMap_->GetRowStride();
91     info->len_ = mockPixelMap_->GetHeight() * mockPixelMap_->GetRowStride();
92     info->formatType_ = IEffectFormat::RGBA8888;
93     info->pixelMap_ = mockPixelMap_;
94     info->surfaceBuffer_ = nullptr;
95     std::shared_ptr<ExtraInfo> extraInfo = std::make_unique<ExtraInfo>();
96     extraInfo->dataType = DataType::PIXEL_MAP;
97     extraInfo->bufferType = BufferType::HEAP_MEMORY;
98     effectBuffer_ = new EffectBuffer(info, (void *)mockPixelMap_->GetPixels(), extraInfo);
99 }
100 
TearDown()101 void ImageEffectInnerUnittest::TearDown()
102 {
103     delete(mockPixelMap_);
104     mockPixelMap_ = nullptr;
105     Mock::AllowLeak(imageEffect_);
106     Mock::AllowLeak(efilter_);
107     delete(effectBuffer_);
108     effectBuffer_ = nullptr;
109 }
110 
111 HWTEST_F(ImageEffectInnerUnittest, Image_effect_unittest_001, TestSize.Level1)
112 {
113     InSequence s;
114     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
115     imageEffect_->AddEFilter(efilter);
116     Any value = 200.f;
117     efilter->SetValue(KEY_FILTER_INTENSITY, value);
118     ErrorCode result = imageEffect_->SetInputPixelMap(mockPixelMap_);
119     ASSERT_EQ(result, ErrorCode::SUCCESS);
120     result = imageEffect_->Start();
121     ASSERT_EQ(result, ErrorCode::SUCCESS);
122 }
123 
124 HWTEST_F(ImageEffectInnerUnittest, Image_effect_unittest_002, TestSize.Level1)
125 {
126     InSequence s;
127     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
128     Any value = 200.f;
129     efilter->SetValue(KEY_FILTER_INTENSITY, value);
130     std::shared_ptr<EffectBuffer> src = std::make_shared<EffectBuffer>(
131         effectBuffer_->bufferInfo_, effectBuffer_->buffer_, effectBuffer_->extraInfo_);
132 
133     ErrorCode result = efilter->Render(src, src);
134     ASSERT_EQ(result, ErrorCode::SUCCESS);
135 }
136 
137 HWTEST_F(ImageEffectInnerUnittest, Image_effect_unittest_003, TestSize.Level1)
138 {
139     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
140     imageEffect_->AddEFilter(efilter);
141     Any value = 100.f;
142     efilter->SetValue(KEY_FILTER_INTENSITY, value);
143     ErrorCode result = imageEffect_->SetInputPixelMap(mockPixelMap_);
144     ASSERT_EQ(result, ErrorCode::SUCCESS);
145     result = imageEffect_->SetOutputPixelMap(mockPixelMap_);
146     ASSERT_EQ(result, ErrorCode::SUCCESS);
147     result = imageEffect_->Start();
148     ASSERT_EQ(result, ErrorCode::SUCCESS);
149 }
150 
151 HWTEST_F(ImageEffectInnerUnittest, Image_effect_unittest_004, TestSize.Level1)
152 {
153     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(CROP_EFILTER);
154     imageEffect_->AddEFilter(efilter);
155     uint32_t x1 = static_cast<uint32_t>(mockPixelMap_->GetWidth() / CROP_FACTOR);
156     uint32_t y1 = static_cast<uint32_t>(mockPixelMap_->GetHeight() / CROP_FACTOR);
157     uint32_t areaInfo[] = { 0, 0, x1, y1};
158     Any value = static_cast<void *>(areaInfo);
159     efilter->SetValue(KEY_FILTER_REGION, value);
160     ErrorCode result = imageEffect_->SetInputPixelMap(mockPixelMap_);
161     ASSERT_EQ(result, ErrorCode::SUCCESS);
162     result = imageEffect_->SetOutputPixelMap(mockPixelMap_);
163     ASSERT_EQ(result, ErrorCode::SUCCESS);
164     result = imageEffect_->Start();
165     ASSERT_EQ(result, ErrorCode::SUCCESS);
166 }
167 
168 HWTEST_F(ImageEffectInnerUnittest, Image_effect_unittest_005, TestSize.Level1)
169 {
170     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(CROP_EFILTER);
171     imageEffect_->AddEFilter(efilter);
172     uint32_t x1 = static_cast<uint32_t>(mockPixelMap_->GetWidth() / CROP_FACTOR);
173     uint32_t y1 = static_cast<uint32_t>(mockPixelMap_->GetHeight() / CROP_FACTOR);
174     uint32_t areaInfo[] = { 0, 0, x1, y1};
175     Any value = static_cast<void *>(areaInfo);
176     efilter->SetValue(KEY_FILTER_REGION, value);
177     ErrorCode result = imageEffect_->SetInputPixelMap(mockPixelMap_);
178     ASSERT_EQ(result, ErrorCode::SUCCESS);
179     result = imageEffect_->Start();
180     ASSERT_EQ(result, ErrorCode::SUCCESS);
181 }
182 
183 HWTEST_F(ImageEffectInnerUnittest, Image_effect_unittest_006, TestSize.Level1)
184 {
185     DataInfo dataInfo;
186     std::shared_ptr<BufferInfo> bufferInfo = std::make_unique<BufferInfo>();
187     std::shared_ptr<ExtraInfo> extraInfo = std::make_unique<ExtraInfo>();
188     std::shared_ptr<EffectBuffer> effectBuffer = std::make_unique<EffectBuffer>(bufferInfo, nullptr, extraInfo);
189     std::shared_ptr<ImageEffect> imageEffect = std::make_unique<ImageEffect>();
190 
191     dataInfo.dataType_ = DataType::PATH;
192     dataInfo.path_ = "path";
193     IEffectFormat format = IEffectFormat::RGBA8888;
194     EXPECT_EQ(imageEffect->ParseDataInfo(dataInfo, effectBuffer, true, format), ErrorCode::SUCCESS);
195 
196     dataInfo.dataType_ = DataType::NATIVE_WINDOW;
197     EXPECT_EQ(imageEffect->ParseDataInfo(dataInfo, effectBuffer, false, format), ErrorCode::SUCCESS);
198 
199     dataInfo.dataType_ = DataType::UNKNOWN;
200     EXPECT_EQ(imageEffect->ParseDataInfo(dataInfo, effectBuffer, false, format), ErrorCode::ERR_NO_DATA);
201 
202     dataInfo.dataType_ = static_cast<DataType>(100);
203     EXPECT_EQ(imageEffect->ParseDataInfo(dataInfo, effectBuffer, false, format), ErrorCode::ERR_UNSUPPORTED_DATA_TYPE);
204 }
205 
206 HWTEST_F(ImageEffectInnerUnittest, SetOutputPicture_001, TestSize.Level1)
207 {
208     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
209     ErrorCode result = imageEffect_->SetOutputPicture(nullptr);
210     ASSERT_EQ(result, ErrorCode::SUCCESS);
211 }
212 
213 HWTEST_F(ImageEffectInnerUnittest, SetOutputPicture_002, TestSize.Level1)
214 {
215     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
216     std::shared_ptr<Picture> picture = std::make_shared<MockPicture>();
217     ErrorCode result = imageEffect_->SetOutputPicture(picture.get());
218     ASSERT_EQ(result, ErrorCode::SUCCESS);
219 }
220 
221 HWTEST_F(ImageEffectInnerUnittest, SetInputPicture_001, TestSize.Level1)
222 {
223     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
224     ErrorCode result = imageEffect_->SetInputPicture(nullptr);
225     ASSERT_NE(result, ErrorCode::SUCCESS);
226 }
227 
228 HWTEST_F(ImageEffectInnerUnittest, SetInputPicture_002, TestSize.Level1)
229 {
230     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
231     std::shared_ptr<Picture> picture = std::make_shared<MockPicture>();
232     ErrorCode result = imageEffect_->SetInputPicture(picture.get());
233     ASSERT_EQ(result, ErrorCode::SUCCESS);
234 }
235 
236 HWTEST_F(ImageEffectInnerUnittest, SetExtraInfo_001, TestSize.Level1)
237 {
238     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
239     ErrorCode result = imageEffect_->SetExtraInfo(nullptr);
240     ASSERT_EQ(result, ErrorCode::SUCCESS);
241 }
242 
243 HWTEST_F(ImageEffectInnerUnittest, SetOutputSurfaceBuffer_001, TestSize.Level1)
244 {
245     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
246     ErrorCode result = imageEffect_->SetOutputSurfaceBuffer(nullptr);
247     ASSERT_EQ(result, ErrorCode::SUCCESS);
248 }
249 
250 HWTEST_F(ImageEffectInnerUnittest, SetOutputSurfaceBuffer_002, TestSize.Level1)
251 {
252     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
253     sptr<SurfaceBuffer> surfaceBuffer;
254     MockProducerSurface::AllocDmaMemory(surfaceBuffer);
255     ErrorCode result = imageEffect_->SetOutputSurfaceBuffer(surfaceBuffer);
256     ASSERT_EQ(result, ErrorCode::SUCCESS);
257     MockProducerSurface::ReleaseDmaBuffer(surfaceBuffer);
258 }
259 
260 HWTEST_F(ImageEffectInnerUnittest, SetInputSurfaceBuffer_001, TestSize.Level1)
261 {
262     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
263     ErrorCode result = imageEffect_->SetInputSurfaceBuffer(nullptr);
264     ASSERT_NE(result, ErrorCode::SUCCESS);
265 }
266 
267 HWTEST_F(ImageEffectInnerUnittest, SetInputSurfaceBuffer_002, TestSize.Level1)
268 {
269     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
270     sptr<SurfaceBuffer> surfaceBuffer;
271     MockProducerSurface::AllocDmaMemory(surfaceBuffer);
272     ErrorCode result = imageEffect_->SetInputSurfaceBuffer(surfaceBuffer);
273     EXPECT_EQ(result, ErrorCode::SUCCESS);
274 
275     imageEffect_->needPreFlush_ = true;
276     result = imageEffect_->SetInputSurfaceBuffer(surfaceBuffer);
277     EXPECT_EQ(result, ErrorCode::SUCCESS);
278     MockProducerSurface::ReleaseDmaBuffer(surfaceBuffer);
279 }
280 
281 HWTEST_F(ImageEffectInnerUnittest, SetOutputSurface_001, TestSize.Level1)
282 {
283     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
284     sptr<Surface> surface = nullptr;
285     ErrorCode result = imageEffect_->SetOutputSurface(surface);
286     ASSERT_NE(result, ErrorCode::SUCCESS);
287 }
288 
289 HWTEST_F(ImageEffectInnerUnittest, SetOutputPixelMap_001, TestSize.Level1)
290 {
291     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
292     ErrorCode result = imageEffect_->SetOutputPixelMap(nullptr);
293     ASSERT_EQ(result, ErrorCode::SUCCESS);
294 }
295 
296 HWTEST_F(ImageEffectInnerUnittest, SetInputPixelMap_001, TestSize.Level1)
297 {
298     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
299     ErrorCode result = imageEffect_->SetInputPixelMap(nullptr);
300     ASSERT_NE(result, ErrorCode::SUCCESS);
301 }
302 
303 HWTEST_F(ImageEffectInnerUnittest, SetOutNativeWindow_001, TestSize.Level1)
304 {
305     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
306     ErrorCode result = imageEffect_->SetOutNativeWindow(nullptr);
307     ASSERT_NE(result, ErrorCode::SUCCESS);
308 }
309 
310 HWTEST_F(ImageEffectInnerUnittest, SetOutNativeWindow_002, TestSize.Level1)
311 {
312     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
313     OHNativeWindow *nativeWindow = new OHNativeWindow();
314     nativeWindow->surface = nullptr;
315     ErrorCode result = imageEffect_->SetOutNativeWindow(nativeWindow);
316     ASSERT_NE(result, ErrorCode::SUCCESS);
317     delete nativeWindow;
318     nativeWindow = nullptr;
319 }
320 
321 HWTEST_F(ImageEffectInnerUnittest, SetInputTexture_001, TestSize.Level1)
322 {
323     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
324     ErrorCode result = imageEffect_->SetInputTexture(0, 0);
325     ASSERT_NE(result, ErrorCode::SUCCESS);
326 }
327 
328 HWTEST_F(ImageEffectInnerUnittest, SetInputTexture_002, TestSize.Level1)
329 {
330     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
331     ErrorCode result = imageEffect_->SetInputTexture(2, 0);
332     ASSERT_EQ(result, ErrorCode::SUCCESS);
333 }
334 
335 HWTEST_F(ImageEffectInnerUnittest, SetOutputTexture_001, TestSize.Level1)
336 {
337     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
338     ErrorCode result = imageEffect_->SetOutputTexture(0);
339     ASSERT_NE(result, ErrorCode::SUCCESS);
340 }
341 
342 HWTEST_F(ImageEffectInnerUnittest, SetOutputTexture_002, TestSize.Level1)
343 {
344     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
345     ErrorCode result = imageEffect_->SetOutputTexture(2);
346     ASSERT_EQ(result, ErrorCode::SUCCESS);
347 }
348 
349 HWTEST_F(ImageEffectInnerUnittest, RenderTexture_001, TestSize.Level1)
350 {
351     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
352     std::shared_ptr<RenderEnvironment> env = std::make_shared<RenderEnvironment>();
353     env->Init();
354     RenderTexturePtr inTex = env->RequestBuffer(1080, 1920);
355     RenderTexturePtr outTex = env->RequestBuffer(1080, 1920);
356     ErrorCode result = imageEffect_->SetInputTexture(inTex->GetName(), ColorManager::ColorSpaceName::SRGB);
357     ASSERT_EQ(result, ErrorCode::SUCCESS);
358     result = imageEffect_->SetOutputTexture(outTex->GetName());
359     ASSERT_EQ(result, ErrorCode::SUCCESS);
360     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
361     Any value = 70.f;
362     efilter->SetValue(KEY_FILTER_INTENSITY, value);
363     imageEffect_->AddEFilter(efilter);
364     result = imageEffect_->Start();
365     ASSERT_EQ(result, ErrorCode::SUCCESS);
366 }
367 
368 HWTEST_F(ImageEffectInnerUnittest, ReplaceEFilter_001, TestSize.Level1)
369 {
370     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
371     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
372     imageEffect_->AddEFilter(efilter);
373     std::shared_ptr<EFilter> efilter2 = EFilterFactory::Instance()->Create(CONTRAST_EFILTER);
374 
375     ErrorCode result = imageEffect_->ReplaceEFilter(efilter2, -1);
376     ASSERT_NE(result, ErrorCode::SUCCESS);
377 
378     result = imageEffect_->ReplaceEFilter(efilter2, 0);
379     ASSERT_EQ(result, ErrorCode::SUCCESS);
380 }
381 
382 HWTEST_F(ImageEffectInnerUnittest, SetInputUri_001, TestSize.Level1)
383 {
384     std::string g_jpgUri = std::string("file:///data/test/resource/image_effect_1k_test1.jpg");
385     std::string g_notJpgUri = std::string("file:///data/test/resource/image_effect_1k_test1.png");
386     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
387 
388     ErrorCode result = imageEffect_->SetInputUri(g_notJpgUri);
389     EXPECT_NE(result, ErrorCode::SUCCESS);
390 
391     result = imageEffect_->SetInputUri(g_jpgUri);
392     EXPECT_EQ(result, ErrorCode::SUCCESS);
393 }
394 
395 HWTEST_F(ImageEffectInnerUnittest, SetOutputUri_001, TestSize.Level1)
396 {
397     std::string g_jpgUri = std::string("file:///data/test/resource/image_effect_1k_test1.jpg");
398     std::string g_notJpgUri = std::string("file:///data/test/resource/image_effect_1k_test1.png");
399     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
400 
401     ErrorCode result = imageEffect_->SetOutputUri("");
402     EXPECT_EQ(result, ErrorCode::SUCCESS);
403 
404     result = imageEffect_->SetOutputUri(g_notJpgUri);
405     EXPECT_NE(result, ErrorCode::SUCCESS);
406 
407     result = imageEffect_->SetOutputUri(g_jpgUri);
408     EXPECT_EQ(result, ErrorCode::SUCCESS);
409 }
410 
411 HWTEST_F(ImageEffectInnerUnittest, SetInputPath_001, TestSize.Level1)
412 {
413     std::string g_jpgPath = std::string("/data/test/resource/image_effect_1k_test1.jpg");
414     std::string g_notJpgPath = std::string("/data/test/resource/image_effect_1k_test1.png");
415     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
416 
417     ErrorCode result = imageEffect_->SetInputPath(g_notJpgPath);
418     EXPECT_NE(result, ErrorCode::SUCCESS);
419 
420     result = imageEffect_->SetInputPath(g_jpgPath);
421     EXPECT_EQ(result, ErrorCode::SUCCESS);
422 }
423 
424 HWTEST_F(ImageEffectInnerUnittest, SetOutputPath_001, TestSize.Level1)
425 {
426     std::string g_jpgPath = std::string("/data/test/resource/image_effect_1k_test1.jpg");
427     std::string g_notJpgPath = std::string("/data/test/resource/image_effect_1k_test1.png");
428     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
429 
430     ErrorCode result = imageEffect_->SetOutputPath("");
431     EXPECT_EQ(result, ErrorCode::SUCCESS);
432 
433     result = imageEffect_->SetOutputPath(g_notJpgPath);
434     EXPECT_NE(result, ErrorCode::SUCCESS);
435 
436     result = imageEffect_->SetOutputPath(g_jpgPath);
437     EXPECT_EQ(result, ErrorCode::SUCCESS);
438 }
439 
440 HWTEST_F(ImageEffectInnerUnittest, Save_001, TestSize.Level1)
441 {
442     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
443     EffectJsonPtr jsonValues = EffectJsonHelper::CreateObject();
444     ErrorCode result = imageEffect_->Save(jsonValues);
445     EXPECT_EQ(result, ErrorCode::SUCCESS);
446 
447     EffectJsonPtr extra = EffectJsonHelper::CreateObject();
448     imageEffect_->SetExtraInfo(extra);
449     result = imageEffect_->Save(jsonValues);
450     EXPECT_EQ(result, ErrorCode::SUCCESS);
451 }
452 
453 HWTEST_F(ImageEffectInnerUnittest, CacheBuffer_001, TestSize.Level1)
454 {
455     std::shared_ptr<EffectContext> effectContext = std::make_shared<EffectContext>();
456     std::shared_ptr<EffectBuffer> buffer = std::make_shared<EffectBuffer>(
457         effectBuffer_->bufferInfo_, effectBuffer_->buffer_, effectBuffer_->extraInfo_);
458     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
459 
460     ErrorCode result = efilter->StartCache();
461     EXPECT_EQ(result, ErrorCode::SUCCESS);
462 
463     result = efilter->CacheBuffer(buffer.get(), effectContext);
464     EXPECT_EQ(result, ErrorCode::SUCCESS);
465 
466     result = efilter->GetFilterCache(buffer, effectContext);
467     EXPECT_EQ(result, ErrorCode::SUCCESS);
468 
469     result = efilter->CancelCache();
470     EXPECT_EQ(result, ErrorCode::SUCCESS);
471 
472     result = efilter->ReleaseCache();
473     EXPECT_EQ(result, ErrorCode::SUCCESS);
474 }
475 
476 HWTEST_F(ImageEffectInnerUnittest, GetImageInfo_001, TestSize.Level1)
477 {
478     std::shared_ptr<ImageEffect> imageEffect_ = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
479     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
480     imageEffect_->AddEFilter(efilter);
481 
482     imageEffect_->inDateInfo_.dataType_ = DataType::UNKNOWN;
483     ErrorCode result = imageEffect_->Render();
484 
485     imageEffect_->inDateInfo_.dataType_ = DataType::TEX;
486     result = imageEffect_->Render();
487 
488     imageEffect_->inDateInfo_.dataType_ = DataType::NATIVE_WINDOW;
489     result = imageEffect_->Render();
490     EXPECT_NE(result, ErrorCode::SUCCESS);
491 }
492 
493 HWTEST_F(ImageEffectInnerUnittest, GetExifMetadata_001, TestSize.Level1)
494 {
495     std::shared_ptr<EffectContext> context = std::make_shared<EffectContext>();
496     context->renderStrategy_ = std::make_shared<RenderStrategy>();
497     std::shared_ptr<EffectBuffer> src = std::make_shared<EffectBuffer>(
498         effectBuffer_->bufferInfo_, effectBuffer_->buffer_, effectBuffer_->extraInfo_);
499     std::shared_ptr<EffectBuffer> dst = std::make_shared<EffectBuffer>(
500         effectBuffer_->bufferInfo_, effectBuffer_->buffer_, effectBuffer_->extraInfo_);
501     context->renderStrategy_->src_ = src;
502     context->renderStrategy_->dst_ = dst;
503     std::shared_ptr<ExifMetadata> data = context->GetExifMetadata();
504 
505     context->renderStrategy_->src_->extraInfo_->dataType = DataType::PICTURE;
506     data = context->GetExifMetadata();
507     EXPECT_EQ(data, nullptr);
508 }
509 
510 HWTEST_F(ImageEffectInnerUnittest, ExternLoader_001, TestSize.Level1)
511 {
512     ExternLoader *instance = ExternLoader::Instance();
513     instance->isExtLoad_ = true;
514     instance->LoadExtSo();
515     EXPECT_NE(instance, nullptr);
516 }
517 
518 HWTEST_F(ImageEffectInnerUnittest, EFilter_001, TestSize.Level1)
519 {
520     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
521     ErrorCode res = efilter->ProcessConfig("START_CACHE");
522     EXPECT_EQ(res, ErrorCode::SUCCESS);
523 
524     res = efilter->ProcessConfig("CANCEL_CACHE");
525     EXPECT_EQ(res, ErrorCode::SUCCESS);
526 
527     std::shared_ptr<EffectContext> context = std::make_shared<EffectContext>();
528     std::shared_ptr<EffectBuffer> src = std::make_shared<EffectBuffer>(
529         effectBuffer_->bufferInfo_, effectBuffer_->buffer_, effectBuffer_->extraInfo_);
530     efilter->cacheConfig_ = std::make_shared<EFilterCacheConfig>();
531     efilter->cacheConfig_->status_ = CacheStatus::CACHE_START;
532     context->cacheNegotiate_ = std::make_shared<EFilterCacheNegotiate>();
533     context->cacheNegotiate_->config_ = nullptr;
534 
535     context->cacheNegotiate_->config_ = std::make_shared<EFilterCacheConfig>();
536 
537     efilter->cacheConfig_->status_ = CacheStatus::NO_CACHE;
538 
539     context->cacheNegotiate_->needCache_ = true;
540     context->cacheNegotiate_->hasUsedCache_ = false;
541     efilter->cacheConfig_->status_ = CacheStatus::CACHE_USED;
542     res = efilter->PushData("test", src, context);
543     EXPECT_NE(res, ErrorCode::SUCCESS);
544 
545     context->cacheNegotiate_->needCache_ = true;
546     context->cacheNegotiate_->hasUsedCache_ = false;
547     efilter->cacheConfig_->status_ = CacheStatus::NO_CACHE;
548     src = nullptr;
549     res = efilter->PushData("test", src, context);
550     EXPECT_NE(res, ErrorCode::SUCCESS);
551 
552     context->cacheNegotiate_->needCache_ = true;
553     context->cacheNegotiate_->hasUsedCache_ = false;
554     efilter->cacheConfig_->status_ = CacheStatus::CACHE_ENABLED;
555     res = efilter->PushData("test", src, context);
556     EXPECT_NE(res, ErrorCode::SUCCESS);
557 
558     context->cacheNegotiate_->needCache_ = true;
559     context->cacheNegotiate_->hasUsedCache_ = false;
560     efilter->cacheConfig_->status_ = CacheStatus::CACHE_START;
561     src = std::make_shared<EffectBuffer>(
562         effectBuffer_->bufferInfo_, effectBuffer_->buffer_, effectBuffer_->extraInfo_);
563     res = efilter->PushData("test", src, context);
564     EXPECT_NE(res, ErrorCode::SUCCESS);
565 }
566 
567 HWTEST_F(ImageEffectInnerUnittest, PushData_001, TestSize.Level1)
568 {
569     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
570     std::shared_ptr<EffectContext> context = std::make_shared<EffectContext>();
571     std::shared_ptr<EffectBuffer> src = std::make_shared<EffectBuffer>(
572         effectBuffer_->bufferInfo_, effectBuffer_->buffer_, effectBuffer_->extraInfo_);
573     efilter->cacheConfig_ = std::make_shared<EFilterCacheConfig>();
574     context->cacheNegotiate_ = std::make_shared<EFilterCacheNegotiate>();
575 
576     context->cacheNegotiate_->needCache_ = false;
577     ErrorCode res = efilter->PushData("test", src, context);
578     EXPECT_NE(res, ErrorCode::SUCCESS);
579 
580     context->cacheNegotiate_->needCache_ = true;
581     context->cacheNegotiate_->config_ = nullptr;
582     res = efilter->PushData("test", src, context);
583     EXPECT_NE(res, ErrorCode::SUCCESS);
584 
585     context->cacheNegotiate_->needCache_ = true;
586     context->cacheNegotiate_->config_ = std::make_shared<EFilterCacheConfig>();
587     context->cacheNegotiate_->hasUsedCache_ = true;
588     res = efilter->PushData("test", src, context);
589     EXPECT_NE(res, ErrorCode::SUCCESS);
590 }
591 } // namespace Effect
592 } // namespace Media
593 } // namespace OHOS
594