NVIDIA DeepStream SDK API Reference

9.1 Release
service-maker/includes/buffer.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2024-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 
26 #ifndef DEEPSTREAM_BUFFER_HPP
27 #define DEEPSTREAM_BUFFER_HPP
28 
29 #include <vector>
30 #include <functional>
31 
32 #include "object.hpp"
33 #include "metadata.hpp"
34 #include "nvbufsurface.h"
35 
36 typedef struct _GstBuffer OpaqueBuffer;
37 
38 namespace deepstream {
39 
40 class Tensor;
41 
51 class Buffer {
52  public:
54  typedef struct _Latency {
56  unsigned int source_id;
58  unsigned int frame_num;
60  double latency;
61  } Latency;
62 
64  using FreeFunction = void(*)(void*);
65 
67  Buffer();
68 
79  Buffer(size_t length, void* data=nullptr, FreeFunction=nullptr);
80 
89  Buffer(const std::vector<uint8_t>);
90 
99  Buffer(OpaqueBuffer* buffer);
100 
102  Buffer(const Buffer&);
103 
105  Buffer(Buffer&&) noexcept;
106 
108  Buffer& operator=(const Buffer&);
109 
111  Buffer& operator=(Buffer&&) noexcept;
112 
114  virtual ~Buffer();
115 
117  operator bool() const;
118 
120  size_t size() const;
121 
123  uint64_t timestamp() const;
124 
126  int32_t chunkId(unsigned int batchId) const;
127 
129  std::vector<Latency> measureLatency() const;
130 
137  virtual size_t read(std::function<size_t(const void* data, size_t len)> callable);
138 
145  virtual size_t write(std::function<size_t(void* data, size_t len)> callable);
146 
148  OpaqueBuffer* give();
149 
154  virtual size_t batchSize();
155 
158 
163  virtual Tensor* extract(unsigned int batchId);
164 
168  static void wrap(Tensor* );
169 
170  protected:
174  std::vector<int> chunk_ids_ = { 0 };
175 };
176 
177 class VideoBuffer : public Buffer {
178  public:
179  // NvSurface Buffer
180  VideoBuffer(size_t width, size_t height, NvBufSurfaceColorFormat video_format,
181  NvBufSurfaceMemType memtype, void* mem=nullptr, int gpu_id=0);
182 
183  // cast from a Buffer Object
184  VideoBuffer(const Buffer&);
185 
186  virtual size_t read(std::function<size_t(const void* data, size_t len)>);
187 
188  virtual size_t write(std::function<size_t(void* data, size_t len)>);
189 
191 
192  size_t width() const { return width_; }
193  size_t height() const { return height_; }
194  const NvBufSurfaceColorFormat format() const { return format_; }
195 
196  VideoBuffer clone() const;
197 
198  protected:
199  size_t width_ = 0;
200  size_t height_ = 0;
202 };
203 
204 typedef struct _NvDsSourceMeta
205 {
206  int chunk_id;
208 
209 } // namespace deepstream
210 
211 #endif
OpaqueBuffer
struct _GstBuffer OpaqueBuffer
Definition: service-maker/includes/buffer.hpp:36
deepstream::VideoBuffer::getBatchMetadata
BatchMetadata getBatchMetadata()
deepstream::Buffer::buffer_
OpaqueBuffer * buffer_
opaque buffer pointer
Definition: service-maker/includes/buffer.hpp:172
deepstream::VideoBuffer::read
virtual size_t read(std::function< size_t(const void *data, size_t len)>)
object.hpp
deepstream::_NvDsSourceMeta
Definition: service-maker/includes/buffer.hpp:204
deepstream::Buffer::read
virtual size_t read(std::function< size_t(const void *data, size_t len)> callable)
Read data from the buffer.
metadata.hpp
deepstream::Buffer::Buffer
Buffer()
empty buffer constructor
deepstream::VideoBuffer::width_
size_t width_
Definition: service-maker/includes/buffer.hpp:199
deepstream::Buffer::measureLatency
std::vector< Latency > measureLatency() const
Return latency data of the buffer.
deepstream::VideoBuffer::height
size_t height() const
Definition: service-maker/includes/buffer.hpp:193
deepstream::VideoBuffer::clone
VideoBuffer clone() const
deepstream::VideoBuffer::write
virtual size_t write(std::function< size_t(void *data, size_t len)>)
deepstream::NvDsSourceMeta
struct deepstream::_NvDsSourceMeta NvDsSourceMeta
deepstream::Buffer::_Latency::source_id
unsigned int source_id
Indicating the source from which the buffer is generated.
Definition: service-maker/includes/buffer.hpp:56
deepstream::Buffer::getBatchMetadata
BatchMetadata getBatchMetadata()
Get DeepStream batch metadata attached to this buffer.
deepstream
Definition: service-maker/includes/buffer.hpp:38
deepstream::Buffer::size
size_t size() const
Size of the buffer in bytes.
deepstream::BatchMetadata
Holds information about a formed batch containingframes from different sources.
Definition: service-maker/includes/metadata.hpp:797
deepstream::VideoBuffer::height_
size_t height_
Definition: service-maker/includes/buffer.hpp:200
NvBufSurfaceMemType
NvBufSurfaceMemType
Specifies memory types for NvBufSurface.
Definition: sources/includes/nvbufsurface.h:350
deepstream::Buffer
Base class of a buffer.
Definition: service-maker/includes/buffer.hpp:51
deepstream::Buffer::wrap
static void wrap(Tensor *)
wrap the tensor to a new buffer
deepstream::VideoBuffer::format_
NvBufSurfaceColorFormat format_
Definition: service-maker/includes/buffer.hpp:201
deepstream::Buffer::_Latency
Unified definition of latency for a buffer.
Definition: service-maker/includes/buffer.hpp:54
deepstream::Buffer::chunkId
int32_t chunkId(unsigned int batchId) const
Chunk id of the buffer.
deepstream::Buffer::write
virtual size_t write(std::function< size_t(void *data, size_t len)> callable)
Write data to the buffer.
deepstream::Buffer::Latency
struct deepstream::Buffer::_Latency Latency
Unified definition of latency for a buffer.
deepstream::Buffer::extract
virtual Tensor * extract(unsigned int batchId)
create a tensor object with the buffer data
deepstream::Buffer::batchSize
virtual size_t batchSize()
get the batch size of the buffer, 1 for un-batched buffer
deepstream::Tensor
Definition: service-maker/includes/tensor.hpp:43
deepstream::_NvDsSourceMeta::chunk_id
int chunk_id
Definition: service-maker/includes/buffer.hpp:206
deepstream::Buffer::_Latency::frame_num
unsigned int frame_num
Indicating the frame to which the buffer belongs.
Definition: service-maker/includes/buffer.hpp:58
deepstream::Buffer::_Latency::latency
double latency
Latency data.
Definition: service-maker/includes/buffer.hpp:60
deepstream::VideoBuffer::format
const NvBufSurfaceColorFormat format() const
Definition: service-maker/includes/buffer.hpp:194
deepstream::VideoBuffer::VideoBuffer
VideoBuffer(size_t width, size_t height, NvBufSurfaceColorFormat video_format, NvBufSurfaceMemType memtype, void *mem=nullptr, int gpu_id=0)
deepstream::Buffer::FreeFunction
void(*)(void *) FreeFunction
Signature of customized function for freeing data in a buffer.
Definition: service-maker/includes/buffer.hpp:64
deepstream::Buffer::chunk_ids_
std::vector< int > chunk_ids_
chunk ids, optional
Definition: service-maker/includes/buffer.hpp:174
deepstream::VideoBuffer
Definition: service-maker/includes/buffer.hpp:177
deepstream::Buffer::give
OpaqueBuffer * give()
Give up the ownership of this buffer and return the opaque buffer pointer.
deepstream::VideoBuffer::width
size_t width() const
Definition: service-maker/includes/buffer.hpp:192
NvBufSurfaceColorFormat
NvBufSurfaceColorFormat
Defines color formats for NvBufSurface.
Definition: sources/includes/nvbufsurface.h:105
deepstream::Buffer::timestamp
uint64_t timestamp() const
Timestamp of the buffer.