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