• 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 "buffer_manager.h"
18 #include "idevice_manager.h"
19 #include "inode.h"
20 #include <mutex>
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) : name_(name), owner_(n)
26     {
27     }
28     ~PortBase() override = default;
29     std::string GetName() const override;
30     RetCode SetFormat(const PortFormat& format) override;
31     RetCode GetFormat(PortFormat& format) const override;
32     int32_t GetStreamId() const override;
33     RetCode Connect(const std::shared_ptr<IPort>& peer) override;
34     RetCode DisConnect() override;
35     int32_t Direction() const override;
36     std::shared_ptr<INode> GetNode() const override;
37     std::shared_ptr<IPort> Peer() const override;
38     void DeliverBuffer(std::shared_ptr<IBuffer>& buffer) override;
39     void DeliverBuffers(std::vector<std::shared_ptr<IBuffer>>& buffers) override;
40     void DeliverBuffers(std::shared_ptr<FrameSpec> frameSpec) override;
41     void DeliverBuffers(std::vector<std::shared_ptr<FrameSpec>> mergeVec) override;
42 protected:
43     std::string name_;
44     std::shared_ptr<IPort> peer_ = nullptr;
45     std::weak_ptr<INode> owner_;
46 };
47 
48 class NodeBase : public INode, public std::enable_shared_from_this<NodeBase> {
49 public:
NodeBase(const std::string & name,const std::string & type,const std::string & cameraId)50     NodeBase(const std::string& name, const std::string& type, const std::string &cameraId)
51         : name_(name), type_(type), cameraId_(cameraId)
52     {
53     }
~NodeBase()54     ~NodeBase() override
55     {
56         CAMERA_LOGI("node dtor enter\n");
57         for (const auto& it : portVec_) {
58             it->DisConnect();
59         }
60         portVec_.clear();
61     }
62 
63     std::string GetName() const override;
64     std::string GetType() const override;
65     std::shared_ptr<IPort> GetPort(const std::string& name) override;
66     RetCode Init(const int32_t streamId) override;
67     RetCode Start(const int32_t streamId) override;
68     RetCode Flush(const int32_t streamId) override;
69     RetCode SetCallback() override;
70     RetCode Stop(const int32_t streamId) override;
71     RetCode Config(const int32_t streamId, const CaptureMeta& meta) override;
72     RetCode Capture(const int32_t streamId, const int32_t captureId) override;
73     RetCode CancelCapture(const int32_t streamId) override;
74     int32_t GetNumberOfInPorts() const override;
75     int32_t GetNumberOfOutPorts() const override;
76     std::vector<std::shared_ptr<IPort>> GetInPorts() const override;
77     std::vector<std::shared_ptr<IPort>> GetOutPorts() override;
78     std::shared_ptr<IPort> GetOutPortById(const int32_t id) override;
79     void SetCallBack(BufferCb c) override;
80     void DeliverBuffer(std::shared_ptr<IBuffer>& buffer) override;
81     void DeliverBuffers(std::vector<std::shared_ptr<IBuffer>>& buffers) override;
82 
83     virtual RetCode ProvideBuffers(std::shared_ptr<FrameSpec> frameSpec);
84     void DeliverBuffers(std::shared_ptr<FrameSpec> frameSpec) override;
85     void DeliverBuffers(std::vector<std::shared_ptr<FrameSpec>> mergeVec) override;
86 
87 protected:
88     std::string name_;
89     std::string type_;
90     std::string cameraId_;
91     std::vector<std::shared_ptr<IPort>> portVec_;
92     mutable std::mutex portLock_;
93 };
94 }
95 #endif
96 
97