• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "foundation/osal/thread/mutex.h"
28 #include "pipeline/core/error_code.h"
29 #include "pipeline/core/pipeline.h"
30 #include "plugin/common/plugin_types.h"
31 
32 namespace OHOS {
33 namespace Media {
34 namespace Pipeline {
35 class PipelineCore : public Pipeline {
36 public:
37     ~PipelineCore() override = default;
38 
39     void Init(EventReceiver* receiver, FilterCallback* callback) override;
40 
41     ErrorCode Prepare() override;
42 
43     ErrorCode Start() override;
44 
45     ErrorCode Pause() override;
46 
47     ErrorCode Resume() override;
48 
49     ErrorCode Stop() override;
50 
51     void FlushStart() override;
52 
53     void FlushEnd() override;
54 
55     void OnEvent(const Event& event) override;
56 
57     FilterState GetState();
58 
59     ErrorCode AddFilters(std::initializer_list<Filter*> filtersIn) override;
60     ErrorCode RemoveFilter(Filter* filter) override;
61     ErrorCode RemoveFilterChain(Filter* firstFilter) override;
62     ErrorCode LinkFilters(std::initializer_list<Filter*> filters) override;
63     ErrorCode LinkPorts(std::shared_ptr<OutPort> port1, std::shared_ptr<InPort> port2) override;
64 
65     void InitFilters(const std::vector<Filter*>& filters);
66 private:
67     void ReorderFilters();
68 
69     void NotifyEvent(const Event& event);
70 
71     size_t readyEventCnt_ {0};
72     FilterState state_ {FilterState::CREATED};
73     OSAL::Mutex mutex_ {};
74     std::vector<Filter*> filters_ {};
75     EventReceiver* eventReceiver_ {nullptr};
76     FilterCallback* filterCallback_ {nullptr};
77     std::vector<Filter*> filtersToRemove_ {};
78 };
79 } // namespace Pipeline
80 } // namespace Media
81 } // namespace OHOS
82 #endif // HISTREAMER_PIPELINE_CORE_PIPELINE_CORE_H
83