Setup pipeline
This commit is contained in:
parent
30c9d5a796
commit
79a350593c
@ -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;
|
||||
}
|
||||
@ -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();
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user