NVIDIA DeepStream SDK API Reference

9.1 Release
9.1/sources/includes/ds3d/common/abi_dataprocess.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #ifndef _DS3D_COMMON_ABI_PROCESS_H
19 #define _DS3D_COMMON_ABI_PROCESS_H
20 
21 #include <ds3d/common/common.h>
22 #include <ds3d/common/abi_obj.h>
23 #include <ds3d/common/abi_window.h>
24 
25 namespace ds3d {
26 
54 // abiDataProcess state in runtime
55 enum class State : int {
56  kNone = 0,
57  kStarting,
58  kRunning,
59  kStopped,
60 };
61 
62 enum class MixerUpdate : int { kPortAdded = 0, kPortRemoved = 1 };
63 
64 // abiDataProcess port for input and output directions
65 enum class CapsPort : int {
66  kInput = 0,
67  kOutput,
68 };
69 
70 // Process Interface, all abi processor must derived from abiProcess
71 class abiProcess {
72 public:
73  abiProcess() = default;
74  virtual ~abiProcess() = default;
75  // set application user data
76  virtual void setUserData_i(const abiRefAny* userdata) = 0;
77  // get application user data back, abiProcess continues keeping the ref copy
78  // untill another setuserData_i called or abiProcess destroyed
79  virtual const abiRefAny* getUserData_i() const = 0;
80  // set callback function when error happens or status changed.
81  virtual void setErrorCallback_i(const abiErrorCB& cb) = 0;
82  // check process state, e.g. whether it is in kRunning or kStopped
83  virtual State state_i() const = 0;
84  // start the process, before start, the state is kNone,
85  // during the start progress, the state is kStarting.
86  // Once start successfully, the state would became kRunning.
87  virtual ErrCode start_i(const char* configStr, uint32_t strLen, const char* path) = 0;
88  // stop the whole process and stop all resources.
89  // implementation will check the state, if it is not in kRunning/kStarting mode, will
90  // do nothing and return ErrCode::kGood
91  virtual ErrCode stop_i() = 0;
92  // get caps string for CapsPort::kInput or CapsPort::kOutput
93  virtual const char* getCaps_i(CapsPort p) const = 0;
94 
95  // flush all unprocessed data, specificall when End-Of-Stream received
96  virtual ErrCode flush_i() = 0;
97 
98 private:
99  DS3D_DISABLE_CLASS_COPY(abiProcess);
100 };
101 
102 // ABI Interface for dataloader
103 class abiDataLoader : public abiProcess {
104 public:
105  abiDataLoader() = default;
106  ~abiDataLoader() override = default;
107  // read data in sync mode
108  virtual ErrCode readData_i(abiRefDataMap*& datamap) = 0;
109  // read data in async mode, datamap would be invoked in dataReadyCb once it is ready.
110  virtual ErrCode readDataAsync_i(const abiOnDataCB* dataReadyCb) = 0;
111 };
112 
113 // ABI Interface for dataFilter
114 class abiDataFilter : public abiProcess {
115 public:
116  abiDataFilter() = default;
117  ~abiDataFilter() override = default;
118  // render_i could be in sync or async mode
119  virtual ErrCode process_i(
120  const abiRefDataMap* inputData, const abiOnDataCB* outputDataCb,
121  const abiOnDataCB* dataConsumedCb) = 0;
122 };
123 
124 // ABI Interface for dataBridge
125 class abiDataBridge : public abiProcess {
126 public:
127  abiDataBridge() = default;
128  ~abiDataBridge() override = default;
129  // render_i could be in sync or async mode
130  virtual ErrCode process_i(
131  const struct VideoBridge2dInput* inputData, const abiOnDataCB* outputDataCb,
132  const abiOnBridgeDataCB* dataConsumedCb) = 0;
133 };
134 
135 // ABI Interface for dataRender
136 class abiDataRender : public abiProcess {
137 public:
138  abiDataRender() = default;
139  ~abiDataRender() override = default;
140  // get native created window, user can get window when state_i() == State::kRunning
141  virtual const abiRefWindow* getWindow_i() const = 0;
142 
143  // prepare some dynamic resource when 1st buffer is coming
144  virtual ErrCode preroll_i(const abiRefDataMap* inputData) = 0;
145  // render_i could be in sync or async mode
146  virtual ErrCode render_i(const abiRefDataMap* inputData, const abiOnDataCB* dataDoneCb) = 0;
147 };
148 
149 // ABI Interface for dataMixer
150 class abiDataMixer : public abiProcess {
151 public:
152  abiDataMixer() = default;
153  ~abiDataMixer() override = default;
154  virtual ErrCode process_i(
155  const int portId,
156  const abiRefDataMap* inputData,
157  const abiOnDataCB* dataConsumedCb) = 0;
163  virtual ErrCode setOutputCb_i(
164  const abiOnDataCB* outputDataCb) = 0;
165  virtual ErrCode updateInput_i(int portId, MixerUpdate updateType) = 0;
166 };
167 
168 // raw reference pointer for abiDataLoader
169 typedef abiRefT<abiDataLoader> abiRefDataLoader;
170 
171 // raw reference pointer for abiDataFilter
172 typedef abiRefT<abiDataFilter> abiRefDataFilter;
173 
174 // raw reference pointer for abiDataBridge
175 typedef abiRefT<abiDataBridge> abiRefDataBridge;
176 
177 // raw reference pointer for abiDataRender
178 typedef abiRefT<abiDataRender> abiRefDataRender;
179 
180 // raw reference pointer for abiDataMixer
181 typedef abiRefT<abiDataMixer> abiRefDataMixer;
182 
183 } // namespace ds3d
184 
185 #endif // _DS3D_COMMON_ABI_PROCESS_H
ds3d::abiDataBridge::~abiDataBridge
~abiDataBridge() override=default
ds3d::abiDataMixer::process_i
virtual ErrCode process_i(const int portId, const abiRefDataMap *inputData, const abiOnDataCB *dataConsumedCb)=0
ds3d::CapsPort
CapsPort
Definition: sources/includes/ds3d/common/abi_dataprocess.h:65
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::abiProcess::getUserData_i
virtual const abiRefAny * getUserData_i() const =0
ds3d::MixerUpdate
MixerUpdate
Definition: sources/includes/ds3d/common/abi_dataprocess.h:62
ds3d::abiDataLoader::~abiDataLoader
~abiDataLoader() override=default
ds3d::abiOnDataCB
abiCallBackT< ErrCode, const abiRefDataMap * > abiOnDataCB
Definition: sources/includes/ds3d/common/abi_obj.h:82
ds3d::CapsPort::kInput
@ kInput
ds3d::abiDataLoader::readData_i
virtual ErrCode readData_i(abiRefDataMap *&datamap)=0
ds3d::abiRefDataMixer
abiRefT< abiDataMixer > abiRefDataMixer
Definition: sources/includes/ds3d/common/abi_dataprocess.h:181
ds3d::abiRefDataBridge
abiRefT< abiDataBridge > abiRefDataBridge
Definition: sources/includes/ds3d/common/abi_dataprocess.h:175
ds3d::abiDataFilter::~abiDataFilter
~abiDataFilter() override=default
ds3d::State::kStopped
@ kStopped
ds3d::abiDataMixer::updateInput_i
virtual ErrCode updateInput_i(int portId, MixerUpdate updateType)=0
ds3d::MixerUpdate::kPortRemoved
@ kPortRemoved
ds3d::abiProcess::flush_i
virtual ErrCode flush_i()=0
ds3d::abiErrorCB
abiCallBackT< ErrCode, const char * > abiErrorCB
Definition: sources/includes/ds3d/common/abi_obj.h:81
ds3d::abiDataBridge::process_i
virtual ErrCode process_i(const struct VideoBridge2dInput *inputData, const abiOnDataCB *outputDataCb, const abiOnBridgeDataCB *dataConsumedCb)=0
ds3d::ErrCode
ErrCode
Definition: sources/includes/ds3d/common/common.h:47
ds3d::abiRefDataLoader
abiRefT< abiDataLoader > abiRefDataLoader
Definition: sources/includes/ds3d/common/abi_dataprocess.h:169
ds3d::abiRefWindow
abiRefT< abiWindow > abiRefWindow
Definition: sources/includes/ds3d/common/abi_window.h:56
ds3d::State::kStarting
@ kStarting
ds3d::abiProcess::stop_i
virtual ErrCode stop_i()=0
ds3d::MixerUpdate::kPortAdded
@ kPortAdded
ds3d::abiDataMixer::~abiDataMixer
~abiDataMixer() override=default
ds3d::abiRefDataRender
abiRefT< abiDataRender > abiRefDataRender
Definition: sources/includes/ds3d/common/abi_dataprocess.h:178
ds3d::abiOnBridgeDataCB
abiCallBackT< ErrCode, const struct VideoBridge2dInput * > abiOnBridgeDataCB
Definition: sources/includes/ds3d/common/abi_obj.h:83
ds3d::abiDataRender::render_i
virtual ErrCode render_i(const abiRefDataMap *inputData, const abiOnDataCB *dataDoneCb)=0
ds3d::abiRefAny
abiRefT< void > abiRefAny
Definition: sources/includes/ds3d/common/abi_obj.h:48
ds3d::abiDataFilter::abiDataFilter
abiDataFilter()=default
ds3d::abiProcess::setUserData_i
virtual void setUserData_i(const abiRefAny *userdata)=0
ds3d::State
State
All custom-libs need create the abi reference for DataLoader, DataRender, and DataFilter.
Definition: sources/includes/ds3d/common/abi_dataprocess.h:55
ds3d::abiDataRender::preroll_i
virtual ErrCode preroll_i(const abiRefDataMap *inputData)=0
ds3d::abiRefDataFilter
abiRefT< abiDataFilter > abiRefDataFilter
Definition: sources/includes/ds3d/common/abi_dataprocess.h:172
ds3d::CapsPort::kOutput
@ kOutput
ds3d::abiRefDataMap
abiRefT< abiDataMap > abiRefDataMap
Definition: sources/includes/ds3d/common/abi_obj.h:71
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
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: sources/includes/ds3d/common/abi_dataprocess.h:25
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