From 79a350593c485e4bc834d6510115c60858ee62b7 Mon Sep 17 00:00:00 2001 From: Barzan Hayati Date: Tue, 1 Jul 2025 12:14:17 +0000 Subject: [PATCH] Setup pipeline --- src/pipeline_manager.cpp | 59 +++++++++++++++++++++++++++++++++++++++- src/pipeline_manager.hpp | 2 ++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/pipeline_manager.cpp b/src/pipeline_manager.cpp index 925b310..313e055 100644 --- a/src/pipeline_manager.cpp +++ b/src/pipeline_manager.cpp @@ -48,6 +48,63 @@ char* createName(const char* str, int num) { return result; } +bool PipelineManager::setup_pipeline() { + /* Set up the pipeline */ + /* add all elements into the pipeline */ + // this is the running branch of the if statement for none-jetson platforms + // (without a transform_jetson plugin before the sink plugin) custom_plugin + // is dsexample pluging + if (sink_manager->display_output < 3) { + gst_bin_add_many(GST_BIN(pipeline), + // pgie, tracker, + gstds_example_manager->custom_plugin, + tiler_manager->tiler, queue_array[2].queue, + nv_video_convert_manager->nvvidconv, + nv_osd_manager->nvosd, sink_manager->sink, NULL); + + /* we link the elements together + * nvstreammux -> nvinfer -> nvtiler -> nvvidconv -> nvosd -> + * video-renderer */ + if (!gst_element_link_many(streammux_manager->streammux, + nv_video_convert_manager->nvvidconv, + // pgie, tracker, + gstds_example_manager->custom_plugin, + tiler_manager->tiler, nv_osd_manager->nvosd, + sink_manager->sink, NULL)) { + g_printerr( + "\033[1;31m Elements could not be linked. Exiting.\033[0m\n"); + return false; + } + } else { + gst_bin_add_many(GST_BIN(pipeline), + // pgie, tracker, + gstds_example_manager->custom_plugin, + tiler_manager->tiler, queue_array[2].queue, + nv_video_convert_manager->nvvidconv, + nv_osd_manager->nvosd, sink_manager->nvvidconv_postosd, + sink_manager->caps, sink_manager->encoder, + sink_manager->rtppay, sink_manager->sink, NULL); + + // Link the elements together: + // file-source -> h264-parser -> nvh264-decoder -> + // nvinfer -> nvvidconv -> nvosd -> nvvidconv_postosd -> + // caps -> encoder -> rtppay -> udpsink + if (!gst_element_link_many( + streammux_manager->streammux, + nv_video_convert_manager->nvvidconv, + // pgie, tracker, + gstds_example_manager->custom_plugin, tiler_manager->tiler, + nv_osd_manager->nvosd, sink_manager->nvvidconv_postosd, + sink_manager->caps, sink_manager->encoder, sink_manager->rtppay, + sink_manager->sink, NULL)) { + g_printerr( + "\033[1;31m Elements could not be linked. Exiting.\033[0m\n"); + return false; + } + } + return true; +} + bool PipelineManager::create_pipeline_elements(int num_sources, char** url_camera) { streammux_manager->create_streammux(num_sources); @@ -81,7 +138,6 @@ bool PipelineManager::create_pipeline_elements(int num_sources, nv_osd_manager->create_nv_osd(); /* Add queue elements between every two elements */ - QueueManager queue_array[5]; const char* base = "queue"; for (int i = 0; i < 5; i++) { char* name = createName(base, i); @@ -92,6 +148,7 @@ bool PipelineManager::create_pipeline_elements(int num_sources, sink_manager->create_sink(prop); message_handling->create_message_handler(pipeline, g_run_forever); + setup_pipeline(); return true; } \ No newline at end of file diff --git a/src/pipeline_manager.hpp b/src/pipeline_manager.hpp index 7cd0999..1d954ae 100644 --- a/src/pipeline_manager.hpp +++ b/src/pipeline_manager.hpp @@ -32,10 +32,12 @@ class PipelineManager { public: int current_device = -1; struct cudaDeviceProp prop; + QueueManager queue_array[5]; PipelineManager(); PipelineManager(int, char **); int create_pipeline(); bool create_pipeline_elements(int, char **); + bool setup_pipeline(); void set_cuda_device(); ~PipelineManager(); }; \ No newline at end of file