Setup pipeline

This commit is contained in:
Barzan Hayati 2025-07-01 12:14:17 +00:00
parent 30c9d5a796
commit 79a350593c
2 changed files with 60 additions and 1 deletions

View File

@ -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;
}

View File

@ -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();
};