NVIDIA DeepStream SDK API Reference

9.1 Release
sources/includes/ds3d/common/impl/impl_datamixer.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2023-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_IMPL_BASE_DATA_MIXER_H
19 #define DS3D_COMMON_IMPL_BASE_DATA_MIXER_H
20 
21 #include "ds3d/common/hpp/datamap.hpp"
22 #include "ds3d/common/impl/impl_dataprocess.h"
23 
24 namespace ds3d { namespace impl {
25 
38 class BaseImplDataMixer : public BaseImplDataProcessor<abiDataMixer> {
39 public:
41  ~BaseImplDataMixer() override = default;
42 
44  const int portId,
45  const abiRefDataMap* inputData,
46  const abiOnDataCB* inputDataConsumedCb) final
47  {
49  getStateSafe() == State::kRunning, ErrCode::kState, "datamixer is not started");
50 
51  DS_ASSERT(inputData);
52  GuardDataMap inData(*inputData);
53  GuardCB<abiOnDataCB> guardConsumedCb(
54  inputDataConsumedCb ? inputDataConsumedCb->refCopy() : nullptr);
55  OnGuardDataCBImpl consumedCbImpl = [gConsumedCb = std::move(guardConsumedCb), this](
56  ErrCode code, GuardDataMap data) {
57  gConsumedCb(code, data.abiRef());
58  };
59  return processImpl(portId, std::move(inData), std::move(consumedCbImpl));
60  }
61 
63  const abiOnDataCB* outputDataCb) final
64  {
66  getStateSafe() == State::kRunning, ErrCode::kState, "datamixer is not started");
67 
68  DS_ASSERT(outputDataCb);
69  GuardCB<abiOnDataCB> guardOutputCb(outputDataCb ? outputDataCb->refCopy() : nullptr);
70  OnGuardDataCBImpl outputCbImpl = [gOutputCb = std::move(guardOutputCb), this](
71  ErrCode code, GuardDataMap data) {
72  gOutputCb(code, data.abiRef());
73  };
74 
75  return setOutputCbImpl(std::move(outputCbImpl));
76  }
77 
78  ErrCode updateInput_i(int portId, MixerUpdate updateType) { return updateInputImpl(portId, updateType); }
79 
80 protected:
81  // cplusplus virtual interface, user need to derive from
82  virtual ErrCode processImpl(
83  const int portId,
84  GuardDataMap datamap,
85  OnGuardDataCBImpl inputConsumedCb) = 0;
86  virtual ErrCode setOutputCbImpl(
87  OnGuardDataCBImpl outputDataCb) = 0;
88  virtual ErrCode updateInputImpl(int portId, MixerUpdate updateType) = 0;
89 };
90 
91 }} // namespace ds3d::impl
92 
93 #endif // DS3D_COMMON_IMPL_BASE_DATA_MIXER_H
ds3d::impl::BaseImplDataMixer::updateInput_i
ErrCode updateInput_i(int portId, MixerUpdate updateType)
Definition: sources/includes/ds3d/common/impl/impl_datamixer.h:78
ds3d::impl::BaseImplDataMixer::setOutputCb_i
ErrCode setOutputCb_i(const abiOnDataCB *outputDataCb) final
Definition: sources/includes/ds3d/common/impl/impl_datamixer.h:62
ds3d::impl::BaseImplDataMixer::process_i
ErrCode process_i(const int portId, const abiRefDataMap *inputData, const abiOnDataCB *inputDataConsumedCb) final
Definition: sources/includes/ds3d/common/impl/impl_datamixer.h:43
ds3d::MixerUpdate
MixerUpdate
Definition: sources/includes/ds3d/common/abi_dataprocess.h:62
ds3d::impl::BaseImplDataMixer::updateInputImpl
virtual ErrCode updateInputImpl(int portId, MixerUpdate updateType)=0
DS3D_FAILED_RETURN
#define DS3D_FAILED_RETURN(condition, ret, fmt,...)
Definition: sources/includes/ds3d/common/defines.h:69
ds3d::impl::BaseImplDataProcessor< abiDataMixer >::OnGuardDataCBImpl
std::function< void(ErrCode, GuardDataMap)> OnGuardDataCBImpl
Definition: sources/includes/ds3d/common/impl/impl_dataprocess.h:33
ds3d::impl::BaseImplDataMixer::setOutputCbImpl
virtual ErrCode setOutputCbImpl(OnGuardDataCBImpl outputDataCb)=0
ds3d::abiRefT< abiDataMap >
DS_ASSERT
#define DS_ASSERT(...)
Definition: sources/includes/ds3d/common/defines.h:36
ds3d::ErrCode
ErrCode
Definition: sources/includes/ds3d/common/common.h:47
ds3d::impl::BaseImplDataMixer::processImpl
virtual ErrCode processImpl(const int portId, GuardDataMap datamap, OnGuardDataCBImpl inputConsumedCb)=0
ds3d::impl::BaseImplDataMixer
Any custom datamixer must derive from BaseImplDataMixer,.
Definition: sources/includes/ds3d/common/impl/impl_datamixer.h:38
ds3d::impl::BaseImplDataProcessor< abiDataMixer >::getStateSafe
State getStateSafe() const
Definition: sources/includes/ds3d/common/impl/impl_dataprocess.h:116
ds3d::impl::BaseImplDataMixer::~BaseImplDataMixer
~BaseImplDataMixer() override=default
ds3d::impl::BaseImplDataProcessor
BaseProcessIF could be abiDataLoader/abiDataRender/abiDataFilter or any others abi interface that der...
Definition: sources/includes/ds3d/common/impl/impl_dataprocess.h:31
ds3d::impl::BaseImplDataMixer::BaseImplDataMixer
BaseImplDataMixer()
Definition: sources/includes/ds3d/common/impl/impl_datamixer.h:40
ds3d::GuardDataMap
Definition: sources/includes/ds3d/common/hpp/datamap.hpp:27
ds3d::State::kRunning
@ kRunning
ds3d
Definition: sources/includes/ds3d/common/abi_dataprocess.h:25
ds3d::abiCallBackT
Definition: sources/includes/ds3d/common/abi_obj.h:75
ds3d::ErrCode::kState
@ kState
ds3d::GuardCB
Definition: sources/includes/ds3d/common/hpp/obj.hpp:289