NVIDIA DeepStream SDK API Reference

9.2 Release
sources/gst-plugins/gst-nvtiler/NvTiler.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2019-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 _NVTILER_H_
19 #define _NVTILER_H_
20 
21 #include "INvTiler.h"
22 #include <cuda.h>
23 #include <cuda_runtime.h>
24 #include "nvbufsurftransform.h"
25 #include <mutex>
26 
28 {
29  public:
30 
31  uint32_t left;
32  uint32_t top;
33  uint32_t width;
34  uint32_t height;
35 
36  TileConfig();
37  TileConfig(uint32_t l, uint32_t t, uint32_t w, uint32_t h);
38 };
39 
40 class NvTiler : public INvTiler
41 {
42  public:
43 
44  NvTiler();
45 
46  bool Init(TilerConfig config);
47 
58  bool Composite(NvBufSurface* inputBuffer,
59  NvDsBatchMeta* inputBufferMeta,
60  NvBufSurface* outputBuffer,
61  NvBufSurface* tilerScratchBuffer,
62  uint32_t gpuId,
63  int32_t compute_hw,
64  int32_t interpolation_method);
72  bool AdjustOutputMeta(NvDsBatchMeta* outputBatchMeta);
73 
74  uint32_t GetTileWidth(uint32_t sourceId);
75 
76  uint32_t GetTileHeight(uint32_t sourceId);
77 
78  void SyncObjWait();
79 
80  void Deinit();
81 
82  bool SetSingleSourceMode(bool on, int32_t sourceId=-1);
83 
84  void DeleteSource(int32_t sourceId);
85 
86  bool SetSquareGridMode (bool squareGrid);
87 
88  bool SetTilerMap (std::map<uint32_t, uint32_t> *tiler_map, GMutex *tiler_map_lock);
89 
90  private:
91 
99  NvBufSurfTransformRect* GetSrcCompositionRects(NvBufSurface* inputBuffer);
100 
114  NvBufSurfTransformRect* GetDestCompositionRects(NvDsBatchMeta* inputBufferMeta);
115 
116  void ScaleRectParams(NvOSD_RectParams* rect_params, NvBufSurfTransformRect* destRect, float scaleX, float scaleY);
117  void ScaleTextParams(NvOSD_TextParams* text_params, NvBufSurfTransformRect* destRect, float scaleX, float scaleY);
118  void ScaleLineParams(NvOSD_LineParams* line_params, NvBufSurfTransformRect* destRect, float scaleX, float scaleY);
119  void ScaleCircleParams(NvOSD_CircleParams* circle_params, NvBufSurfTransformRect* destRect, float scaleX, float scaleY);
120  void ScaleArrowParams(NvOSD_ArrowParams* arrow_params, NvBufSurfTransformRect* destRect, float scaleX, float scaleY);
121 
122  bool ScaleAndPlaceAllMeta(NvDsBatchMeta* inputBufferMeta, NvBufSurfTransformRect* srcRects, NvBufSurfTransformRect* destRects);
123 
130  bool SyncBufferMeta(NvDsBatchMeta* bufferMeta);
131 
132  void CacheCanvasFindAndDeleteFrameMetaBySource(uint32_t sourceId, bool deleteAll=false);
133 
134  void DeleteAllFrameMeta(NvDsBatchMeta* canvasBatchMeta);
135 
144  bool CacheCanvasCopyAllFrameMetaIntoOneNewFrame(NvDsBatchMeta* canvasBatchMeta);
145 
146  NvBufSurfTransformRect* GetSingleSourceSrcCompositionRect(NvBufSurface* inputBuffer, NvDsBatchMeta* inputBufferMeta);
147 
148  NvBufSurfTransformRect* GetSingleSourceDestCompositionRect(NvDsBatchMeta* inputBufferMeta);
149 
150  bool GetSingleSourceMode();
151  uint32_t GetSingleSourceId();
152  uint32_t GetSingleSourceNumSurfacesPerFrame(NvDsBatchMeta* inputBufferMeta, bool forceCalc=false);
154  uint32_t GetSingleSourceSurfacesCount(NvDsBatchMeta* inputBufferMeta);
155 
156  void CacheCanvasCopyFrameMetaWithoutSourceIdDuplication(NvDsFrameMetaList* frameMetaList);
157 
163  std::vector<NvBufSurfaceParams> GetSingleSourceSurfaces(NvBufSurface* inputBuffer, NvDsBatchMeta* inputBufferMeta);
164 
165  bool CopyNvBufSurface(NvBufSurface* src, NvBufSurface* dest, int32_t interpolation_method);
166 
167  TileConfig GetTileConfig(uint32_t sourceId);
168 
169  CustomTile* GetTileBySourceId(CustomTile* tiles, uint32_t tileConfigSize, uint32_t sourceId);
170 
182  bool CheckVICMaxScaleFactorCompatibility(NvBufSurfTransformRect const * srcRects,
183  NvBufSurfTransformRect const * dstRects, uint32_t const numFrames);
184 
185  TilerConfig tilerConfig;
186 
187  std::vector<TileConfig> tiles;
188 
193  NvDsBatchMeta* cacheCanvasMeta;
194 
195  bool singleSourceModeON;
196 
197  uint32_t singleSourceId;
198 
199  uint32_t singleSourceNumSurfacesPerFrame;
200 
201  bool squareGridMode;
202 
203  std::map<uint32_t, uint32_t> *tilerMap;
204 
205  GMutex *tilerMapLock;
206 
207  cudaStream_t cudaStream;
209  std::vector<NvBufSurfTransformSyncObj_t> sync_objects;
210  NvBufSurfTransformCompositeParams compositeParams;
211 
212  std::mutex mtxSingleSource;
213 
218  float const MaxScaleFactorVIC;
219  float const MinScaleFactorVIC;
220 
221 #ifdef ENABLE_NVTILER_UNIT_TESTS
222 
224  friend class TestNvTilerGetSrcCompositionRects_InvalidParams1_Test;
225  friend class TestNvTilerGetSrcCompositionRects_InvalidParams2_Test;
226  friend class TestNvTilerGetSrcCompositionRects_InputTestBufferBatch1Filled1_Test;
227  friend class TestNvTilerGetSrcCompositionRects_InputTestBufferBatch100Filled100_Test;
228  friend class TestNvTilerGetSrcCompositionRects_InputTestBufferBatch100Filled50_Test;
229  friend class TestNvTilerGetSrcCompositionRects_InvalidInputTestBufferBatch50Filled100_Test;
230  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch2Filled2_Test;
231  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch2Filled2_columns2_rows1_Test;
232  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch2Filled2_columns2_rows1_SameSourceId0_Test;
233  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch2Filled2_columns2_rows1_SameSourceId1_Test;
234  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch2Filled2_columns1_rows2_Test;
235  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch2Filled2_columns1_rows2_SameSourceId1_Test;
236  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch100Filled100_Test;
237  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch100Filled50_Test;
238  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch100Filled50_Alternative_Test;
239  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch100Filled50_Last50Sources_Test;
240  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch100Filled100_SurfacesPerAllFrame2_Test;
241  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch16Filled16_SurfacesPerAllFrame2_2_Test;
242  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch16Filled16_SurfacesPerFrameDifferent_Test;
243  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch16Filled16_SurfacesPerFrameDifferent_Tiler4x4_Test;
244  friend class TestNvTilerGetDestCompositionRects_InvalidParams1_Test;
245  friend class TestNvTilerGetDestCompositionRects_InvalidParams2_Batch16Filled17_Test;
246  friend class TestNvTilerGetDestCompositionRects_InvalidParams3_Batch16Filled0_Test;
247  friend class TestNvTilerGetDestCompositionRects_InvalidParams4_NullSurfaceList_Test;
248  friend class TestNvTilerGetDestCompositionRects_InvalidParams5_FrameMetaSurfacesPerFrame0_Test;
249  friend class TestNvTilerGetDestCompositionRects_InvalidParams6_NullFrameMeta_Test;
250  friend class TestNvTilerScaleAndPlaceAllMeta_InputTestBufferBatch16Filled8_SurfacesPerFrameDifferent_ScaleTwice_8Plus8_Test;
251  friend class TestNvTilerScaleAndPlaceAllMeta_InputTestBufferBatch100FilledX_SurfacesPerFrameDifferent_ScaleTwice_50Plus50_2_Test;
252  friend class TestNvTilerScaleAndPlaceAllMeta_InputTestBufferBatch100FilledX_SurfacesPerFrameDifferent_ScaleTwice_50Plus40_3_Test;
253  friend class TestNvTilerScaleAndPlaceAllMeta_InputTestBufferBatch16Filled8_SingleSourceModeON_Test;
254  friend class TestNvTilerAdjustOutputMeta_InputTestBufferBatch100FilledX_SurfacesPerFrameDifferent_SyncTwice_50Plus40_Test;
255  friend class TestNvTilerAdjustOutputMeta_InputTestBufferBatch100FilledX_SurfacesPerFrameDifferent_SyncTwice_50Plus40_MultipleFramesWithSameSourceIdInBatch_Test;
256  friend class TestNvTilerAdjustOutputMeta_InputTestBufferBatch100FilledX_SurfacesPerFrameDifferent_SyncXTimes_2_Test;
257  friend class TestNvTilerAdjustOutputMeta_InputTestBufferBatch100FilledX_SurfacesPerFrameDifferent_SyncXTimes_OverlappedBatches_Test;
258  friend class TestNvTilerSyncBufferMeta_InputTestBufferBatch16Filled16_SingleSourceModeON_8S0_8S1_Test;
259  friend class TestNvTilerSyncBufferMeta_InputTestBufferBatch16Filled16_SingleSourceModeOFF_8S0_8S1_Test;
260  friend class TestNvTilerSyncBufferMeta_InputTestBufferBatch16Filled16_SingleSourceModeOFF_8S0_8S1_num_surfaces_per_frame_4S0_8S1_Test;
261  friend class TestNvTilerSyncBufferMeta_InputTestBufferBatch16Filled16_SingleSourceModeON_8S0_8S1_num_surfaces_per_frame_4S0_2S1_Test;
262  friend class TestNvTilerSyncBufferMeta_InputTestBufferBatch16Filled16_SingleSourceModeON_ForS0_8S0_8S1_num_surfaces_per_frame_4S0_2S1_Test;
263  friend class TestNvTilerGetDestCompositionRects_InputTestBufferBatch16Filled16_columns4_rows4_Test;
264  friend class TestNvTilerInit_CustomTileConfig_2x2_Test;
265  friend class TestNvTilerInit_CustomTileConfig_2x2_TilesIncomplete_Test;
266  friend class TestNvTilerInit_CustomTileConfig_2x2_WithBorders_Test;
267  friend class TestNvTilerInit_CustomTileConfig_2x2_WithBorders_OneSource2SurfacesPerFrame_Test;
268  friend class TestNvTilerGetSingleSourceSurfaces_InputTestBufferBatch16Filled8_SingleSourceModeON_Test;
269  friend class TestNvTilerGetSingleSourceSurfaces_InputTestBufferBatch16Filled8_SingleSourceModeON_2_Test;
270  friend class TestNvTilerGetSingleSourceSrcAndDestRect_InputTestBufferBatch16Filled8_SingleSourceModeON_NumSurfaces1_Test;
271  friend class TestNvTilerGetSingleSourceSrcAndDestRect_InputTestBufferBatch16Filled8_SingleSourceModeON_NumSurfaces2_Test;
272  friend class TestNvTilerGetSingleSourceSrcAndDestRect_InputTestBufferBatch16Filled8_SingleSourceModeON_NumSurfaces7_Test;
273  friend class TestNvTilerGetSingleSourceSrcAndDestRect_InputTestBufferBatch16Filled8_SingleSourceModeON_NumSurfaces8_Test;
274  friend class TestNvTilerGetSingleSourceSrcAndDestRect_InputTestBufferBatch16Filled16_SingleSourceModeON_8S0_8S1_Test;
275  friend class TestNvTilerGetSingleSourceSrcAndDestRect_InputTestBufferBatch16Filled16_SingleSourceModeON_0S0_16S1_Test;
276  friend class TestNvTilerCheckVICMaxScaleFactorCompatibility_InputAllGood_ScaleUp_AndDown_Test;
277  friend class TestNvTilerCheckVICMaxScaleFactorCompatibility_Input_ScaleUpGood_ScaleDownWidthBad_Test;
278  friend class TestNvTilerCheckVICMaxScaleFactorCompatibility_Input_ScaleUpGood_ScaleDownHeightBad_Test;
279  friend class TestNvTilerCheckVICMaxScaleFactorCompatibility_Input_ScaleDownGood_ScaleUpWidthBad_Test;
280  friend class TestNvTilerCheckVICMaxScaleFactorCompatibility_Input_ScaleDownGood_ScaleUpHeightBad_Test;
281 #endif
282 #ifdef ENABLE_GST_NVTILER_UNIT_TESTS
283  friend bool TestVerifyNvTilerCurrentConfig(NvTiler* tilerIface, uint32_t expectedTileWidth, uint32_t expectedTileHeight, uint32_t expectedColumns, uint32_t expectedRows);
284 #endif
286 };
287 
288 #endif
_NvOSD_LineParams
Holds the box parameters of a line to be overlayed.
Definition: includes/nvll_osd_struct.h:188
TileConfig::TileConfig
TileConfig()
_NvOSD_RectParams
Holds the box parameters of the box to be overlayed.
Definition: includes/nvll_osd_struct.h:145
NvTiler::SetSquareGridMode
bool SetSquareGridMode(bool squareGrid)
NvTiler::GetTileHeight
uint32_t GetTileHeight(uint32_t sourceId)
_NvBufSurfTransformCompositeParams
Holds composite parameters for a composite call.
Definition: includes/nvbufsurftransform.h:222
NvTiler::SyncObjWait
void SyncObjWait()
TileConfig
Definition: sources/gst-plugins/gst-nvtiler/NvTiler.h:27
INvTiler
@dev-note: Tiler Composition Steps: 1) Extract GstNvStreamMeta from the input muxed buffer 2) loop fo...
Definition: sources/gst-plugins/gst-nvtiler/INvTiler.h:49
_NvOSD_CircleParams
Holds circle parameters to be overlayed.
Definition: includes/nvll_osd_struct.h:231
NvBufSurface
Holds information about batched buffers.
Definition: includes/nvbufsurface.h:602
CustomTile
Holds information about an individual tile in the custom canvas.
Definition: includes/nvdstilerconfig.h:33
cudaStream_t
struct CUstream_st * cudaStream_t
Forward declaration of cudaStream_t.
Definition: includes/nvbufsurftransform.h:40
NvBufSurfTransformRect
Holds the coordinates of a rectangle.
Definition: includes/nvbufsurftransform.h:163
NvTiler::Init
bool Init(TilerConfig config)
NvTiler::AdjustOutputMeta
bool AdjustOutputMeta(NvDsBatchMeta *outputBatchMeta)
Scale every bounding box meta to match tile resolution.
_NvOSD_ArrowParams
Holds arrow parameters to be overlaid.
Definition: includes/nvll_osd_struct.h:207
TilerConfig
Holds the Tiler Canvas Configuration Note: The user cannot directly set this on nvmultistreamtiler Us...
Definition: includes/nvdstilerconfig.h:83
NvTiler::NvTiler
NvTiler()
_NvDsBatchMeta
Holds information about a formed batch containing frames from different sources.
Definition: includes/nvdsmeta.h:264
TileConfig::left
uint32_t left
Definition: sources/gst-plugins/gst-nvtiler/NvTiler.h:31
NvTiler
Definition: sources/gst-plugins/gst-nvtiler/NvTiler.h:40
NvDsFrameMetaList
GList NvDsFrameMetaList
Definition: includes/nvdsmeta.h:61
TileConfig::top
uint32_t top
Definition: sources/gst-plugins/gst-nvtiler/NvTiler.h:32
NvTiler::SetTilerMap
bool SetTilerMap(std::map< uint32_t, uint32_t > *tiler_map, GMutex *tiler_map_lock)
TileConfig::width
uint32_t width
Definition: sources/gst-plugins/gst-nvtiler/NvTiler.h:33
NvTiler::SetSingleSourceMode
bool SetSingleSourceMode(bool on, int32_t sourceId=-1)
_NvOSD_TextParams
Holds parameters of text to be overlayed.
Definition: includes/nvll_osd_struct.h:120
NvTiler::GetTileWidth
uint32_t GetTileWidth(uint32_t sourceId)
TileConfig::height
uint32_t height
Definition: sources/gst-plugins/gst-nvtiler/NvTiler.h:34
NvTiler::Deinit
void Deinit()
NvTiler::Composite
bool Composite(NvBufSurface *inputBuffer, NvDsBatchMeta *inputBufferMeta, NvBufSurface *outputBuffer, NvBufSurface *tilerScratchBuffer, uint32_t gpuId, int32_t compute_hw, int32_t interpolation_method)
TilerComposite helps composite an input batch onto outputBuffer.
INvTiler.h
NvTiler::DeleteSource
void DeleteSource(int32_t sourceId)