18 #include <data_feeder.hpp>
19 #include <data_receiver.hpp>
21 #include "bufferdoc.h"
26 Buffer
read(DataFeeder& feeder,
unsigned int size,
bool& eos)
override {
27 Buffer buffer = this->
generate(size);
36 virtual Buffer generate(
unsigned int size) {
37 PYBIND11_OVERRIDE_PURE_NAME(
50 : DataFeeder(name, provider)
55 data_provider_.release();
65 virtual int retrieve(Buffer buffer) = 0;
69 virtual int retrieve(Buffer buffer) {
70 PYBIND11_OVERRIDE_PURE_NAME(
83 : DataReceiver(name, consumer)
88 data_consumer_.release();
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>();
106 py::int_ hash_obj = py::reinterpret_steal<py::int_>(PyObject_CallMethod(py_obj,
"__hash__", NULL));
109 return std::make_unique<Buffer>(opaque_buffer);
111 .def_property_readonly(
"batch_size", &Buffer::batchSize)
112 .def_property_readonly(
"batch_meta", [](Buffer&
self) {
113 return self.getBatchMetadata();
115 .def_property_readonly(
"timestamp", &Buffer::timestamp)
116 .def(
"measure_latency", [](Buffer&
self) {
118 for (
auto& l :
self.measureLatency()) {
120 entry[
"source_id"] = l.source_id;
121 entry[
"frame_num"] = l.frame_num;
122 entry[
"latency"] = l.latency;
123 result.append(entry);
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));
133 py::call_guard<py::gil_scoped_release>(),
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()) +
")";