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 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 = 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_ = { __anonf138c2ac0202() 204 .setValue = [](OH_EffectFilter *filter, const char *key, const ImageEffect_Any *value) { return true; }, __anonf138c2ac0302() 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, ×tamp); 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 }, __anonf138c2ac0402() 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 }, __anonf138c2ac0502() 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 = { __anonf138c2ac0602() 877 .setValue = [](OH_EffectFilter *filter, const char *key, const ImageEffect_Any *value) { return true; }, __anonf138c2ac0702() 878 .render = [](OH_EffectFilter *filter, OH_EffectBufferInfo *src, OH_EffectFilterDelegate_PushData pushData) { 879 pushData(filter, src); 880 return true; 881 }, __anonf138c2ac0802() 882 .save = [](OH_EffectFilter *filter, char **info) { return true; }, __anonf138c2ac0902() 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 = { __anonf138c2ac0a02() 918 .setValue = [](OH_EffectFilter *filter, const char *key, const ImageEffect_Any *value) { return true; }, __anonf138c2ac0b02() 919 .render = [](OH_EffectFilter *filter, OH_EffectBufferInfo *src, OH_EffectFilterDelegate_PushData pushData) { 920 pushData(filter, src); 921 return true; 922 }, __anonf138c2ac0c02() 923 .save = [](OH_EffectFilter *filter, char **info) { return true; }, __anonf138c2ac0d02() 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 std::vector<string> filterNamesVector; 1001 for (uint32_t i = 0; i < size; i++) { 1002 filterNamesVector.emplace_back(nameList[i]); 1003 } 1004 1005 auto brightnessIndex = std::find(filterNamesVector.begin(), filterNamesVector.end(), BRIGHTNESS_EFILTER); 1006 ASSERT_NE(brightnessIndex, filterNamesVector.end()); 1007 1008 auto contrastIndex = std::find(filterNamesVector.begin(), filterNamesVector.end(), CONTRAST_EFILTER); 1009 ASSERT_NE(contrastIndex, filterNamesVector.end()); 1010 } 1011 1012 /** 1013 * Feature: ImageEffect 1014 * Function: Test OH_EffectFilter_LookupFilters with empty parameter 1015 * SubFunction: NA 1016 * FunctionPoints: NA 1017 * EnvConditions: NA 1018 * CaseDescription: Test OH_EffectFilter_LookupFilters with empty parameter 1019 */ 1020 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilters002, TestSize.Level1) 1021 { 1022 ImageEffect_FilterNames *filterNames= OH_EffectFilter_LookupFilters(nullptr); 1023 ASSERT_EQ(filterNames, nullptr); 1024 } 1025 1026 /** 1027 * Feature: ImageEffect 1028 * Function: Test OH_EffectFilter_LookupFilters with not support parameter 1029 * SubFunction: NA 1030 * FunctionPoints: NA 1031 * EnvConditions: NA 1032 * CaseDescription: Test OH_EffectFilter_LookupFilters with not support parameter 1033 */ 1034 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilters003, TestSize.Level1) 1035 { 1036 bool result = OH_EffectFilter_LookupFilters("test"); 1037 ASSERT_EQ(result, true); 1038 } 1039 1040 /** 1041 * Feature: ImageEffect 1042 * Function: Test OH_EffectFilter_LookupFilters with not support key parameter 1043 * SubFunction: NA 1044 * FunctionPoints: NA 1045 * EnvConditions: NA 1046 * CaseDescription: Test OH_EffectFilter_LookupFilters with not support key parameter 1047 */ 1048 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilters004, TestSize.Level1) 1049 { 1050 bool result = OH_EffectFilter_LookupFilters("test:default"); 1051 ASSERT_EQ(result, true); 1052 } 1053 1054 /** 1055 * Feature: ImageEffect 1056 * Function: Test OH_EffectFilter_LookupFilters with not support value parameter 1057 * SubFunction: NA 1058 * FunctionPoints: NA 1059 * EnvConditions: NA 1060 * CaseDescription: Test OH_EffectFilter_LookupFilters with not support value parameter 1061 */ 1062 HWTEST_F(NativeImageEffectUnittest, OHEFilterLookupFilters005, TestSize.Level1) 1063 { 1064 bool result = OH_EffectFilter_LookupFilters("Category:test"); 1065 ASSERT_EQ(result, true); 1066 } 1067 1068 /** 1069 * Feature: ImageEffect 1070 * Function: Test CustomFilterAdjustmentSaveAndRestore with normal process 1071 * SubFunction: NA 1072 * FunctionPoints: NA 1073 * EnvConditions: NA 1074 * CaseDescription: Test CustomFilterAdjustmentSaveAndRestore with normal process 1075 */ 1076 HWTEST_F(NativeImageEffectUnittest, CustomFilterAdjustmentSaveAndRestore001, TestSize.Level1) 1077 { 1078 OH_EffectFilterInfo_SetFilterName(filterInfo_, CUSTOM_BRIGHTNESS_EFILTER); 1079 1080 ImageEffect_ErrorCode errorCode = OH_EffectFilter_Register(filterInfo_, &delegate_); 1081 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1082 1083 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1084 ASSERT_NE(imageEffect, nullptr); 1085 1086 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_BRIGHTNESS_EFILTER); 1087 ASSERT_NE(filter, nullptr); 1088 1089 ImageEffect_Any value; 1090 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1091 value.dataValue.floatValue = 50.f; 1092 errorCode = OH_EffectFilter_SetValue(filter, BRIGHTNESS_EFILTER, &value); 1093 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1094 1095 char *imageEffectInfo = nullptr; 1096 errorCode = OH_ImageEffect_Save(imageEffect, &imageEffectInfo); 1097 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1098 ASSERT_NE(imageEffectInfo, nullptr); 1099 std::string saveInfo = imageEffectInfo; 1100 1101 errorCode = OH_ImageEffect_Release(imageEffect); 1102 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1103 1104 imageEffect = OH_ImageEffect_Restore(saveInfo.c_str()); 1105 ASSERT_NE(imageEffect, nullptr); 1106 1107 errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative_); 1108 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1109 1110 errorCode = OH_ImageEffect_Start(imageEffect); 1111 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1112 1113 errorCode = OH_ImageEffect_Release(imageEffect); 1114 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1115 } 1116 1117 /** 1118 * Feature: ImageEffect 1119 * Function: Test CustomTestFilterSave001 with non-utf-8 abnormal json object 1120 * SubFunction: NA 1121 * FunctionPoints: NA 1122 * EnvConditions: NA 1123 * CaseDescription: Test CustomTestFilterSave001 with non-utf-8 abnormal json object 1124 */ 1125 HWTEST_F(NativeImageEffectUnittest, CustomTestFilterSave001, TestSize.Level1) 1126 { 1127 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1128 ASSERT_NE(imageEffect, nullptr); 1129 1130 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_TEST_EFILTER); 1131 ASSERT_NE(filter, nullptr); 1132 1133 char value[] = { static_cast<char>(0xb2), static_cast<char>(0xe2), static_cast<char>(0xca), 1134 static_cast<char>(0xd4), '\0' }; // ANSI encode data 1135 1136 ImageEffect_Any any = { 1137 .dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_PTR, 1138 .dataValue.ptrValue = static_cast<void *>(value), 1139 }; 1140 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &any); 1141 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1142 1143 char *info = nullptr; 1144 errorCode = OH_ImageEffect_Save(imageEffect, &info); 1145 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1146 ASSERT_NE(info, nullptr); 1147 1148 std::string data = info; 1149 EffectJsonPtr root = EffectJsonHelper::ParseJsonData(data); 1150 ASSERT_NE(root, nullptr); 1151 1152 EffectJsonPtr imageInfo = root->GetElement("imageEffect"); 1153 ASSERT_NE(imageInfo, nullptr); 1154 1155 std::vector<EffectJsonPtr> filters = imageInfo->GetArray("filters"); 1156 ASSERT_EQ(filters.size(), 1); 1157 1158 EffectJsonPtr values = filters[0]->GetElement("values"); 1159 ASSERT_NE(values, nullptr); 1160 1161 std::string parsedValue = values->GetString(KEY_FILTER_INTENSITY); 1162 ASSERT_STREQ(parsedValue.c_str(), value); 1163 } 1164 1165 HWTEST_F(NativeImageEffectUnittest, OHImageEffectDataTypeSurface001, TestSize.Level1) 1166 { 1167 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1168 ASSERT_NE(imageEffect, nullptr); 1169 1170 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER); 1171 ASSERT_NE(filter, nullptr); 1172 1173 ImageEffect_Any value; 1174 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1175 value.dataValue.floatValue = 100.f; 1176 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1177 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1178 1179 errorCode = OH_ImageEffect_SetOutputSurface(imageEffect, g_nativeWindow); 1180 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1181 1182 NativeWindow *nativeWindow = nullptr; 1183 errorCode = OH_ImageEffect_GetInputSurface(imageEffect, &nativeWindow); 1184 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1185 ASSERT_NE(nativeWindow, nullptr); 1186 1187 errorCode = OH_ImageEffect_Start(imageEffect); 1188 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1189 1190 OH_ImageEffect_Release(imageEffect); 1191 OH_NativeWindow_DestroyNativeWindow(nativeWindow); 1192 } 1193 1194 /** 1195 * Feature: ImageEffect 1196 * Function: Test OH_ImageEffect_SetInputNativeBuffer with brightness yuv nv21 1197 * SubFunction: NA 1198 * FunctionPoints: NA 1199 * EnvConditions: NA 1200 * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with brightness yuv nv21 1201 */ 1202 HWTEST_F(NativeImageEffectUnittest, OHImageEffectYuvUnittest001, TestSize.Level1) 1203 { 1204 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1205 ASSERT_NE(imageEffect, nullptr); 1206 1207 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER); 1208 ASSERT_NE(filter, nullptr); 1209 1210 ImageEffect_Any value; 1211 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1212 value.dataValue.floatValue = 50.f; 1213 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1214 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1215 1216 OH_NativeBuffer *nativeBuffer = nativeBufferNV21_.get(); 1217 errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBuffer); 1218 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1219 1220 int32_t ipType = 2; 1221 ImageEffect_Any runningType; 1222 runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32; 1223 runningType.dataValue.int32Value = ipType; 1224 errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType); 1225 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1226 1227 errorCode = OH_ImageEffect_Start(imageEffect); 1228 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1229 1230 errorCode = OH_ImageEffect_Release(imageEffect); 1231 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1232 } 1233 1234 /** 1235 * Feature: ImageEffect 1236 * Function: Test OH_ImageEffect_SetInputNativeBuffer with yuv brightness yuv nv12 1237 * SubFunction: NA 1238 * FunctionPoints: NA 1239 * EnvConditions: NA 1240 * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with yuv brightness yuv nv12 1241 */ 1242 HWTEST_F(NativeImageEffectUnittest, OHImageEffectYuvUnittest002, TestSize.Level1) 1243 { 1244 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1245 ASSERT_NE(imageEffect, nullptr); 1246 1247 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER); 1248 ASSERT_NE(filter, nullptr); 1249 1250 ImageEffect_Any value; 1251 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1252 value.dataValue.floatValue = 0.f; 1253 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1254 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1255 1256 OH_EffectFilter *contrastFilter = OH_ImageEffect_AddFilter(imageEffect, CONTRAST_EFILTER); 1257 ASSERT_NE(contrastFilter, nullptr); 1258 1259 ImageEffect_Any contrastValue; 1260 contrastValue.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1261 contrastValue.dataValue.floatValue = 0.f; 1262 errorCode = OH_EffectFilter_SetValue(contrastFilter, KEY_FILTER_INTENSITY, &contrastValue); 1263 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1264 1265 OH_NativeBuffer *nativeBuffer = nativeBufferNV12_.get(); 1266 errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBuffer); 1267 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1268 1269 int32_t ipType = 2; 1270 ImageEffect_Any runningType; 1271 runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32; 1272 runningType.dataValue.int32Value = ipType; 1273 errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType); 1274 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1275 1276 errorCode = OH_ImageEffect_Start(imageEffect); 1277 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1278 1279 errorCode = OH_ImageEffect_Release(imageEffect); 1280 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1281 } 1282 1283 /** 1284 * Feature: ImageEffect 1285 * Function: Test OH_ImageEffect_SetInputNativeBuffer with brightness gpu yuv nv21 1286 * SubFunction: NA 1287 * FunctionPoints: NA 1288 * EnvConditions: NA 1289 * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with brightness gpu yuv nv21 1290 */ 1291 HWTEST_F(NativeImageEffectUnittest, OHImageEffectYuvUnittest003, TestSize.Level1) 1292 { 1293 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1294 ASSERT_NE(imageEffect, nullptr); 1295 1296 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER); 1297 ASSERT_NE(filter, nullptr); 1298 1299 ImageEffect_Any value; 1300 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1301 value.dataValue.floatValue = 0.f; 1302 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1303 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1304 1305 OH_EffectFilter *contrastFilter = OH_ImageEffect_AddFilter(imageEffect, CONTRAST_EFILTER); 1306 ASSERT_NE(contrastFilter, nullptr); 1307 1308 ImageEffect_Any contrastValue; 1309 contrastValue.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1310 contrastValue.dataValue.floatValue = 0.f; 1311 errorCode = OH_EffectFilter_SetValue(contrastFilter, KEY_FILTER_INTENSITY, &contrastValue); 1312 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1313 1314 OH_NativeBuffer *nativeBuffer = nativeBufferNV21_.get(); 1315 errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBuffer); 1316 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1317 1318 int32_t ipType = 1; 1319 ImageEffect_Any runningType; 1320 runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32; 1321 runningType.dataValue.int32Value = ipType; 1322 errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType); 1323 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1324 1325 errorCode = OH_ImageEffect_Start(imageEffect); 1326 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1327 1328 errorCode = OH_ImageEffect_Release(imageEffect); 1329 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1330 } 1331 1332 /** 1333 * Feature: ImageEffect 1334 * Function: Test OH_ImageEffect_SetInputNativeBuffer with contrast gpu yuv nv21 1335 * SubFunction: NA 1336 * FunctionPoints: NA 1337 * EnvConditions: NA 1338 * CaseDescription: Test OH_ImageEffect_SetInputNativeBuffer with contrast gpu yuv nv21 1339 */ 1340 HWTEST_F(NativeImageEffectUnittest, OHImageEffectYuvUnittest004, TestSize.Level1) 1341 { 1342 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1343 ASSERT_NE(imageEffect, nullptr); 1344 1345 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, CONTRAST_EFILTER); 1346 ASSERT_NE(filter, nullptr); 1347 1348 ImageEffect_Any value; 1349 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1350 value.dataValue.floatValue = 50.f; 1351 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1352 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1353 1354 OH_NativeBuffer *nativeBuffer = nativeBufferNV21_.get(); 1355 errorCode = OH_ImageEffect_SetInputNativeBuffer(imageEffect, nativeBuffer); 1356 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1357 1358 int32_t ipType = 1; 1359 ImageEffect_Any runningType; 1360 runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32; 1361 runningType.dataValue.int32Value = ipType; 1362 errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType); 1363 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1364 1365 errorCode = OH_ImageEffect_Start(imageEffect); 1366 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1367 1368 errorCode = OH_ImageEffect_Release(imageEffect); 1369 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1370 } 1371 1372 /** 1373 * Feature: ImageEffect 1374 * Function: Test OH_ImageEffect_Hdr with BRIGHTNESS_EFILTER 1375 * SubFunction: NA 1376 * FunctionPoints: NA 1377 * EnvConditions: NA 1378 * CaseDescription: Test OH_ImageEffect_Hdr with BRIGHTNESS_EFILTER 1379 */ 1380 HWTEST_F(NativeImageEffectUnittest, OHImageEffectHdr001, TestSize.Level1) 1381 { 1382 std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr); 1383 std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_jpgHdrPath); 1384 pixelmapNative->pixelmap_ = std::move(pixelMap); 1385 1386 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1387 ASSERT_NE(imageEffect, nullptr); 1388 1389 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER); 1390 ASSERT_NE(filter, nullptr); 1391 1392 ImageEffect_Any value; 1393 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1394 value.dataValue.floatValue = 100.f; 1395 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1396 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1397 1398 errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative_); 1399 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1400 1401 int32_t ipType = 2; 1402 ImageEffect_Any runningType; 1403 runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32; 1404 runningType.dataValue.int32Value = ipType; 1405 errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType); 1406 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1407 1408 errorCode = OH_ImageEffect_Start(imageEffect); 1409 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1410 1411 errorCode = OH_ImageEffect_Release(imageEffect); 1412 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1413 } 1414 1415 /** 1416 * Feature: ImageEffect 1417 * Function: Test OH_ImageEffect_Hdr with CROP_EFILTER 1418 * SubFunction: NA 1419 * FunctionPoints: NA 1420 * EnvConditions: NA 1421 * CaseDescription: Test OH_ImageEffect_Hdr with CROP_EFILTER 1422 */ 1423 HWTEST_F(NativeImageEffectUnittest, OHImageEffectHdr002, TestSize.Level1) 1424 { 1425 std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr); 1426 std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_jpgHdrPath); 1427 pixelmapNative->pixelmap_ = std::move(pixelMap); 1428 1429 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1430 ASSERT_NE(imageEffect, nullptr); 1431 1432 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, CROP_EFILTER); 1433 ASSERT_NE(filter, nullptr); 1434 1435 uint32_t x1 = static_cast<uint32_t>(pixelmapNative->pixelmap_->GetWidth() / CROP_FACTOR); 1436 uint32_t y1 = static_cast<uint32_t>(pixelmapNative->pixelmap_->GetHeight() / CROP_FACTOR); 1437 uint32_t areaInfo[] = { 0, 0, x1, y1}; 1438 ImageEffect_Any value; 1439 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_PTR; 1440 value.dataValue.ptrValue = static_cast<void *>(areaInfo); 1441 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_REGION, &value); 1442 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1443 1444 errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative.get()); 1445 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1446 1447 errorCode = OH_ImageEffect_Start(imageEffect); 1448 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1449 1450 errorCode = OH_ImageEffect_Release(imageEffect); 1451 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1452 } 1453 1454 /** 1455 * Feature: ImageEffect 1456 * Function: Test OH_ImageEffect_Hdr with SetOutputPixelmap 1457 * SubFunction: NA 1458 * FunctionPoints: NA 1459 * EnvConditions: NA 1460 * CaseDescription: Test OH_ImageEffect_Hdr with SetOutputPixelmap 1461 */ 1462 HWTEST_F(NativeImageEffectUnittest, OHImageEffectHdr003, TestSize.Level1) 1463 { 1464 std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr); 1465 std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_jpgHdrPath); 1466 ASSERT_NE(pixelMap, nullptr); 1467 pixelmapNative->pixelmap_ = std::move(pixelMap); 1468 1469 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1470 ASSERT_NE(imageEffect, nullptr); 1471 1472 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER); 1473 ASSERT_NE(filter, nullptr); 1474 1475 ImageEffect_Any value; 1476 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1477 value.dataValue.floatValue = 100.f; 1478 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1479 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1480 1481 errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative.get()); 1482 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1483 1484 errorCode = OH_ImageEffect_SetOutputPixelmap(imageEffect, pixelmapNative_); 1485 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1486 1487 int32_t ipType = 2; 1488 ImageEffect_Any runningType; 1489 runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32; 1490 runningType.dataValue.int32Value = ipType; 1491 errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType); 1492 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1493 1494 errorCode = OH_ImageEffect_Start(imageEffect); 1495 if (pixelmapNative->pixelmap_->IsHdr()) { 1496 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1497 } else { 1498 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1499 } 1500 1501 errorCode = OH_ImageEffect_Release(imageEffect); 1502 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1503 } 1504 1505 /** 1506 * Feature: ImageEffect 1507 * Function: Test OH_ImageEffect_Hdr with ConverCPU2GPU and ConverGPU2CPU 1508 * SubFunction: NA 1509 * FunctionPoints: NA 1510 * EnvConditions: NA 1511 * CaseDescription: Test OH_ImageEffect_Hdr with ConverCPU2GPU and ConverGPU2CPU 1512 */ 1513 HWTEST_F(NativeImageEffectUnittest, OHImageEffectHdr004, TestSize.Level1) 1514 { 1515 std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr); 1516 std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_jpgHdrPath); 1517 ASSERT_NE(pixelMap, nullptr); 1518 pixelmapNative->pixelmap_ = std::move(pixelMap); 1519 1520 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1521 ASSERT_NE(imageEffect, nullptr); 1522 1523 OH_EffectFilter *customfilter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_TEST_EFILTER); 1524 ASSERT_NE(customfilter, nullptr); 1525 1526 customfilter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_TEST_EFILTER2); 1527 ASSERT_NE(customfilter, nullptr); 1528 1529 customfilter = OH_ImageEffect_AddFilter(imageEffect, CUSTOM_TEST_EFILTER); 1530 ASSERT_NE(customfilter, nullptr); 1531 1532 ImageEffect_ErrorCode errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative.get()); 1533 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1534 1535 int32_t ipType = 1; 1536 ImageEffect_Any runningType; 1537 runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32; 1538 runningType.dataValue.int32Value = ipType; 1539 errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType); 1540 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1541 1542 errorCode = OH_ImageEffect_Start(imageEffect); 1543 if (pixelmapNative->pixelmap_->IsHdr()) { 1544 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1545 } else { 1546 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1547 } 1548 1549 errorCode = OH_ImageEffect_Stop(imageEffect); 1550 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1551 1552 errorCode = OH_ImageEffect_Release(imageEffect); 1553 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1554 } 1555 1556 /** 1557 * Feature: ImageEffect 1558 * Function: Test OH_ImageEffect_Hdr with Adobe 1559 * SubFunction: NA 1560 * FunctionPoints: NA 1561 * EnvConditions: NA 1562 * CaseDescription: Test OH_ImageEffect_Hdr with Adobe 1563 */ 1564 HWTEST_F(NativeImageEffectUnittest, OHImageEffectAdobe001, TestSize.Level1) 1565 { 1566 std::shared_ptr<OH_PixelmapNative> pixelmapNative = std::make_shared<OH_PixelmapNative>(nullptr); 1567 std::unique_ptr<PixelMap> pixelMap = TestPixelMapUtils::ParsePixelMapByPath(g_adobeHdrPath); 1568 pixelmapNative->pixelmap_ = std::move(pixelMap); 1569 1570 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1571 ASSERT_NE(imageEffect, nullptr); 1572 1573 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, BRIGHTNESS_EFILTER); 1574 ASSERT_NE(filter, nullptr); 1575 1576 ImageEffect_Any value; 1577 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1578 value.dataValue.floatValue = 100.f; 1579 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1580 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1581 1582 errorCode = OH_ImageEffect_SetInputPixelmap(imageEffect, pixelmapNative.get()); 1583 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1584 1585 int32_t ipType = 2; 1586 ImageEffect_Any runningType; 1587 runningType.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32; 1588 runningType.dataValue.int32Value = ipType; 1589 errorCode = OH_ImageEffect_Configure(imageEffect, "runningType", &runningType); 1590 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1591 1592 errorCode = OH_ImageEffect_Start(imageEffect); 1593 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1594 1595 errorCode = OH_ImageEffect_Release(imageEffect); 1596 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1597 } 1598 1599 /** 1600 * Feature: ImageEffect 1601 * Function: Test OH_ImageEffect with picture 1602 * SubFunction: NA 1603 * FunctionPoints: NA 1604 * EnvConditions: NA 1605 * CaseDescription: Test OH_ImageEffect with picture 1606 */ 1607 HWTEST_F(NativeImageEffectUnittest, OHImageEffectPicture001, TestSize.Level1) 1608 { 1609 std::shared_ptr<Picture> picture = std::make_shared<MockPicture>(); 1610 std::shared_ptr<OH_PictureNative> pictureNative = std::make_shared<OH_PictureNative>(picture); 1611 1612 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1613 ASSERT_NE(imageEffect, nullptr); 1614 1615 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER); 1616 ASSERT_NE(filter, nullptr); 1617 1618 ImageEffect_Any value; 1619 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1620 value.dataValue.floatValue = 100.f; 1621 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1622 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1623 1624 errorCode = OH_ImageEffect_SetInputPicture(imageEffect, pictureNative.get()); 1625 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1626 1627 // start with input 1628 errorCode = OH_ImageEffect_Start(imageEffect); 1629 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1630 1631 // start with in and out(input equal to output) 1632 errorCode = OH_ImageEffect_SetOutputPicture(imageEffect, pictureNative.get()); 1633 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1634 errorCode = OH_ImageEffect_Start(imageEffect); 1635 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1636 1637 // start with in and out 1638 std::shared_ptr<Picture> outputPicture = std::make_shared<MockPicture>(); 1639 std::shared_ptr<OH_PictureNative> outputPictureNative = std::make_shared<OH_PictureNative>(outputPicture); 1640 errorCode = OH_ImageEffect_SetOutputPicture(imageEffect, outputPictureNative.get()); 1641 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1642 errorCode = OH_ImageEffect_Start(imageEffect); 1643 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1644 1645 errorCode = OH_ImageEffect_Release(imageEffect); 1646 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1647 } 1648 1649 /** 1650 * Feature: ImageEffect 1651 * Function: Test OH_ImageEffect with picture for abnormal input parameters. 1652 * SubFunction: NA 1653 * FunctionPoints: NA 1654 * EnvConditions: NA 1655 * CaseDescription: Test OH_ImageEffect with picture for abnormal input parameters. 1656 */ 1657 HWTEST_F(NativeImageEffectUnittest, OHImageEffectPicture002, TestSize.Level1) 1658 { 1659 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); __anonf138c2ac0e02(OH_ImageEffect *imageEffect) 1660 std::shared_ptr<OH_ImageEffect> imageEffectPtr(imageEffect, [](OH_ImageEffect *imageEffect) { 1661 if (imageEffect != nullptr) { 1662 OH_ImageEffect_Release(imageEffect); 1663 } 1664 }); 1665 std::shared_ptr<Picture> picture = std::make_shared<MockPicture>(); 1666 std::shared_ptr<OH_PictureNative> pictureNative = std::make_shared<OH_PictureNative>(picture); 1667 std::shared_ptr<Picture> defaultPicture; 1668 std::shared_ptr<OH_PictureNative> abnormalPictureNative = std::make_shared<OH_PictureNative>(defaultPicture); 1669 1670 ASSERT_NE(OH_ImageEffect_SetInputPicture(nullptr, pictureNative.get()), ImageEffect_ErrorCode::EFFECT_SUCCESS); 1671 ASSERT_NE(OH_ImageEffect_SetInputPicture(imageEffectPtr.get(), nullptr), ImageEffect_ErrorCode::EFFECT_SUCCESS); 1672 ASSERT_NE(OH_ImageEffect_SetInputPicture(imageEffectPtr.get(), abnormalPictureNative.get()), 1673 ImageEffect_ErrorCode::EFFECT_SUCCESS); 1674 ASSERT_EQ(OH_ImageEffect_SetInputPicture(imageEffectPtr.get(), pictureNative.get()), 1675 ImageEffect_ErrorCode::EFFECT_SUCCESS); 1676 1677 ASSERT_NE(OH_ImageEffect_SetOutputPicture(nullptr, pictureNative.get()), ImageEffect_ErrorCode::EFFECT_SUCCESS); 1678 ASSERT_EQ(OH_ImageEffect_SetOutputPicture(imageEffectPtr.get(), nullptr), ImageEffect_ErrorCode::EFFECT_SUCCESS); 1679 ASSERT_EQ(OH_ImageEffect_SetOutputPicture(imageEffectPtr.get(), abnormalPictureNative.get()), 1680 ImageEffect_ErrorCode::EFFECT_SUCCESS); 1681 ASSERT_EQ(OH_ImageEffect_SetOutputPicture(imageEffectPtr.get(), pictureNative.get()), 1682 ImageEffect_ErrorCode::EFFECT_SUCCESS); 1683 } 1684 1685 /** 1686 * Feature: ImageEffect 1687 * Function: Test OH_ImageEffect with texture 1688 * SubFunction: NA 1689 * FunctionPoints: NA 1690 * EnvConditions: NA 1691 * CaseDescription: Test OH_ImageEffect with texture 1692 */ 1693 HWTEST_F(NativeImageEffectUnittest, OHImageEffectTexture001, TestSize.Level1) 1694 { 1695 std::shared_ptr<RenderEnvironment> renderEnv = std::make_shared<RenderEnvironment>(); 1696 renderEnv->Init(); 1697 renderEnv->BeginFrame(); 1698 1699 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1700 ASSERT_NE(imageEffect, nullptr); __anonf138c2ac0f02(OH_ImageEffect *imageEffect) 1701 std::shared_ptr<OH_ImageEffect> imageEffectPtr(imageEffect, [](OH_ImageEffect *imageEffect) { 1702 if (imageEffect != nullptr) { 1703 OH_ImageEffect_Release(imageEffect); 1704 } 1705 }); 1706 1707 std::shared_ptr<RenderTexture> input = renderEnv->RequestBuffer(1920, 1080, GL_RGBA8); 1708 ASSERT_NE(OH_ImageEffect_SetInputTextureId(nullptr, input->GetName(), ColorManager::ColorSpaceName::SRGB), 1709 ImageEffect_ErrorCode::EFFECT_SUCCESS); 1710 ASSERT_NE(OH_ImageEffect_SetInputTextureId(imageEffect, 0, ColorManager::ColorSpaceName::SRGB), 1711 ImageEffect_ErrorCode::EFFECT_SUCCESS); 1712 1713 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER); 1714 ASSERT_NE(filter, nullptr); 1715 1716 ImageEffect_Any value; 1717 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1718 value.dataValue.floatValue = 100.f; 1719 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1720 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1721 1722 ASSERT_EQ(OH_ImageEffect_SetInputTextureId(imageEffectPtr.get(), input->GetName(), 1723 ColorManager::ColorSpaceName::SRGB), ImageEffect_ErrorCode::EFFECT_SUCCESS); 1724 1725 // start with input 1726 errorCode = OH_ImageEffect_Start(imageEffect); 1727 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1728 1729 // start with in and out(input equal to output) 1730 errorCode = OH_ImageEffect_SetOutputTextureId(imageEffect, input->GetName()); 1731 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1732 errorCode = OH_ImageEffect_Start(imageEffect); 1733 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1734 1735 // start with in and out 1736 std::shared_ptr<RenderTexture> output = renderEnv->RequestBuffer(1920, 1080, GL_RGBA8); 1737 errorCode = OH_ImageEffect_SetOutputTextureId(imageEffect, output->GetName()); 1738 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1739 errorCode = OH_ImageEffect_Start(imageEffect); 1740 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1741 renderEnv->Release(); 1742 renderEnv->ReleaseParam(); 1743 renderEnv = nullptr; 1744 } 1745 1746 /** 1747 * Feature: ImageEffect 1748 * Function: Test OH_ImageEffect with texture for abnormal input paramters. 1749 * SubFunction: NA 1750 * FunctionPoints: NA 1751 * EnvConditions: NA 1752 * CaseDescription: Test OH_ImageEffect with texture for abnormal input paramters 1753 */ 1754 1755 HWTEST_F(NativeImageEffectUnittest, OHImageEffectTexture002, TestSize.Level1) 1756 { 1757 std::shared_ptr<RenderEnvironment> renderEnv = std::make_shared<RenderEnvironment>(); 1758 renderEnv->Init(); 1759 renderEnv->BeginFrame(); 1760 1761 OH_ImageEffect *imageEffect = OH_ImageEffect_Create(IMAGE_EFFECT_NAME); 1762 ASSERT_NE(imageEffect, nullptr); __anonf138c2ac1002(OH_ImageEffect *imageEffect) 1763 std::shared_ptr<OH_ImageEffect> imageEffectPtr(imageEffect, [](OH_ImageEffect *imageEffect) { 1764 if (imageEffect != nullptr) { 1765 OH_ImageEffect_Release(imageEffect); 1766 } 1767 }); 1768 1769 OH_EffectFilter *filter = OH_ImageEffect_AddFilter(imageEffect, OH_EFFECT_CONTRAST_FILTER); 1770 ASSERT_NE(filter, nullptr); 1771 1772 ImageEffect_Any value; 1773 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1774 value.dataValue.floatValue = 100.f; 1775 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1776 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1777 1778 std::shared_ptr<RenderTexture> output = renderEnv->RequestBuffer(1920, 1080, GL_RGBA8); 1779 errorCode = OH_ImageEffect_SetOutputTextureId(imageEffect, output->GetName()); 1780 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1781 errorCode = OH_ImageEffect_Start(imageEffect); 1782 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1783 1784 std::shared_ptr<RenderTexture> input = renderEnv->RequestBuffer(1920, 1080, GL_RGBA8); 1785 ASSERT_EQ(OH_ImageEffect_SetInputTextureId(imageEffectPtr.get(), input->GetName(), 1786 ColorManager::ColorSpaceName::ADOBE_RGB), ImageEffect_ErrorCode::EFFECT_SUCCESS); 1787 errorCode = OH_ImageEffect_Start(imageEffect); 1788 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1789 1790 std::shared_ptr<RenderTexture> input_err = renderEnv->RequestBuffer(1920, 1080, GL_RGB16F); 1791 ASSERT_EQ(OH_ImageEffect_SetInputTextureId(imageEffectPtr.get(), input_err->GetName(), 1792 ColorManager::ColorSpaceName::SRGB), ImageEffect_ErrorCode::EFFECT_SUCCESS); 1793 errorCode = OH_ImageEffect_Start(imageEffect); 1794 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1795 renderEnv->Release(); 1796 renderEnv->ReleaseParam(); 1797 renderEnv = nullptr; 1798 } 1799 1800 /** 1801 * Feature: ImageEffect 1802 * Function: Test OH_EFilter with texture. 1803 * SubFunction: NA 1804 * FunctionPoints: NA 1805 * EnvConditions: NA 1806 * CaseDescription: Test OH_EFilter with texture 1807 */ 1808 1809 HWTEST_F(NativeImageEffectUnittest, OHEffectFilterRenderWithTexture001, TestSize.Level1) 1810 { 1811 std::shared_ptr<RenderEnvironment> renderEnv = std::make_shared<RenderEnvironment>(); 1812 renderEnv->Init(); 1813 renderEnv->BeginFrame(); 1814 OH_EffectFilter *filter = OH_EffectFilter_Create(OH_EFFECT_CONTRAST_FILTER); 1815 ASSERT_NE(filter, nullptr); 1816 ImageEffect_Any value; 1817 value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 1818 value.dataValue.floatValue = 100.f; 1819 ImageEffect_ErrorCode errorCode = OH_EffectFilter_SetValue(filter, KEY_FILTER_INTENSITY, &value); 1820 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1821 1822 errorCode = OH_EffectFilter_RenderWithTextureId(filter, 0, 0, ColorManager::ColorSpaceName::SRGB); 1823 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1824 1825 std::shared_ptr<RenderTexture> input = renderEnv->RequestBuffer(1920, 1080, GL_RGBA8); 1826 std::shared_ptr<RenderTexture> output = renderEnv->RequestBuffer(1920, 1080, GL_RGBA8); 1827 errorCode = OH_EffectFilter_RenderWithTextureId(filter, input->GetName(), input->GetName(), 1828 ColorManager::ColorSpaceName::SRGB); 1829 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1830 1831 errorCode = OH_EffectFilter_RenderWithTextureId(filter, input->GetName(), output->GetName(), 1832 ColorManager::ColorSpaceName::ADOBE_RGB); 1833 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1834 1835 std::shared_ptr<RenderTexture> input_error = renderEnv->RequestBuffer(1920, 1080, GL_RGB16F); 1836 errorCode = OH_EffectFilter_RenderWithTextureId(filter, input_error->GetName(), output->GetName(), 1837 ColorManager::ColorSpaceName::SRGB); 1838 ASSERT_NE(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1839 1840 errorCode = OH_EffectFilter_RenderWithTextureId(filter, input->GetName(), output->GetName(), 1841 ColorManager::ColorSpaceName::SRGB); 1842 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1843 errorCode = OH_EffectFilter_Release(filter); 1844 ASSERT_EQ(errorCode, ImageEffect_ErrorCode::EFFECT_SUCCESS); 1845 renderEnv->Release(); 1846 renderEnv->ReleaseParam(); 1847 renderEnv = nullptr; 1848 } 1849 1850 } // namespace Test 1851 } // namespace Effect 1852 } // namespace Media 1853 } // namespace OHOS 1854