NVIDIA DeepStream SDK API Reference

7.0 Release
abi_dataprocess.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: LicenseRef-NvidiaProprietary
4  *
5  * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
6  * property and proprietary rights in and to this material, related
7  * documentation and any modifications thereto. Any use, reproduction,
8  * disclosure or distribution of this material and related documentation
9  * without an express license agreement from NVIDIA CORPORATION or
10  * its affiliates is strictly prohibited.
11  */
12 
13 
14 #ifndef _DS3D_COMMON_ABI_PROCESS_H
15 #define _DS3D_COMMON_ABI_PROCESS_H
16 
17 #include <ds3d/common/common.h>
18 #include <ds3d/common/abi_obj.h>
19 #include <ds3d/common/abi_window.h>
20 
21 namespace ds3d {
22 
50 // abiDataProcess state in runtime
51 enum class State : int {
52  kNone = 0,
53  kStarting,
54  kRunning,
55  kStopped,
56 };
57 
58 enum class MixerUpdate : int { kPortAdded = 0, kPortRemoved = 1 };
59 
60 // abiDataProcess port for input and output directions
61 enum class CapsPort : int {
62  kInput = 0,
63  kOutput,
64 };
65 
66 // Process Interface, all abi processor must derived from abiProcess
67 class abiProcess {
68 public:
69  abiProcess() = default;
70  virtual ~abiProcess() = default;
71  // set application user data
72  virtual void setUserData_i(const abiRefAny* userdata) = 0;
73  // get application user data back, abiProcess continues keeping the ref copy
74  // untill another setuserData_i called or abiProcess destroyed
75  virtual const abiRefAny* getUserData_i() const = 0;
76  // set callback function when error happens or status changed.
77  virtual void setErrorCallback_i(const abiErrorCB& cb) = 0;
78  // check process state, e.g. whether it is in kRunning or kStopped
79  virtual State state_i() const = 0;
80  // start the process, before start, the state is kNone,
81  // during the start progress, the state is kStarting.
82  // Once start successfully, the state would became kRunning.
83  virtual ErrCode start_i(const char* configStr, uint32_t strLen, const char* path) = 0;
84  // stop the whole process and stop all resources.
85  // implementation will check the state, if it is not in kRunning/kStarting mode, will
86  // do nothing and return ErrCode::kGood
87  virtual ErrCode stop_i() = 0;
88  // get caps string for CapsPort::kInput or CapsPort::kOutput
89  virtual const char* getCaps_i(CapsPort p) const = 0;
90 
91  // flush all unprocessed data, specificall when End-Of-Stream received
92  virtual ErrCode flush_i() = 0;
93 
94 private:
95  DS3D_DISABLE_CLASS_COPY(abiProcess);
96 };
97 
98 // ABI Interface for dataloader
99 class abiDataLoader : public abiProcess {
100 public:
101  abiDataLoader() = default;
102  ~abiDataLoader() override = default;
103  // read data in sync mode
104  virtual ErrCode readData_i(abiRefDataMap*& datamap) = 0;
105  // read data in async mode, datamap would be invoked in dataReadyCb once it is ready.
106  virtual ErrCode readDataAsync_i(const abiOnDataCB* dataReadyCb) = 0;
107 };
108 
109 // ABI Interface for dataFilter
110 class abiDataFilter : public abiProcess {
111 public:
112  abiDataFilter() = default;
113  ~abiDataFilter() override = default;
114  // render_i could be in sync or async mode
115  virtual ErrCode process_i(
116  const abiRefDataMap* inputData, const abiOnDataCB* outputDataCb,
117  const abiOnDataCB* dataConsumedCb) = 0;
118 };
119 
120 // ABI Interface for dataBridge
121 class abiDataBridge : public abiProcess {
122 public:
123  abiDataBridge() = default;
124  ~abiDataBridge() override = default;
125  // render_i could be in sync or async mode
126  virtual ErrCode process_i(
127  const struct VideoBridge2dInput* inputData, const abiOnDataCB* outputDataCb,
128  const abiOnBridgeDataCB* dataConsumedCb) = 0;
129 };
130 
131 // ABI Interface for dataRender
132 class abiDataRender : public abiProcess {
133 public:
134  abiDataRender() = default;
135  ~abiDataRender() override = default;
136  // get native created window, user can get window when state_i() == State::kRunning
137  virtual const abiRefWindow* getWindow_i() const = 0;
138 
139  // prepare some dynamic resource when 1st buffer is coming
140  virtual ErrCode preroll_i(const abiRefDataMap* inputData) = 0;
141  // render_i could be in sync or async mode
142  virtual ErrCode render_i(const abiRefDataMap* inputData, const abiOnDataCB* dataDoneCb) = 0;
143 };
144 
145 // ABI Interface for dataMixer
146 class abiDataMixer : public abiProcess {
147 public:
148  abiDataMixer() = default;
149  ~abiDataMixer() override = default;
150  virtual ErrCode process_i(
151  const int portId,
152  const abiRefDataMap* inputData,
153  const abiOnDataCB* dataConsumedCb) = 0;
159  virtual ErrCode setOutputCb_i(
160  const abiOnDataCB* outputDataCb) = 0;
161  virtual ErrCode updateInput_i(int portId, MixerUpdate updateType) = 0;
162 };
163 
164 // raw reference pointer for abiDataLoader
166 
167 // raw reference pointer for abiDataFilter
169 
170 // raw reference pointer for abiDataBridge
172 
173 // raw reference pointer for abiDataRender
175 
176 // raw reference pointer for abiDataMixer
178 
179 } // namespace ds3d
180 
181 #endif // _DS3D_COMMON_ABI_PROCESS_H
ds3d::abiDataBridge::~abiDataBridge
~abiDataBridge() override=default
ds3d::abiDataBridge
Definition: abi_dataprocess.h:121
ds3d::abiDataMixer::process_i
virtual ErrCode process_i(const int portId, const abiRefDataMap *inputData, const abiOnDataCB *dataConsumedCb)=0
ds3d::CapsPort
CapsPort
Definition: abi_dataprocess.h:61
ds3d::abiProcess::start_i
virtual ErrCode start_i(const char *configStr, uint32_t strLen, const char *path)=0
ds3d::abiProcess::abiProcess
abiProcess()=default
ds3d::abiDataLoader::abiDataLoader
abiDataLoader()=default
ds3d::abiDataRender::abiDataRender
abiDataRender()=default
ds3d::abiDataMixer::setOutputCb_i
virtual ErrCode setOutputCb_i(const abiOnDataCB *outputDataCb)=0
to configure mixer framerate and output callback
ds3d::abiRefDataFilter
abiRefT< abiDataFilter > abiRefDataFilter
Definition: abi_dataprocess.h:168
ds3d::VideoBridge2dInput
Definition: idatatype.h:152
ds3d::abiProcess::getUserData_i
virtual const abiRefAny * getUserData_i() const =0
ds3d::MixerUpdate
MixerUpdate
Definition: abi_dataprocess.h:58
ds3d::abiRefDataRender
abiRefT< abiDataRender > abiRefDataRender
Definition: abi_dataprocess.h:174
abi_window.h
ds3d::abiDataLoader::~abiDataLoader
~abiDataLoader() override=default
ds3d::abiProcess
Definition: abi_dataprocess.h:67
ds3d::abiDataLoader
Definition: abi_dataprocess.h:99
ds3d::CapsPort::kInput
@ kInput
ds3d::abiRefDataLoader
abiRefT< abiDataLoader > abiRefDataLoader
Definition: abi_dataprocess.h:165
ds3d::abiDataLoader::readData_i
virtual ErrCode readData_i(abiRefDataMap *&datamap)=0
ds3d::abiDataFilter::~abiDataFilter
~abiDataFilter() override=default
ds3d::State::kStopped
@ kStopped
ds3d::abiDataRender
Definition: abi_dataprocess.h:132
ds3d::abiDataMixer::updateInput_i
virtual ErrCode updateInput_i(int portId, MixerUpdate updateType)=0
ds3d::abiRefT< void >
ds3d::MixerUpdate::kPortRemoved
@ kPortRemoved
ds3d::abiProcess::flush_i
virtual ErrCode flush_i()=0
ds3d::abiDataBridge::process_i
virtual ErrCode process_i(const struct VideoBridge2dInput *inputData, const abiOnDataCB *outputDataCb, const abiOnBridgeDataCB *dataConsumedCb)=0
ds3d::ErrCode
ErrCode
Definition: common.h:43
ds3d::abiDataFilter
Definition: abi_dataprocess.h:110
ds3d::State::kStarting
@ kStarting
ds3d::abiProcess::stop_i
virtual ErrCode stop_i()=0
ds3d::MixerUpdate::kPortAdded
@ kPortAdded
ds3d::abiRefDataBridge
abiRefT< abiDataBridge > abiRefDataBridge
Definition: abi_dataprocess.h:171
ds3d::abiDataMixer::~abiDataMixer
~abiDataMixer() override=default
ds3d::abiRefDataMixer
abiRefT< abiDataMixer > abiRefDataMixer
Definition: abi_dataprocess.h:177
ds3d::abiDataRender::render_i
virtual ErrCode render_i(const abiRefDataMap *inputData, const abiOnDataCB *dataDoneCb)=0
ds3d::abiDataFilter::abiDataFilter
abiDataFilter()=default
ds3d::abiProcess::setUserData_i
virtual void setUserData_i(const abiRefAny *userdata)=0
ds3d::abiDataMixer
Definition: abi_dataprocess.h:146
ds3d::State
State
All custom-libs need create the abi reference for DataLoader, DataRender, and DataFilter.
Definition: abi_dataprocess.h:51
ds3d::abiDataRender::preroll_i
virtual ErrCode preroll_i(const abiRefDataMap *inputData)=0
common.h
ds3d::CapsPort::kOutput
@ kOutput
ds3d::abiProcess::state_i
virtual State state_i() const =0
ds3d::State::kNone
@ kNone
ds3d::abiDataLoader::readDataAsync_i
virtual ErrCode readDataAsync_i(const abiOnDataCB *dataReadyCb)=0
abi_obj.h
ds3d::abiDataBridge::abiDataBridge
abiDataBridge()=default
ds3d::State::kRunning
@ kRunning
ds3d::abiDataMixer::abiDataMixer
abiDataMixer()=default
ds3d::abiDataRender::getWindow_i
virtual const abiRefWindow * getWindow_i() const =0
ds3d
Definition: lidar_3d_datatype.h:35
ds3d::abiCallBackT
Definition: abi_obj.h:71
ds3d::abiProcess::~abiProcess
virtual ~abiProcess()=default
ds3d::abiDataRender::~abiDataRender
~abiDataRender() override=default
ds3d::abiDataFilter::process_i
virtual ErrCode process_i(const abiRefDataMap *inputData, const abiOnDataCB *outputDataCb, const abiOnDataCB *dataConsumedCb)=0
ds3d::abiProcess::setErrorCallback_i
virtual void setErrorCallback_i(const abiErrorCB &cb)=0
ds3d::abiProcess::getCaps_i
virtual const char * getCaps_i(CapsPort p) const =0