• 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 "gtest/gtest.h"
17 
18 #include "image_effect_inner.h"
19 #include "efilter_factory.h"
20 #include "mock_pixel_map.h"
21 #include "brightness_efilter.h"
22 #include "contrast_efilter.h"
23 #include "test_common.h"
24 #include "external_loader.h"
25 #include "crop_efilter.h"
26 #include "mock_producer_surface.h"
27 
28 #include "surface_buffer_impl.h"
29 #include <sync_fence.h>
30 #include "metadata_helper.h"
31 #include "effect_surface_adapter.h"
32 #include "v1_1/buffer_handle_meta_key_type.h"
33 
34 using namespace testing::ext;
35 using namespace OHOS::Media::Effect;
36 
37 static std::string g_jpgPath;
38 static std::string g_notJpgPath;
39 static std::string g_jpgUri;
40 static std::string g_notJpgUri;
41 
42 namespace OHOS {
43 namespace Media {
44 namespace Effect {
45 using namespace OHOS::HDI::Display::Graphic::Common;
46 namespace Test {
47 class CustomTestEFilter : public IFilterDelegate {
48 public:
Render(void * efilter,EffectBuffer * src,EffectBuffer * dst,std::shared_ptr<EffectContext> & context)49     bool Render(void *efilter, EffectBuffer *src, EffectBuffer *dst, std::shared_ptr<EffectContext> &context) override
50     {
51         return true;
52     }
53 
Render(void * efilter,EffectBuffer * src,std::shared_ptr<EffectContext> & context)54     bool Render(void *efilter, EffectBuffer *src, std::shared_ptr<EffectContext> &context) override
55     {
56         return true;
57     }
58 
SetValue(void * efilter,const std::string & key,const Plugin::Any & value)59     bool SetValue(void *efilter, const std::string &key, const Plugin::Any &value) override
60     {
61         return true;
62     }
63 
Save(void * efilter,EffectJsonPtr & res)64     bool Save(void *efilter, EffectJsonPtr &res) override
65     {
66         auto *filter = static_cast<EFilter *>(efilter);
67         return filter != nullptr && filter->Save(res) == ErrorCode::SUCCESS;
68     }
69 
Restore(const EffectJsonPtr & values)70     void *Restore(const EffectJsonPtr &values) override
71     {
72         filter_ = EFilterFactory::Instance()->Create(CUSTOM_TEST_EFILTER);
73         Plugin::Any brightness = values->GetFloat("brightness");
74         filter_->SetValue("brightness", brightness);
75         return filter_.get();
76     }
77 
GetEffectInfo()78     void *GetEffectInfo() override
79     {
80         if (info_ != nullptr) {
81             return &info_;
82         }
83         info_ = std::make_unique<EffectInfo>();
84         info_->formats_.emplace(IEffectFormat::RGBA8888, std::vector<IPType>{ IPType::CPU });
85         info_->category_ = Category::SHAPE_ADJUST;
86         return &info_;
87     }
88 private:
89     static std::shared_ptr<EffectInfo> info_;
90     std::shared_ptr<EFilter> filter_;
91 };
92 std::shared_ptr<EffectInfo> CustomTestEFilter::info_ = nullptr;
93 
94 class TestImageEffect : public testing::Test {
95 public:
96     TestImageEffect() = default;
97 
98     ~TestImageEffect() override = default;
99 
SetUpTestCase()100     static void SetUpTestCase()
101     {
102         g_jpgPath = std::string("/data/test/resource/image_effect_test1.jpg");
103         g_notJpgPath = std::string("/data/test/resource/image_effect_test2.png");
104         g_jpgUri = std::string("file:///data/test/resource/image_effect_test1.jpg");
105         g_notJpgUri = std::string("file:///data/test/resource/image_effect_test2.png");
106     }
107 
TearDownTestCase()108     static void TearDownTestCase() {}
109 
SetUp()110     void SetUp() override
111     {
112         mockPixelMap_ = new MockPixelMap();
113         imageEffect_ = new ImageEffect();
114         effectSurfaceAdapter_ = new EffectSurfaceAdapter();
115         ExternLoader::Instance()->InitExt();
116         EFilterFactory::Instance()->functions_.clear();
117         EFilterFactory::Instance()->RegisterEFilter<BrightnessEFilter>(BRIGHTNESS_EFILTER);
118         EFilterFactory::Instance()->RegisterEFilter<ContrastEFilter>(CONTRAST_EFILTER);
119         EFilterFactory::Instance()->RegisterEFilter<CropEFilter>(CROP_EFILTER);
120     }
121 
TearDown()122     void TearDown() override
123     {
124         delete mockPixelMap_;
125         mockPixelMap_ = nullptr;
126         delete imageEffect_;
127         imageEffect_ = nullptr;
128         delete effectSurfaceAdapter_;
129         effectSurfaceAdapter_ = nullptr;
130     }
131     PixelMap *mockPixelMap_ = nullptr;
132     ImageEffect *imageEffect_ = nullptr;
133     EffectSurfaceAdapter *effectSurfaceAdapter_ = nullptr;
134 };
135 
136 HWTEST_F(TestImageEffect, AddEfilter001, TestSize.Level1)
137 {
138     std::shared_ptr<ImageEffect> imageEffect = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
139     std::shared_ptr<EFilter> brightnessEFilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
140     imageEffect->AddEFilter(brightnessEFilter);
141     ASSERT_EQ(imageEffect->efilters_.size(), 1);
142     ASSERT_EQ(imageEffect->efilters_.at(0), brightnessEFilter);
143 
144     std::shared_ptr<EFilter> cropEFilter1 = EFilterFactory::Instance()->Create(CROP_EFILTER);
145     imageEffect->AddEFilter(cropEFilter1);
146     ASSERT_EQ(imageEffect->efilters_.size(), 2);
147     ASSERT_EQ(imageEffect->efilters_.at(0), cropEFilter1);
148     ASSERT_EQ(imageEffect->efilters_.at(1), brightnessEFilter);
149 
150     std::shared_ptr<EFilter> cropEFilter2 = EFilterFactory::Instance()->Create(CROP_EFILTER);
151     imageEffect->AddEFilter(cropEFilter2);
152     ASSERT_EQ(imageEffect->efilters_.size(), 3);
153     ASSERT_EQ(imageEffect->efilters_.at(0), cropEFilter1);
154     ASSERT_EQ(imageEffect->efilters_.at(1), cropEFilter2);
155     ASSERT_EQ(imageEffect->efilters_.at(2), brightnessEFilter);
156 }
157 
158 HWTEST_F(TestImageEffect, Start001, TestSize.Level1)
159 {
160     std::shared_ptr<ImageEffect> imageEffect = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
161     std::shared_ptr<EFilter> efilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
162     Plugin::Any value = 100.f;
163     ErrorCode result = efilter->SetValue(KEY_FILTER_INTENSITY, value);
164     ASSERT_EQ(result, ErrorCode::SUCCESS);
165     imageEffect->AddEFilter(efilter);
166     result = imageEffect->SetInputPixelMap(mockPixelMap_);
167     ASSERT_EQ(result, ErrorCode::SUCCESS);
168     result = imageEffect->SetOutputPixelMap(mockPixelMap_);
169     ASSERT_EQ(result, ErrorCode::SUCCESS);
170     result = imageEffect->Start();
171     ASSERT_EQ(result, ErrorCode::SUCCESS);
172 }
173 
174 HWTEST_F(TestImageEffect, InsertEfilter001, TestSize.Level1)
175 {
176     std::shared_ptr<ImageEffect> imageEffect = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
177     std::shared_ptr<EFilter> brightnessEFilter1 = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
178     imageEffect->InsertEFilter(brightnessEFilter1, 0);
179     ASSERT_EQ(imageEffect->efilters_.size(), 1);
180     ASSERT_EQ(imageEffect->efilters_.at(0), brightnessEFilter1);
181 
182     std::shared_ptr<EFilter> contrastEFilter = EFilterFactory::Instance()->Create(CONTRAST_EFILTER);
183     imageEffect->AddEFilter(contrastEFilter);
184     ASSERT_EQ(imageEffect->efilters_.size(), 2);
185     ASSERT_EQ(imageEffect->efilters_.at(0), brightnessEFilter1);
186     ASSERT_EQ(imageEffect->efilters_.at(1), contrastEFilter);
187 
188     std::shared_ptr<EFilter> brightnessEFilter2 = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
189     imageEffect->InsertEFilter(brightnessEFilter2, 1);
190     ASSERT_EQ(imageEffect->efilters_.size(), 3);
191     ASSERT_EQ(imageEffect->efilters_.at(0), brightnessEFilter1);
192     ASSERT_EQ(imageEffect->efilters_.at(1), brightnessEFilter2);
193     ASSERT_EQ(imageEffect->efilters_.at(2), contrastEFilter);
194 }
195 
196 HWTEST_F(TestImageEffect, InsertEfilter002, TestSize.Level1)
197 {
198     std::shared_ptr<ImageEffect> imageEffect = std::make_unique<ImageEffect>(IMAGE_EFFECT_NAME);
199     std::shared_ptr<EFilter> brightnessEFilter1 = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER);
200     ErrorCode result = imageEffect->InsertEFilter(brightnessEFilter1, 1);
201     ASSERT_NE(result, ErrorCode::SUCCESS);
202 }
203 
204 /**
205  * Feature: ImageEffect
206  * Function: Test ImageEffect::SetInputPath with normal param
207  * SubFunction: NA
208  * FunctionPoints: NA
209  * EnvConditions: NA
210  * CaseDescription: Test ImageEffect::SetInputPath with normal param
211  */
212 HWTEST_F(TestImageEffect, SetInputPath001, TestSize.Level1)
213 {
214     ErrorCode result = imageEffect_->SetInputPath(g_jpgPath);
215     ASSERT_EQ(result, ErrorCode::SUCCESS);
216 }
217 
218 /**
219  * Feature: ImageEffect
220  * Function: Test ImageEffect::SetInputPath with nullptr param
221  * SubFunction: NA
222  * FunctionPoints: NA
223  * EnvConditions: NA
224  * CaseDescription: Test ImageEffect::SetInputPath with nullptr param
225  */
226 HWTEST_F(TestImageEffect, SetInputPath002, TestSize.Level1)
227 {
228     ErrorCode result = imageEffect_->SetInputPath(nullptr);
229     ASSERT_NE(result, ErrorCode::SUCCESS);
230 }
231 
232 /**
233  * Feature: ImageEffect
234  * Function: Test ImageEffect::SetInputPath with not support type param
235  * SubFunction: NA
236  * FunctionPoints: NA
237  * EnvConditions: NA
238  * CaseDescription: Test ImageEffect::SetInputPath with not support type param
239  */
240 HWTEST_F(TestImageEffect, SetInputPath003, TestSize.Level1)
241 {
242     ErrorCode result = imageEffect_->SetInputPath(g_notJpgPath);
243     ASSERT_NE(result, ErrorCode::SUCCESS);
244 }
245 
246 /**
247  * Feature: ImageEffect
248  * Function: Test ImageEffect::SetOutputPath with normal param
249  * SubFunction: NA
250  * FunctionPoints: NA
251  * EnvConditions: NA
252  * CaseDescription: Test ImageEffect::SetOutputPath with normal param
253  */
254 HWTEST_F(TestImageEffect, SetOutputPath001, TestSize.Level1)
255 {
256     ErrorCode result = imageEffect_->SetOutputPath(g_jpgPath);
257     ASSERT_EQ(result, ErrorCode::SUCCESS);
258 }
259 
260 /**
261  * Feature: ImageEffect
262  * Function: Test ImageEffect::SetOutputPath with nullptr param
263  * SubFunction: NA
264  * FunctionPoints: NA
265  * EnvConditions: NA
266  * CaseDescription: Test ImageEffect::SetOutputPath with nullptr param
267  */
268 HWTEST_F(TestImageEffect, SetOutputPath002, TestSize.Level1)
269 {
270     ErrorCode result = imageEffect_->SetOutputPath(nullptr);
271     ASSERT_EQ(result, ErrorCode::SUCCESS);
272 }
273 
274 /**
275  * Feature: ImageEffect
276  * Function: Test ImageEffect::SetOutputPath with not support type param
277  * SubFunction: NA
278  * FunctionPoints: NA
279  * EnvConditions: NA
280  * CaseDescription: Test ImageEffect::SetOutputPath with not support type param
281  */
282 HWTEST_F(TestImageEffect, SetOutputPath003, TestSize.Level1)
283 {
284     ErrorCode result = imageEffect_->SetOutputPath(g_notJpgPath);
285     ASSERT_NE(result, ErrorCode::SUCCESS);
286 }
287 
288 /**
289  * Feature: ImageEffect
290  * Function: Test ImageEffect::SetInputUri with normal param
291  * SubFunction: NA
292  * FunctionPoints: NA
293  * EnvConditions: NA
294  * CaseDescription: Test ImageEffect::SetInputUri with normal param
295  */
296 HWTEST_F(TestImageEffect, SetInputUri001, TestSize.Level1)
297 {
298     ErrorCode result = imageEffect_->SetInputUri(g_jpgUri);
299     ASSERT_EQ(result, ErrorCode::SUCCESS);
300 }
301 
302 /**
303  * Feature: ImageEffect
304  * Function: Test ImageEffect::SetInputUri with nullptr param
305  * SubFunction: NA
306  * FunctionPoints: NA
307  * EnvConditions: NA
308  * CaseDescription: Test ImageEffect::SetInputUri with nullptr param
309  */
310 HWTEST_F(TestImageEffect, SetInputUri002, TestSize.Level1)
311 {
312     ErrorCode result = imageEffect_->SetInputUri(nullptr);
313     ASSERT_NE(result, ErrorCode::SUCCESS);
314 }
315 
316 /**
317  * Feature: ImageEffect
318  * Function: Test ImageEffect::SetInputUri with not support type param
319  * SubFunction: NA
320  * FunctionPoints: NA
321  * EnvConditions: NA
322  * CaseDescription: Test ImageEffect::SetInputUri with not support type param
323  */
324 HWTEST_F(TestImageEffect, SetInputUri003, TestSize.Level1)
325 {
326     ErrorCode result = imageEffect_->SetInputUri(g_notJpgUri);
327     ASSERT_NE(result, ErrorCode::SUCCESS);
328 }
329 
330 /**
331  * Feature: ImageEffect
332  * Function: Test ImageEffect::SetOutputUri with normal param
333  * SubFunction: NA
334  * FunctionPoints: NA
335  * EnvConditions: NA
336  * CaseDescription: Test ImageEffect::SetOutputUri with normal param
337  */
338 HWTEST_F(TestImageEffect, SetOutputUri001, TestSize.Level1)
339 {
340     ErrorCode result = imageEffect_->SetOutputUri(g_jpgUri);
341     ASSERT_EQ(result, ErrorCode::SUCCESS);
342 }
343 
344 /**
345  * Feature: ImageEffect
346  * Function: Test ImageEffect::SetOutputUri with nullptr param
347  * SubFunction: NA
348  * FunctionPoints: NA
349  * EnvConditions: NA
350  * CaseDescription: Test ImageEffect::SetOutputUri with nullptr param
351  */
352 HWTEST_F(TestImageEffect, SetOutputUri002, TestSize.Level1)
353 {
354     ErrorCode result = imageEffect_->SetOutputUri(nullptr);
355     ASSERT_EQ(result, ErrorCode::SUCCESS);
356 }
357 
358 /**
359  * Feature: ImageEffect
360  * Function: Test ImageEffect::SetOutputUri with not support type param
361  * SubFunction: NA
362  * FunctionPoints: NA
363  * EnvConditions: NA
364  * CaseDescription: Test ImageEffect::SetOutputUri with not support type param
365  */
366 HWTEST_F(TestImageEffect, SetOutputUri003, TestSize.Level1)
367 {
368     ErrorCode result = imageEffect_->SetOutputUri(g_notJpgUri);
369     ASSERT_NE(result, ErrorCode::SUCCESS);
370 }
371 
372 HWTEST_F(TestImageEffect, Restore001, TestSize.Level1)
373 {
374     std::string info = "{\"imageEffect\":{\"filters\":[{\"name\":\"Brightness\",\"values\":{\"FilterIntensity\":"
375         "100.0}},{\"name\":\"Contrast\",\"values\":{\"FilterIntensity\":50.0}}],\"name\":\"imageEdit\"}}";
376     std::shared_ptr<ImageEffect> imageEffect = ImageEffect::Restore(info);
377     ASSERT_NE(imageEffect, nullptr);
378     std::vector<std::shared_ptr<EFilter>> efilters = imageEffect->GetEFilters();
379     ASSERT_EQ(efilters.size(), 2);
380     ASSERT_STREQ(efilters.at(0)->GetName().c_str(), BRIGHTNESS_EFILTER);
381     Plugin::Any value;
382     ASSERT_EQ(efilters.at(0)->GetValue(KEY_FILTER_INTENSITY, value), ErrorCode::SUCCESS);
383     auto brightnessRatio = Plugin::AnyCast<float>(&value);
384     ASSERT_NE(brightnessRatio, nullptr);
385     ASSERT_FLOAT_EQ(*brightnessRatio, 100.f);
386 
387     Plugin::Any any;
388     ASSERT_STREQ(efilters.at(1)->GetName().c_str(), CONTRAST_EFILTER);
389     ASSERT_EQ(efilters.at(1)->GetValue(KEY_FILTER_INTENSITY, any), ErrorCode::SUCCESS);
390     auto contrastRatio = Plugin::AnyCast<float>(&any);
391     ASSERT_NE(contrastRatio, nullptr);
392     ASSERT_FLOAT_EQ(*contrastRatio, 50.f);
393 }
394 
395 HWTEST_F(TestImageEffect, Restore002, TestSize.Level1)
396 {
397     std::shared_ptr<IFilterDelegate> customTestEFilter = std::make_unique<CustomTestEFilter>();
398     auto *effectInfo = static_cast<std::shared_ptr<EffectInfo> *>(customTestEFilter->GetEffectInfo());
399     ASSERT_NE(effectInfo, nullptr);
400     EFilterFactory::Instance()->RegisterDelegate(CUSTOM_TEST_EFILTER, customTestEFilter, *effectInfo);
401 
402     std::string info = "{\"imageEffect\":{\"filters\":[{\"name\":\"CustomTestEFilter\",\"values\":{\"brightness\":"
403         "60.0}},{\"name\":\"Contrast\",\"values\":{\"FilterIntensity\":50.0}}],\"name\":\"imageEdit\"}}";
404 
405     std::shared_ptr<ImageEffect> imageEffect = ImageEffect::Restore(info);
406     ASSERT_NE(imageEffect, nullptr);
407     std::vector<std::shared_ptr<EFilter>> efilters = imageEffect->GetEFilters();
408     ASSERT_EQ(efilters.size(), 2);
409     ASSERT_STREQ(efilters.at(0)->GetName().c_str(), "CustomTestEFilter");
410     Plugin::Any value;
411     ASSERT_EQ(efilters.at(0)->GetValue("brightness", value), ErrorCode::SUCCESS);
412     auto brightness = Plugin::AnyCast<float>(&value);
413     ASSERT_NE(brightness, nullptr);
414     ASSERT_FLOAT_EQ(*brightness, 60.f);
415 
416     ErrorCode errorCode = imageEffect->SetInputPixelMap(mockPixelMap_);
417     ASSERT_EQ(errorCode, ErrorCode::SUCCESS);
418     errorCode = imageEffect->Start();
419     ASSERT_EQ(errorCode, ErrorCode::SUCCESS);
420 }
421 
422 HWTEST_F(TestImageEffect, Restore003, TestSize.Level1)
423 {
424     std::string info = "{\"imageEffect\":{\"filters\":[{\"name\":\"Crop\"}],\"name\":\"imageEdit\"}}";
425     std::shared_ptr<ImageEffect> imageEffect = ImageEffect::Restore(info);
426     ASSERT_NE(imageEffect, nullptr);
427     std::vector<std::shared_ptr<EFilter>> efilters = imageEffect->GetEFilters();
428     ASSERT_EQ(efilters.size(), 1);
429     ASSERT_STREQ(efilters.at(0)->GetName().c_str(), CROP_EFILTER);
430 }
431 
432 HWTEST_F(TestImageEffect, Surface001, TestSize.Level1)
433 {
434     sptr<Surface> consumerSurface = Surface::CreateSurfaceAsConsumer("UnitTest");
435     sptr<IBufferProducer> producer = consumerSurface->GetProducer();
436     sptr<ProducerSurface> surf = new(std::nothrow) MockProducerSurface(producer);
437     surf->Init();
438     sptr<Surface> outputSurface = surf;
439 
440     ErrorCode result = imageEffect_->SetOutputSurface(outputSurface);
441     ASSERT_EQ(result, ErrorCode::SUCCESS);
442 
443     sptr<Surface> inputSurface = imageEffect_->GetInputSurface();
444     ASSERT_NE(inputSurface, nullptr);
445 
446     sptr<SurfaceBuffer> surfaceBuffer;
447     MockProducerSurface::AllocDmaMemory(surfaceBuffer);
448 
449     // running without filter
450     imageEffect_->ConsumerBufferAvailable();
451 
452     std::shared_ptr<EFilter> contrastEFilter = EFilterFactory::Instance()->Create(CONTRAST_EFILTER);
453     Plugin::Any value = 50.f;
454     result = contrastEFilter->SetValue(KEY_FILTER_INTENSITY, value);
455     ASSERT_EQ(result, ErrorCode::SUCCESS);
456     imageEffect_->AddEFilter(contrastEFilter);
457 
458     result = imageEffect_->Start();
459     ASSERT_EQ(result, ErrorCode::SUCCESS);
460 
461     // contrast filter
462     imageEffect_->ConsumerBufferAvailable();
463     MockProducerSurface::ReleaseDmaBuffer(surfaceBuffer);
464 }
465 
466 HWTEST_F(TestImageEffect, UpdateProducerSurfaceInfo001, TestSize.Level1)
467 {
468     imageEffect_->UpdateProducerSurfaceInfo();
469     ASSERT_EQ(imageEffect_->toProducerSurface_, nullptr);
470 }
471 
472 HWTEST_F(TestImageEffect, MemoryCopyForSurfaceBuffer001, TestSize.Level1)
473 {
474     sptr<SurfaceBuffer> buffer;
475     MockProducerSurface::AllocDmaMemory(buffer);
476     sptr<SurfaceBuffer> outBuffer;
477     MockProducerSurface::AllocDmaMemory(outBuffer);
478     buffer->SetSurfaceBufferWidth(100);
479     buffer->SetSurfaceBufferHeight(100);
480 
481     buffer->SetSurfaceBufferWidth(200);
482     buffer->SetSurfaceBufferHeight(200);
483 
484     MemoryCopyForSurfaceBuffer(buffer, outBuffer);
485     ASSERT_EQ(buffer->GetWidth(), outBuffer->GetWidth());
486 }
487 
488 HWTEST_F(TestImageEffect, IsSurfaceBufferHebc001, TestSize.Level1)
489 {
490     sptr<SurfaceBuffer> buffer;
491     MockProducerSurface::AllocDmaMemory(buffer);
492     std::vector<uint8_t> values;
493     buffer->SetMetadata(V1_1::BufferHandleAttrKey::ATTRKEY_ACCESS_TYPE, values);
494     bool result = IsSurfaceBufferHebc(buffer);
495     ASSERT_NE(result, true);
496 }
497 
498 HWTEST_F(TestImageEffect, GetBufferRequestConfig001, TestSize.Level1)
499 {
500     sptr<SurfaceBuffer> buffer;
501     MockProducerSurface::AllocDmaMemory(buffer);
502     BufferRequestConfig result = imageEffect_->GetBufferRequestConfig(buffer);
503     ASSERT_EQ(result.strideAlignment, 0x8);
504 
505     sptr<SurfaceBuffer> outBuffer;
506     MockProducerSurface::AllocDmaMemory(outBuffer);
507     buffer->SetSurfaceBufferWidth(1920);
508     buffer->SetSurfaceBufferHeight(1080);
509     BufferRequestConfig result2 = imageEffect_->GetBufferRequestConfig(outBuffer);
510     ASSERT_EQ(result2.width, 960);
511     ASSERT_EQ(result2.height, 1280);
512 }
513 
514 HWTEST_F(TestImageEffect, FlushBuffer001, TestSize.Level1)
515 {
516     sptr<SurfaceBuffer> inBuffer;
517     MockProducerSurface::AllocDmaMemory(inBuffer);
518     sptr<SyncFence> inBufferSyncFence = SyncFence::INVALID_FENCE;
519     int64_t timestamp = 0;
520     GSError result = imageEffect_->FlushBuffer(inBuffer, inBufferSyncFence, true, true, timestamp);
521     ASSERT_NE(result, GSERROR_OK);
522 }
523 
524 HWTEST_F(TestImageEffect, FlushBuffer002, TestSize.Level1)
525 {
526     sptr<SurfaceBuffer> inBuffer;
527     MockProducerSurface::AllocDmaMemory(inBuffer);
528     sptr<SyncFence> inBufferSyncFence = SyncFence::INVALID_FENCE;
529     int64_t timestamp = 0;
530     GSError result = imageEffect_->FlushBuffer(inBuffer, inBufferSyncFence, true, false, timestamp);
531     ASSERT_NE(result, GSERROR_OK);
532 }
533 
534 HWTEST_F(TestImageEffect, FlushBuffer003, TestSize.Level1)
535 {
536     sptr<SurfaceBuffer> inBuffer;
537     MockProducerSurface::AllocDmaMemory(inBuffer);
538     sptr<SyncFence> inBufferSyncFence = SyncFence::INVALID_FENCE;
539     int64_t timestamp = 0;
540     GSError result = imageEffect_->FlushBuffer(inBuffer, inBufferSyncFence, false, true, timestamp);
541     ASSERT_NE(result, GSERROR_OK);
542 }
543 
544 HWTEST_F(TestImageEffect, FlushBuffer004, TestSize.Level1)
545 {
546     sptr<SurfaceBuffer> inBuffer;
547     MockProducerSurface::AllocDmaMemory(inBuffer);
548     sptr<SyncFence> inBufferSyncFence = SyncFence::INVALID_FENCE;
549     int64_t timestamp = 0;
550     GSError result = imageEffect_->FlushBuffer(inBuffer, inBufferSyncFence, false, false, timestamp);
551     ASSERT_NE(result, GSERROR_OK);
552 }
553 
554 HWTEST_F(TestImageEffect, ReleaseBuffer001, TestSize.Level1)
555 {
556     sptr<SurfaceBuffer> buffer;
557     MockProducerSurface::AllocDmaMemory(buffer);
558     sptr<SyncFence> fence = SyncFence::INVALID_FENCE;
559     GSError result = imageEffect_->ReleaseBuffer(buffer, fence);
560     ASSERT_NE(result, GSERROR_OK);
561 }
562 
563 HWTEST_F(TestImageEffect, ProcessRender001, TestSize.Level1)
564 {
565     sptr<SurfaceBuffer> inBuffer;
566     MockProducerSurface::AllocDmaMemory(inBuffer);
567     sptr<SurfaceBuffer> outBuffer;
568     MockProducerSurface::AllocDmaMemory(outBuffer);
569 
570     BufferProcessInfo bufferProcessInfo{
571         .inBuffer_ = inBuffer,
572         .outBuffer_ = outBuffer,
573         .inBufferSyncFence_ = SyncFence::INVALID_FENCE,
574         .outBufferSyncFence_ = SyncFence::INVALID_FENCE,
575         .isSrcHebcData_ = true,
576     };
577 
578     bool isNeedSwap = true;
579     int64_t timestamp = 0;
580     imageEffect_->ProcessRender(bufferProcessInfo, isNeedSwap, timestamp);
581     ASSERT_NE(bufferProcessInfo.outBuffer_, nullptr);
582 }
583 
584 HWTEST_F(TestImageEffect, ProcessRender002, TestSize.Level1)
585 {
586     sptr<SurfaceBuffer> inBuffer;
587     MockProducerSurface::AllocDmaMemory(inBuffer);
588     sptr<SurfaceBuffer> outBuffer = nullptr;
589 
590     BufferProcessInfo bufferProcessInfo{
591         .inBuffer_ = inBuffer,
592         .outBuffer_ = outBuffer,
593         .inBufferSyncFence_ = SyncFence::INVALID_FENCE,
594         .outBufferSyncFence_ = SyncFence::INVALID_FENCE,
595         .isSrcHebcData_ = true,
596     };
597 
598     bool isNeedSwap = true;
599     int64_t timestamp = 0;
600     imageEffect_->ProcessRender(bufferProcessInfo, isNeedSwap, timestamp);
601     ASSERT_EQ(bufferProcessInfo.outBuffer_, nullptr);
602 }
603 
604 HWTEST_F(TestImageEffect, ProcessRender003, TestSize.Level1)
605 {
606     sptr<SurfaceBuffer> inBuffer;
607     MockProducerSurface::AllocDmaMemory(inBuffer);
608     sptr<SurfaceBuffer> outBuffer;
609     MockProducerSurface::AllocDmaMemory(outBuffer);
610 
611     BufferProcessInfo bufferProcessInfo{
612         .inBuffer_ = inBuffer,
613         .outBuffer_ = outBuffer,
614         .inBufferSyncFence_ = SyncFence::INVALID_FENCE,
615         .outBufferSyncFence_ = SyncFence::INVALID_FENCE,
616         .isSrcHebcData_ = true,
617     };
618 
619     bool isNeedSwap = false;
620     int64_t timestamp = 0;
621     imageEffect_->ProcessRender(bufferProcessInfo, isNeedSwap, timestamp);
622     ASSERT_NE(bufferProcessInfo.outBuffer_, nullptr);
623 }
624 
625 HWTEST_F(TestImageEffect, GetProducerSurface001, TestSize.Level1)
626 {
627     auto receiverConsumerSurface_ = IConsumerSurface::Create("EffectSurfaceAdapter");
628     auto producer = receiverConsumerSurface_->GetProducer();
629     effectSurfaceAdapter_->fromProducerSurface_ = Surface::CreateSurfaceAsProducer(producer);
630     effectSurfaceAdapter_->GetProducerSurface();
631     ASSERT_NE(effectSurfaceAdapter_->fromProducerSurface_, nullptr);
632 }
633 
634 HWTEST_F(TestImageEffect, ReleaseConsumerSurfaceBuffer001, TestSize.Level1)
635 {
636     sptr<SurfaceBuffer> buffer;
637     MockProducerSurface::AllocDmaMemory(buffer);
638     sptr<SyncFence> fence = SyncFence::INVALID_FENCE;
639     GSError result = effectSurfaceAdapter_->ReleaseConsumerSurfaceBuffer(buffer, fence);
640     ASSERT_NE(result, GSERROR_OK);
641 }
642 
643 HWTEST_F(TestImageEffect, DetachConsumerSurfaceBuffer001, TestSize.Level1)
644 {
645     sptr<SurfaceBuffer> buffer;
646     MockProducerSurface::AllocDmaMemory(buffer);
647     GSError result = effectSurfaceAdapter_->DetachConsumerSurfaceBuffer(buffer);
648     ASSERT_NE(result, GSERROR_OK);
649 }
650 
651 HWTEST_F(TestImageEffect, AttachConsumerSurfaceBuffer001, TestSize.Level1)
652 {
653     sptr<SurfaceBuffer> buffer;
654     MockProducerSurface::AllocDmaMemory(buffer);
655     GSError result = effectSurfaceAdapter_->AttachConsumerSurfaceBuffer(buffer);
656     ASSERT_NE(result, GSERROR_OK);
657 }
658 
659 HWTEST_F(TestImageEffect, SetConsumerListener001, TestSize.Level1)
660 {
661     ErrorCode result = effectSurfaceAdapter_->SetConsumerListener(nullptr);
662     ASSERT_EQ(result, ErrorCode::ERR_INPUT_NULL);
663 }
664 
665 HWTEST_F(TestImageEffect, GetTransform001, TestSize.Level1)
666 {
667     effectSurfaceAdapter_->receiverConsumerSurface_ = nullptr;
668     auto result = effectSurfaceAdapter_->GetTransform();
669     ASSERT_EQ(result, GRAPHIC_ROTATE_BUTT);
670 }
671 
672 HWTEST_F(TestImageEffect, GetTransform002, TestSize.Level1)
673 {
674     effectSurfaceAdapter_->receiverConsumerSurface_ = IConsumerSurface::Create("EffectSurfaceAdapter");
675     auto result = effectSurfaceAdapter_->GetTransform();
676     ASSERT_NE(result, GRAPHIC_ROTATE_BUTT);
677 }
678 
679 HWTEST_F(TestImageEffect, OnBufferAvailable001, TestSize.Level1)
680 {
681     effectSurfaceAdapter_->receiverConsumerSurface_ = nullptr;
682     effectSurfaceAdapter_->OnBufferAvailable();
683     ASSERT_EQ(effectSurfaceAdapter_->receiverConsumerSurface_, nullptr);
684 }
685 
686 HWTEST_F(TestImageEffect, OnBufferAvailable002, TestSize.Level1)
687 {
688     effectSurfaceAdapter_->receiverConsumerSurface_ = IConsumerSurface::Create("EffectSurfaceAdapter");
689     effectSurfaceAdapter_->OnBufferAvailable();
690     ASSERT_NE(effectSurfaceAdapter_->receiverConsumerSurface_, nullptr);
691 }
692 } // namespace Test
693 } // namespace Effect
694 } // namespace Media
695 } // namespace OHOS