NVIDIA DeepStream SDK API Reference

9.2 Release
service-maker/sources/python/src/bindings/buffer.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 #include <data_feeder.hpp>
19 #include <data_receiver.hpp>
20 #include <buffer.hpp>
21 #include "bufferdoc.h"
22 #include <gst/gst.h>
23 
24 class BufferProvider_ : public DataFeeder::IDataProvider {
25 public:
26  Buffer read(DataFeeder& feeder, unsigned int size, bool& eos) override {
27  Buffer buffer = this->generate(size);
28  eos = !buffer;
29  return buffer;
30  }
31 
32  virtual Buffer generate(unsigned int size) = 0;
33 };
34 
36  virtual Buffer generate(unsigned int size) {
37  PYBIND11_OVERRIDE_PURE_NAME(
38  Buffer,
40  "generate",
41  generate,
42  size
43  );
44  }
45 };
46 
47 class Feeder_ : public DataFeeder {
48 public:
49  Feeder_(const string&name, BufferProvider_* provider)
50  : DataFeeder(name, provider)
51  {}
52 
53  virtual ~Feeder_() {
55  data_provider_.release();
56  }
57 };
58 
59 class BufferRetriever_ : public DataReceiver::IDataConsumer {
60 public:
61  int consume(DataReceiver& receiver, Buffer buffer) override {
62  return this->retrieve(buffer);
63  }
64 
65  virtual int retrieve(Buffer buffer) = 0;
66 };
67 
69  virtual int retrieve(Buffer buffer) {
70  PYBIND11_OVERRIDE_PURE_NAME(
71  int,
73  "consume",
74  retrieve,
75  buffer
76  );
77  }
78 };
79 
80 class Receiver_ : public DataReceiver {
81 public:
82  Receiver_(const string& name, BufferRetriever_* consumer)
83  : DataReceiver(name, consumer)
84  {}
85 
86  virtual ~Receiver_() {
88  data_consumer_.release();
89  }
90 };
91 
92 void module_buffer_bind(py::module &m);
93 
94 void module_buffer_bind(py::module &m) {
95  py::class_<Buffer>(m, "Buffer", pydeepstreamdoc::buffer::BufferDoc::descr)
97  .def(py::init<vector<uint8_t>>(), pydeepstreamdoc::buffer::BufferDoc::init_bytes, py::arg("data"))
98  .def(py::init([](py::object gst_buffer_obj) {
99  PyObject* py_obj = gst_buffer_obj.ptr();
100  if (!py_obj || !Py_TYPE(py_obj) || !Py_TYPE(py_obj)->tp_name ||
101  (strcmp(Py_TYPE(py_obj)->tp_name, "Buffer") != 0 &&
102  strcmp(Py_TYPE(py_obj)->tp_name, "Gst.Buffer") != 0 &&
103  !strstr(Py_TYPE(py_obj)->tp_name, "gi.repository.Gst.Buffer"))) {
104  return std::make_unique<Buffer>();
105  }
106  py::int_ hash_obj = py::reinterpret_steal<py::int_>(PyObject_CallMethod(py_obj, "__hash__", NULL));
107  GstBuffer* gst_buffer = reinterpret_cast<GstBuffer*>(hash_obj.cast<size_t>());
108  OpaqueBuffer* opaque_buffer = reinterpret_cast<OpaqueBuffer*>(gst_buffer);
109  return std::make_unique<Buffer>(opaque_buffer);
110  }), pydeepstreamdoc::buffer::BufferDoc::init_gst_buffer, py::arg("gst_buffer"))
111  .def_property_readonly("batch_size", &Buffer::batchSize)
112  .def_property_readonly("batch_meta", [](Buffer& self) {
113  return self.getBatchMetadata();
114  })
115  .def_property_readonly("timestamp", &Buffer::timestamp)
116  .def("measure_latency", [](Buffer& self) {
117  py::list result;
118  for (auto& l : self.measureLatency()) {
119  py::dict entry;
120  entry["source_id"] = l.source_id;
121  entry["frame_num"] = l.frame_num;
122  entry["latency"] = l.latency;
123  result.append(entry);
124  }
125  return result;
126  })
127  .def("get_chunk_id", [](Buffer& self, unsigned int id) {
128  return self.chunkId(id);
130  .def("extract", [](Buffer& self, unsigned int id) {
131  return make_unique<TensorWrapper>(self.extract(id));
132  },
133  py::call_guard<py::gil_scoped_release>(),
135  )
136  .def("__repr__", [](Buffer& self) {
137  return "Buffer(batch_size=" + std::to_string(self.batchSize()) +
138  ", batch_meta=" + py::repr(py::cast(self.getBatchMetadata())).cast<std::string>() +
139  ", timestamp=" + std::to_string(self.timestamp()) + ")";
140  });
141  py::class_<Feeder_>(m, "Feeder", pydeepstreamdoc::buffer::FeederDoc::descr)
142  .def(py::init<const string&, BufferProvider_*>(), py::keep_alive<1, 3>(), pydeepstreamdoc::buffer::FeederDoc::init, py::arg("name"), py::arg("provider"));
143  py::class_<BufferProvider_, PyBufferProvider>(m, "BufferProvider", pydeepstreamdoc::buffer::BufferProviderDoc::descr)
146  py::class_<Receiver_>(m, "Receiver", pydeepstreamdoc::buffer::ReceiverDoc::descr)
147  .def(py::init<const string&, BufferRetriever_*>(), py::keep_alive<1, 3>(), pydeepstreamdoc::buffer::ReceiverDoc::init, py::arg("name"), py::arg("retriever"));
148  py::class_<BufferRetriever_, PyBufferRetriever>(m, "BufferRetriever", pydeepstreamdoc::buffer::BufferRetrieverDoc::descr)
151 }
OpaqueBuffer
struct _GstBuffer OpaqueBuffer
Definition: service-maker/includes/buffer.hpp:36
BufferProvider_::read
Buffer read(DataFeeder &feeder, unsigned int size, bool &eos) override
Definition: service-maker/sources/python/src/bindings/buffer.h:26
pydeepstreamdoc::buffer::FeederDoc::init
constexpr const char * init
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:59
pydeepstreamdoc::buffer::BufferRetrieverDoc::consume
constexpr const char * consume
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:91
pydeepstreamdoc::buffer::BufferRetrieverDoc::init
constexpr const char * init
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:90
pydeepstreamdoc::buffer::BufferDoc::init_empty
constexpr const char * init_empty
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:32
pydeepstreamdoc::buffer::BufferDoc::get_chunk_id
constexpr const char * get_chunk_id
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:43
pydeepstreamdoc::buffer::FeederDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:58
BufferRetriever_::consume
int consume(DataReceiver &receiver, Buffer buffer) override
Definition: service-maker/sources/python/src/bindings/buffer.h:61
GstBuffer
struct _GstBuffer GstBuffer
Definition: includes/ds3d/common/idatatype.h:24
pydeepstreamdoc::buffer::BufferProviderDoc::generate
constexpr const char * generate
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:70
BufferRetriever_
Definition: service-maker/sources/python/src/bindings/buffer.h:59
Receiver_::~Receiver_
virtual ~Receiver_()
Definition: service-maker/sources/python/src/bindings/buffer.h:86
pydeepstreamdoc::buffer::BufferRetrieverDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:89
BufferProvider_::generate
virtual Buffer generate(unsigned int size)=0
BufferProvider_
Definition: service-maker/sources/python/src/bindings/buffer.h:24
pydeepstreamdoc::buffer::BufferDoc::init_bytes
constexpr const char * init_bytes
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:33
Receiver_
Definition: service-maker/sources/python/src/bindings/buffer.h:80
PyBufferRetriever
Definition: service-maker/sources/python/src/bindings/buffer.h:68
pydeepstreamdoc::tensor::TensorDoc::size
constexpr const char * size
Definition: service-maker/sources/python/src/bindings/docstrings/tensordoc.h:46
pydeepstreamdoc::buffer::ReceiverDoc::init
constexpr const char * init
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:80
BufferRetriever_::retrieve
virtual int retrieve(Buffer buffer)=0
Feeder_::Feeder_
Feeder_(const string &name, BufferProvider_ *provider)
Definition: service-maker/sources/python/src/bindings/buffer.h:49
pydeepstreamdoc::buffer::ReceiverDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:79
pydeepstreamdoc::buffer::BufferDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:26
module_buffer_bind
void module_buffer_bind(py::module &m)
Definition: service-maker/sources/python/src/bindings/buffer.h:94
pydeepstreamdoc::buffer::BufferDoc::extract
constexpr const char * extract
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:49
Receiver_::Receiver_
Receiver_(const string &name, BufferRetriever_ *consumer)
Definition: service-maker/sources/python/src/bindings/buffer.h:82
PyBufferProvider
Definition: service-maker/sources/python/src/bindings/buffer.h:35
receiver
static deepstream::Cloud2DeviceReceiver receiver
Definition: service-maker/sources/modules/smart_recording_action/smart_recording_action.hpp:29
pydeepstreamdoc::buffer::BufferProviderDoc::init
constexpr const char * init
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:69
Feeder_::~Feeder_
virtual ~Feeder_()
Definition: service-maker/sources/python/src/bindings/buffer.h:53
pydeepstreamdoc::buffer::BufferProviderDoc::descr
constexpr const char * descr
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:68
Feeder_
Definition: service-maker/sources/python/src/bindings/buffer.h:47
pydeepstreamdoc::buffer::BufferDoc::init_gst_buffer
constexpr const char * init_gst_buffer
Definition: service-maker/sources/python/src/bindings/docstrings/bufferdoc.h:38