14d949f91Sopenharmony_ci/* 24d949f91Sopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd. 34d949f91Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44d949f91Sopenharmony_ci * you may not use this file except in compliance with the License. 54d949f91Sopenharmony_ci * You may obtain a copy of the License at 64d949f91Sopenharmony_ci * 74d949f91Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84d949f91Sopenharmony_ci * 94d949f91Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104d949f91Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114d949f91Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124d949f91Sopenharmony_ci * See the License for the specific language governing permissions and 134d949f91Sopenharmony_ci * limitations under the License. 144d949f91Sopenharmony_ci */ 154d949f91Sopenharmony_ci 164d949f91Sopenharmony_ci#include "gtest/gtest.h" 174d949f91Sopenharmony_ci 184d949f91Sopenharmony_ci#include "pipeline_core.h" 194d949f91Sopenharmony_ci#include "efilter_factory.h" 204d949f91Sopenharmony_ci#include "test_common.h" 214d949f91Sopenharmony_ci#include "filter_base.h" 224d949f91Sopenharmony_ci#include "transfer.h" 234d949f91Sopenharmony_ci 244d949f91Sopenharmony_ciusing namespace testing::ext; 254d949f91Sopenharmony_ci 264d949f91Sopenharmony_cinamespace OHOS { 274d949f91Sopenharmony_cinamespace Media { 284d949f91Sopenharmony_cinamespace Effect { 294d949f91Sopenharmony_cinamespace Test { 304d949f91Sopenharmony_ci 314d949f91Sopenharmony_ciclass TestEffectPipeline : public testing::Test { 324d949f91Sopenharmony_cipublic: 334d949f91Sopenharmony_ci TestEffectPipeline() = default; 344d949f91Sopenharmony_ci 354d949f91Sopenharmony_ci ~TestEffectPipeline() override = default; 364d949f91Sopenharmony_ci static void SetUpTestCase() {} 374d949f91Sopenharmony_ci 384d949f91Sopenharmony_ci static void TearDownTestCase() {} 394d949f91Sopenharmony_ci 404d949f91Sopenharmony_ci void SetUp() override{} 414d949f91Sopenharmony_ci 424d949f91Sopenharmony_ci void TearDown() override{} 434d949f91Sopenharmony_ci}; 444d949f91Sopenharmony_ci 454d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, EffectPipelineStandard001, TestSize.Level1) { 464d949f91Sopenharmony_ci std::shared_ptr<PipelineCore> pipeline = std::make_shared<PipelineCore>(); 474d949f91Sopenharmony_ci pipeline->Init(nullptr); 484d949f91Sopenharmony_ci 494d949f91Sopenharmony_ci std::vector<Filter *> filtersToPipeline; 504d949f91Sopenharmony_ci std::shared_ptr<EFilter> eFilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER); 514d949f91Sopenharmony_ci filtersToPipeline.push_back(eFilter.get()); 524d949f91Sopenharmony_ci 534d949f91Sopenharmony_ci ErrorCode result = pipeline->AddFilters(filtersToPipeline); 544d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 554d949f91Sopenharmony_ci 564d949f91Sopenharmony_ci std::shared_ptr<EFilter> contrastEFilter = EFilterFactory::Instance()->Create(CONTRAST_EFILTER); 574d949f91Sopenharmony_ci result = pipeline->AddFilter(contrastEFilter.get()); 584d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 594d949f91Sopenharmony_ci 604d949f91Sopenharmony_ci result = pipeline->LinkFilters(filtersToPipeline); 614d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 624d949f91Sopenharmony_ci 634d949f91Sopenharmony_ci result = pipeline->RemoveFilter(eFilter.get()); 644d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 654d949f91Sopenharmony_ci 664d949f91Sopenharmony_ci result = pipeline->RemoveFilterChain(contrastEFilter.get()); 674d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 684d949f91Sopenharmony_ci} 694d949f91Sopenharmony_ci 704d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseNamePort001, TestSize.Level1) 714d949f91Sopenharmony_ci{ 724d949f91Sopenharmony_ci FilterBase filterBase("testName_"); 734d949f91Sopenharmony_ci std::string mime = "image/png"; 744d949f91Sopenharmony_ci std::string expectedPortName = "image_1"; 754d949f91Sopenharmony_ci std::string portName = filterBase.NamePort(mime); 764d949f91Sopenharmony_ci 774d949f91Sopenharmony_ci EXPECT_EQ(portName, expectedPortName); 784d949f91Sopenharmony_ci EXPECT_EQ(filterBase.portTypeCntMap_["testName_image"], 1); 794d949f91Sopenharmony_ci 804d949f91Sopenharmony_ci mime = ""; 814d949f91Sopenharmony_ci expectedPortName = "default_1"; 824d949f91Sopenharmony_ci portName = filterBase.NamePort(mime); 834d949f91Sopenharmony_ci EXPECT_EQ(portName, expectedPortName); 844d949f91Sopenharmony_ci EXPECT_EQ(filterBase.portTypeCntMap_["testName_default"], 1); 854d949f91Sopenharmony_ci} 864d949f91Sopenharmony_ci 874d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseGetRouteInPort001, TestSize.Level1) 884d949f91Sopenharmony_ci{ 894d949f91Sopenharmony_ci FilterBase filterBase("testNmae_"); 904d949f91Sopenharmony_ci PInPort result = filterBase.GetRouteInPort("test"); 914d949f91Sopenharmony_ci EXPECT_EQ(result, nullptr); 924d949f91Sopenharmony_ci 934d949f91Sopenharmony_ci filterBase.routeMap_.emplace_back("test", "test"); 944d949f91Sopenharmony_ci result = filterBase.GetRouteInPort("test"); 954d949f91Sopenharmony_ci EXPECT_EQ(result, nullptr); 964d949f91Sopenharmony_ci} 974d949f91Sopenharmony_ci 984d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseGetRouteOutPort001, TestSize.Level1) 994d949f91Sopenharmony_ci{ 1004d949f91Sopenharmony_ci FilterBase filterBase("testNmae_"); 1014d949f91Sopenharmony_ci POutPort result = filterBase.GetRouteOutPort("test"); 1024d949f91Sopenharmony_ci EXPECT_EQ(result, nullptr); 1034d949f91Sopenharmony_ci 1044d949f91Sopenharmony_ci filterBase.routeMap_.emplace_back("test", "test"); 1054d949f91Sopenharmony_ci result = filterBase.GetRouteOutPort("test"); 1064d949f91Sopenharmony_ci EXPECT_EQ(result, nullptr); 1074d949f91Sopenharmony_ci} 1084d949f91Sopenharmony_ci 1094d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseOnEvent001, TestSize.Level1) 1104d949f91Sopenharmony_ci{ 1114d949f91Sopenharmony_ci FilterBase filterBase("testNmae_"); 1124d949f91Sopenharmony_ci const Event &event = Event{ "name_", EventType::EVENT_COMPLETE, { nullptr } }; 1134d949f91Sopenharmony_ci filterBase.OnEvent(event); 1144d949f91Sopenharmony_ci 1154d949f91Sopenharmony_ci EventReceiver *eventReceiver{ nullptr }; 1164d949f91Sopenharmony_ci filterBase.eventReceiver_ = eventReceiver; 1174d949f91Sopenharmony_ci filterBase.OnEvent(event); 1184d949f91Sopenharmony_ci} 1194d949f91Sopenharmony_ci 1204d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseGetNextFilters001, TestSize.Level1) 1214d949f91Sopenharmony_ci{ 1224d949f91Sopenharmony_ci FilterBase filterBase("testNmae_"); 1234d949f91Sopenharmony_ci InfoTransfer *filterPtr = nullptr; 1244d949f91Sopenharmony_ci OutPort port(filterPtr); 1254d949f91Sopenharmony_ci auto outPort = std::make_shared<OutPort>(port); 1264d949f91Sopenharmony_ci filterBase.outPorts_.push_back(outPort); 1274d949f91Sopenharmony_ci std::vector<Filter *> filters = filterBase.GetNextFilters(); 1284d949f91Sopenharmony_ci EXPECT_TRUE(filters.empty()); 1294d949f91Sopenharmony_ci} 1304d949f91Sopenharmony_ci 1314d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, FilterBaseGetPreFilters001, TestSize.Level1) 1324d949f91Sopenharmony_ci{ 1334d949f91Sopenharmony_ci FilterBase filterBase("testNmae_"); 1344d949f91Sopenharmony_ci InfoTransfer *filterPtr = nullptr; 1354d949f91Sopenharmony_ci InPort port(filterPtr); 1364d949f91Sopenharmony_ci auto inPort = std::make_shared<InPort>(port); 1374d949f91Sopenharmony_ci filterBase.inPorts_.push_back(inPort); 1384d949f91Sopenharmony_ci std::vector<Filter *> filters = filterBase.GetPreFilters(); 1394d949f91Sopenharmony_ci EXPECT_TRUE(filters.empty()); 1404d949f91Sopenharmony_ci 1414d949f91Sopenharmony_ci filterBase.UnlinkPrevFilters(); 1424d949f91Sopenharmony_ci 1434d949f91Sopenharmony_ci auto result = filterBase.FindPort(filterBase.inPorts_, "test"); 1444d949f91Sopenharmony_ci EXPECT_EQ(result, nullptr); 1454d949f91Sopenharmony_ci} 1464d949f91Sopenharmony_ci 1474d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, InPortPullData001, TestSize.Level1) 1484d949f91Sopenharmony_ci{ 1494d949f91Sopenharmony_ci std::shared_ptr<BufferInfo> bufferInfo = std::make_unique<BufferInfo>(); 1504d949f91Sopenharmony_ci void *add = nullptr; 1514d949f91Sopenharmony_ci std::shared_ptr<ExtraInfo> extraInfo = std::make_unique<ExtraInfo>(); 1524d949f91Sopenharmony_ci std::shared_ptr<EffectBuffer> data = std::make_shared<EffectBuffer>(bufferInfo, add, extraInfo); 1534d949f91Sopenharmony_ci 1544d949f91Sopenharmony_ci InfoTransfer *filterPtr = nullptr; 1554d949f91Sopenharmony_ci InPort port(filterPtr); 1564d949f91Sopenharmony_ci auto inPort = std::make_shared<InPort>(port); 1574d949f91Sopenharmony_ci 1584d949f91Sopenharmony_ci std::shared_ptr<InPort> prevPort = std::make_shared<InPort>(nullptr); 1594d949f91Sopenharmony_ci inPort->prevPort_ = prevPort; 1604d949f91Sopenharmony_ci 1614d949f91Sopenharmony_ci ErrorCode result = inPort->PullData(data); 1624d949f91Sopenharmony_ci ASSERT_EQ(result, ErrorCode::ERR_PIPELINE_INVALID_FILTER_PORT); 1634d949f91Sopenharmony_ci} 1644d949f91Sopenharmony_ci 1654d949f91Sopenharmony_ciHWTEST_F(TestEffectPipeline, InPortActivate001, TestSize.Level1) 1664d949f91Sopenharmony_ci{ 1674d949f91Sopenharmony_ci std::shared_ptr<EFilter> eFilter = EFilterFactory::Instance()->Create(BRIGHTNESS_EFILTER); 1684d949f91Sopenharmony_ci InPort port(eFilter.get()); 1694d949f91Sopenharmony_ci auto inPort = std::make_shared<InPort>(port); 1704d949f91Sopenharmony_ci 1714d949f91Sopenharmony_ci std::shared_ptr<InPort> prevPort = std::make_shared<InPort>(port); 1724d949f91Sopenharmony_ci inPort->prevPort_ = prevPort; 1734d949f91Sopenharmony_ci 1744d949f91Sopenharmony_ci std::vector<WorkMode> modes; 1754d949f91Sopenharmony_ci WorkMode outMode; 1764d949f91Sopenharmony_ci ErrorCode result = inPort->Activate(modes, outMode); 1774d949f91Sopenharmony_ci ASSERT_EQ(result, ErrorCode::ERR_INVALID_PARAMETER_VALUE); 1784d949f91Sopenharmony_ci} 1794d949f91Sopenharmony_ci} 1804d949f91Sopenharmony_ci} 1814d949f91Sopenharmony_ci} 1824d949f91Sopenharmony_ci}