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 #ifndef IE_PIPELINE_CORE_FILTER_BASE_H 17 #define IE_PIPELINE_CORE_FILTER_BASE_H 18 19 #include <atomic> 20 21 #include "filter.h" 22 #include "filter_type.h" 23 #include "image_effect_marco_define.h" 24 25 #define GET_FILTER_NAME(T) #T 26 27 namespace OHOS { 28 namespace Media { 29 namespace Effect { 30 class FilterBase : public Filter { 31 public: 32 IMAGE_EFFECT_EXPORT explicit FilterBase(std::string name); 33 34 IMAGE_EFFECT_EXPORT ~FilterBase() override; 35 36 IMAGE_EFFECT_EXPORT void Initialize(EventReceiver *receiver) override; 37 38 IMAGE_EFFECT_EXPORT PInPort GetInPort(const std::string &name) override; 39 40 IMAGE_EFFECT_EXPORT POutPort GetOutPort(const std::string &name) override; 41 GetName()42 const std::string &GetName() override 43 { 44 return name_; 45 } 46 GetWorkModes()47 std::vector<WorkMode> GetWorkModes() override 48 { 49 return { WorkMode::PUSH }; 50 } 51 52 void Negotiate(const std::string& inPort, const std::shared_ptr<Capability> &capability, 53 std::shared_ptr<EffectContext> &context) override; 54 55 ErrorCode PushData(const std::string &inPort, const std::shared_ptr<EffectBuffer> &buffer, 56 std::shared_ptr<EffectContext> &context) override; 57 58 ErrorCode PullData(const std::string &outPort, std::shared_ptr<EffectBuffer> &data) override; 59 GetOwnerPipeline()60 const EventReceiver *GetOwnerPipeline() const override 61 { 62 return eventReceiver_; 63 } 64 65 IMAGE_EFFECT_EXPORT ErrorCode Prepare() override; 66 67 IMAGE_EFFECT_EXPORT ErrorCode Start() override; 68 SetParameter(int32_t key,const Media::Plugin::Any & value)69 ErrorCode SetParameter(int32_t key, const Media::Plugin::Any &value) override 70 { 71 return ErrorCode::ERR_UNIMPLEMENTED; 72 } 73 GetParameter(int32_t key,Media::Plugin::Any & value)74 ErrorCode GetParameter(int32_t key, Media::Plugin::Any &value) override 75 { 76 return ErrorCode::ERR_UNIMPLEMENTED; 77 } 78 79 IMAGE_EFFECT_EXPORT void UnlinkPrevFilters() override; 80 81 IMAGE_EFFECT_EXPORT std::vector<Filter *> GetNextFilters() override; 82 83 IMAGE_EFFECT_EXPORT std::vector<Filter *> GetPreFilters() override; 84 85 // Port调用此方法向Filter报告事件 86 IMAGE_EFFECT_EXPORT void OnEvent(const Event &event) override; 87 88 template <typename T> static T FindPort(const std::vector<T> &ports, const std::string &name); 89 90 protected: 91 IMAGE_EFFECT_EXPORT virtual void InitPorts(); 92 93 std::string NamePort(const std::string &mime); 94 95 /** 96 * Get in-port from routeMap_ by outPortName. 97 * 98 * @param outPortName out-port name 99 * @return null if not exists 100 */ 101 PInPort GetRouteInPort(const std::string &outPortName); 102 103 /** 104 * Get out-port from routeMap_ by inPortName. 105 * 106 * @param inPortName in-port name 107 * @return null if not exists 108 */ 109 POutPort GetRouteOutPort(const std::string &inPortName); 110 111 std::string name_; 112 113 std::atomic<FilterState> state_; 114 115 EventReceiver *eventReceiver_; 116 117 std::vector<PFilter> children_{}; 118 119 std::vector<PInPort> inPorts_{}; 120 121 std::vector<POutPort> outPorts_{}; 122 123 std::vector<PairPort> routeMap_{}; // inport -> outport 124 125 std::map<std::string, uint32_t> portTypeCntMap_{}; 126 127 FilterType filterType_{ FilterType::NONE }; 128 129 std::shared_ptr<EffectBuffer> sinkBuffer_{ nullptr }; 130 }; 131 } // namespace Effect 132 } // namespace Media 133 } // namespace OHOS 134 #endif 135