1 /* 2 * Copyright (c) 2021-2021 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 HISTREAMER_PIPELINE_CORE_PIPELINE_CORE_H 17 #define HISTREAMER_PIPELINE_CORE_PIPELINE_CORE_H 18 19 #include <algorithm> 20 #include <atomic> 21 #include <functional> 22 #include <initializer_list> 23 #include <memory> 24 #include <string> 25 #include <vector> 26 #include <stack> 27 28 #include "filter_base.h" 29 #include "foundation/error_code.h" 30 #include "osal/thread/mutex.h" 31 #include "utils/utils.h" 32 #include "plugin/common/plugin_types.h" 33 #include "plugin/core/plugin_meta.h" 34 #include "pipeline.h" 35 36 namespace OHOS { 37 namespace Media { 38 namespace Pipeline { 39 class MetaBundle { 40 public: 41 MetaBundle() = default; 42 ~MetaBundle() = default; GetGlobalMeta()43 std::shared_ptr<const Plugin::Meta> GetGlobalMeta() 44 { 45 return globalMeta_; 46 } 47 48 std::shared_ptr<const Plugin::Meta> GeTrackMeta(int32_t trackId); 49 50 void UpdateGlobalMeta(const Plugin::Meta& meta); 51 52 void UpdateTrackMeta(const Plugin::Meta& meta); 53 54 private: 55 std::shared_ptr<Plugin::Meta> globalMeta_; 56 std::vector<std::shared_ptr<Plugin::Meta>> trackMeta_; 57 }; 58 59 class PipelineCore : public Pipeline { 60 public: 61 explicit PipelineCore(const std::string& name = "pipeline_core"); 62 63 ~PipelineCore() override = default; 64 65 const std::string& GetName() override; 66 67 const EventReceiver* GetOwnerPipeline() const override; 68 69 void Init(EventReceiver* receiver, FilterCallback* callback) override; 70 71 ErrorCode Prepare() override; 72 73 ErrorCode Start() override; 74 75 ErrorCode Pause() override; 76 77 ErrorCode Resume() override; 78 79 ErrorCode Stop() override; 80 81 void FlushStart() override; 82 83 void FlushEnd() override; 84 85 FilterState GetState(); 86 87 ErrorCode AddFilters(std::initializer_list<Filter*> filters) override; 88 ErrorCode RemoveFilter(Filter* filter) override; 89 ErrorCode RemoveFilterChain(Filter* firstFilter) override; 90 ErrorCode LinkFilters(std::initializer_list<Filter*> filters) override; 91 ErrorCode LinkPorts(std::shared_ptr<OutPort> port1, std::shared_ptr<InPort> port2) override; 92 93 void OnEvent(const Event& event) override; 94 UnlinkPrevFilters()95 void UnlinkPrevFilters() override 96 { 97 } GetNextFilters()98 std::vector<Filter*> GetNextFilters() override 99 { 100 return {}; 101 } GetPreFilters()102 std::vector<Filter*> GetPreFilters() override 103 { 104 return {}; 105 } PushData(const std::string & inPort,AVBufferPtr buffer,int64_t offset)106 ErrorCode PushData(const std::string& inPort, AVBufferPtr buffer, int64_t offset) override 107 { 108 UNUSED_VARIABLE(inPort); 109 UNUSED_VARIABLE(buffer); 110 UNUSED_VARIABLE(offset); 111 return ErrorCode::ERROR_UNIMPLEMENTED; 112 } PullData(const std::string & outPort,uint64_t offset,size_t size,AVBufferPtr & data)113 ErrorCode PullData(const std::string& outPort, uint64_t offset, size_t size, AVBufferPtr& data) override 114 { 115 UNUSED_VARIABLE(outPort); 116 UNUSED_VARIABLE(offset); 117 UNUSED_VARIABLE(size); 118 UNUSED_VARIABLE(data); 119 return ErrorCode::ERROR_UNIMPLEMENTED; 120 } GetWorkModes()121 std::vector<WorkMode> GetWorkModes() override 122 { 123 return {WorkMode::PUSH}; 124 } 125 GetInPort(const std::string & name)126 PInPort GetInPort(const std::string& name) override 127 { 128 UNUSED_VARIABLE(name); 129 return nullptr; 130 } GetOutPort(const std::string & name)131 POutPort GetOutPort(const std::string& name) override 132 { 133 UNUSED_VARIABLE(name); 134 return nullptr; 135 } 136 SetParameter(int32_t key,const Plugin::Any & value)137 ErrorCode SetParameter(int32_t key, const Plugin::Any& value) override 138 { 139 UNUSED_VARIABLE(key); 140 UNUSED_VARIABLE(value); 141 return ErrorCode::ERROR_UNIMPLEMENTED; 142 } GetParameter(int32_t key,Plugin::Any & value)143 ErrorCode GetParameter(int32_t key, Plugin::Any& value) override 144 { 145 UNUSED_VARIABLE(key); 146 UNUSED_VARIABLE(value); 147 return ErrorCode::ERROR_UNIMPLEMENTED; 148 } 149 150 void InitFilters(const std::vector<Filter*>& filters); 151 GetMetaBundle()152 std::shared_ptr<MetaBundle> GetMetaBundle() 153 { 154 return metaBundle_; 155 } 156 157 private: 158 void ReorderFilters(); 159 160 std::string name_; 161 size_t readyEventCnt_ {0}; 162 FilterState state_ {FilterState::CREATED}; 163 OSAL::Mutex mutex_ {}; 164 std::vector<Filter*> filters_ {}; 165 EventReceiver* eventReceiver_; 166 FilterCallback* filterCallback_; 167 std::shared_ptr<MetaBundle> metaBundle_; 168 std::vector<Filter*> filtersToRemove_ {}; 169 }; 170 } // namespace Pipeline 171 } // namespace Media 172 } // namespace OHOS 173 #endif // HISTREAMER_PIPELINE_CORE_PIPELINE_CORE_H 174