18 #ifndef NVDS3D_GST_GST_PLUGINS_H
19 #define NVDS3D_GST_GST_PLUGINS_H
21 #include <ds3d/common/func_utils.h>
22 #include <ds3d/common/config.h>
23 #include <gst/app/gstappsink.h>
24 #include <gst/app/gstappsrc.h>
26 #include <ds3d/common/hpp/obj.hpp>
27 #include <ds3d/common/hpp/dataloader.hpp>
28 #include <ds3d/common/hpp/datarender.hpp>
29 #include <ds3d/common/hpp/datafilter.hpp>
30 #include <ds3d/common/hpp/yaml_config.hpp>
32 #include <ds3d/gst/custom_lib_factory.h>
33 #include <ds3d/gst/nvds3d_gst_ptr.h>
34 #include <ds3d/gst/nvds3d_meta.h>
58 namespace ds3d {
namespace gst {
60 template<
class GuardProcess>
80 template <
class GuardProcess>
86 using abiRefType =
typename GuardProcess::abiRefType;
89 GuardProcess processor;
90 processor.reset(customLib->CreateCtx<abiRefType>(
98 uData->customlib = customLib.get();
100 uData->configPath = compConfig.
filePath;
101 processor.setUserData(uData.get(), [holder = customLib, uData = uData](
void*)
mutable {
103 if (holder && holder.use_count() == 1) {
104 holder->keepOpen(true);
108 customProcessor = std::move(processor);
109 lib = std::move(customLib);
129 "load custom dataloader failed");
131 loaderSrc.
config = compConfig;
139 constexpr
static size_t kPoolSize = 6;
143 !caps.empty(),
ErrCode::kConfig,
"caps must be configure for dataloader source");
144 CapsPtr srcCaps(gst_caps_from_string(caps.c_str()));
147 G_OBJECT(loaderEle.
get()),
"do-timestamp", TRUE,
"stream-type", GST_APP_STREAM_TYPE_STREAM,
148 "max-bytes", (uint64_t)(kPoolSize *
sizeof(
NvDs3DBuffer)),
"min-percent", 80,
"caps",
149 srcCaps.
get(), NULL);
153 "Dataloader start config: %s failed", compConfig.
filePath.c_str());
156 GstAppSrc* appSrc = GST_APP_SRC(loaderEle.
get());
160 "Set dataloader into GstAppsrc failed.");
172 "load custom datarender failed");
174 renderSink.
config = compConfig;
182 uint32_t maxBuffers = 4;
186 !caps.empty(),
ErrCode::kConfig,
"caps must be configure for datarender source");
187 CapsPtr sinkCaps(gst_caps_from_string(caps.c_str()));
189 GObject* eleObj = G_OBJECT(renderEle.
get());
191 eleObj,
"wait-on-eos", TRUE,
"max-buffers", (uint32_t)maxBuffers,
"caps", sinkCaps.
get(),
194 auto setGstProperties = [eleObj, &compConfig]() {
195 YAML::Node node = YAML::Load(compConfig.
rawContent);
196 auto properties = node[
"gst_properties"];
198 auto sync = properties[
"sync"];
199 auto async = properties[
"async"];
200 auto drop = properties[
"drop"];
202 g_object_set(eleObj,
"sync", sync.as<
bool>(),
nullptr);
205 g_object_set(eleObj,
"async", async.as<
bool>(),
nullptr);
208 g_object_set(eleObj,
"drop", drop.as<
bool>(),
nullptr);
218 "Dataloader start config: %s failed", compConfig.
filePath.c_str());
221 GstAppSink* appSink = GST_APP_SINK(renderEle.
get());
225 "Set datarender into GstAppSink failed.");
232 #endif // NVDS3D_GST_GST_PLUGINS_H