• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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  *     http://www.apache.org/licenses/LICENSE-2.0
7  * Unless required by applicable law or agreed to in writing, software
8  * distributed under the License is distributed on an "AS IS" BASIS,
9  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10  * See the License for the specific language governing permissions and
11  * limitations under the License.
12  */
13 
14 #ifndef NODE_BASE_H
15 #define NODE_BASE_H
16 
17 #include <atomic>
18 #include "inode.h"
19 #include "buffer_manager.h"
20 #include "idevice_manager.h"
21 
22 namespace OHOS::Camera {
23 class PortBase : public IPort {
24 public:
PortBase(const std::string & name,const std::weak_ptr<INode> & n)25     PortBase(const std::string& name, const std::weak_ptr<INode>& n):
26         name_(name),
27         owner_(n)
28     {
29     }
30     ~PortBase() override = default;
31     std::string GetName() const override;
32     RetCode SetFormat(const PortFormat& format) override;
33     RetCode GetFormat(PortFormat& format) const override;
34     int32_t GetStreamId() const override;
35     RetCode Connect(const std::shared_ptr<IPort>& peer) override;
36     RetCode DisConnect() override;
37     int32_t Direction() const override;
38     std::shared_ptr<INode> GetNode() const override;
39     std::shared_ptr<IPort> Peer() const override;
40     virtual void DeliverBuffer(std::shared_ptr<IBuffer>& buffer) override;
41     virtual void DeliverBuffers(std::vector<std::shared_ptr<IBuffer>>& buffers) override;
42     void DeliverBuffers(std::shared_ptr<FrameSpec> frameSpec) override;
43     void DeliverBuffers(std::vector<std::shared_ptr<FrameSpec>> mergeVec) override;
44 protected:
45     std::string name_;
46     std::shared_ptr<IPort> peer_ = nullptr;
47     std::weak_ptr<INode> owner_;
48 };
49 
50 class NodeBase : public INode, public std::enable_shared_from_this<NodeBase> {
51 public:
NodeBase(const std::string & name,const std::string & type)52     NodeBase(const std::string& name, const std::string& type)
53         : name_(name)
54         , type_(type)
55     {
56     }
~NodeBase()57     ~NodeBase() override
58     {
59         for (const auto& it : portVec_) {
60             it->DisConnect();
61         }
62         portVec_.clear();
63     }
64 
65     std::string GetName() const override;
66     std::string GetType() const override;
67     std::shared_ptr<IPort> GetPort(const std::string& name) override;
68     RetCode Init(const int32_t streamId) override;
69     RetCode Start(const int32_t streamId) override;
70     RetCode Flush(const int32_t streamId) override;
71     RetCode Stop(const int32_t streamId) override;
72     RetCode Config(const int32_t streamId, const CaptureMeta& meta) override;
73     RetCode Capture(const int32_t streamId, const int32_t captureId) override;
74     RetCode CancelCapture(const int32_t streamId) override;
75     int32_t GetNumberOfInPorts() const override;
76     int32_t GetNumberOfOutPorts() const override;
77     std::vector<std::shared_ptr<IPort>> GetInPorts() const override;
78     std::vector<std::shared_ptr<IPort>> GetOutPorts() override;
79     std::shared_ptr<IPort> GetOutPortById(const int32_t id) override;
80     void SetCallBack(BufferCb c) override;
81     void DeliverBuffer(std::shared_ptr<IBuffer>& buffer) override;
82     void DeliverBuffers(std::vector<std::shared_ptr<IBuffer>>& buffers) override;
83 
84     virtual RetCode ProvideBuffers(std::shared_ptr<FrameSpec> frameSpec);
85     void DeliverBuffers(std::shared_ptr<FrameSpec> frameSpec) override;
86     void DeliverBuffers(std::vector<std::shared_ptr<FrameSpec>> mergeVec) override;
87 
88 protected:
89     std::string name_;
90     std::string type_;
91     std::vector<std::shared_ptr<IPort>> portVec_;
92 };
93 }
94 #endif
95 
96