From f115830e9c589510f87ce1ff9ea8ea15fa2520f0 Mon Sep 17 00:00:00 2001 From: Barzan Hayati Date: Tue, 1 Jul 2025 07:31:00 +0000 Subject: [PATCH] Create queue --- CMakeLists.txt | 4 +++- src/pipeline_manager.cpp | 24 ++++++++++++++++++++++++ src/pipeline_manager.hpp | 1 + src/queue_manager.cpp | 12 ++++++++++++ src/queue_manager.hpp | 11 +++++++++++ 5 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/queue_manager.cpp create mode 100644 src/queue_manager.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index bf30d34..9c65644 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,10 +54,12 @@ include_directories(${PROJECT_SOURCE_DIR}/gstds_example_manager.hpp) include_directories(${PROJECT_SOURCE_DIR}/tiler_manager.hpp) include_directories(${PROJECT_SOURCE_DIR}/nv_video_convert_manager.hpp) include_directories(${PROJECT_SOURCE_DIR}/nv_osd_manager.hpp) +include_directories(${PROJECT_SOURCE_DIR}/queue_manager.hpp) + set(SOURCES src/main.cpp src/camera_manager.cpp src/pipeline_manager.cpp src/streammux_manager.cpp src/source_bin.cpp src/gstds_example_manager.cpp src/tiler_manager.cpp - src/nv_video_convert_manager.cpp src/nv_osd_manager.cpp) + src/nv_video_convert_manager.cpp src/nv_osd_manager.cpp src/queue_manager.cpp) # Create the executable add_executable(${PROJECT_NAME} ${SOURCES}) diff --git a/src/pipeline_manager.cpp b/src/pipeline_manager.cpp index e0bf9d7..1d51e50 100644 --- a/src/pipeline_manager.cpp +++ b/src/pipeline_manager.cpp @@ -32,6 +32,22 @@ void PipelineManager::set_cuda_device() { << std::endl; } +char* createName(const char* str, int num) { + // Calculate the required length + // Max digits in an int is about 10 (for 32-bit int), plus 1 for null + // terminator + int length = + strlen(str) + 12; // Extra space for the number and null terminator + + // Allocate memory for the new string + char* result = new char[length]; + + // Format the string + snprintf(result, length, "%s%d", str, num); + + return result; +} + bool PipelineManager::create_pipeline_elements(int num_sources, char** url_camera) { streammux_manager->create_streammux(num_sources); @@ -64,5 +80,13 @@ bool PipelineManager::create_pipeline_elements(int num_sources, nv_video_convert_manager->create_nv_video_convert(); 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); + queue_array[i] = QueueManager(name); + } + return true; } \ No newline at end of file diff --git a/src/pipeline_manager.hpp b/src/pipeline_manager.hpp index 40b1ae7..31b9e4f 100644 --- a/src/pipeline_manager.hpp +++ b/src/pipeline_manager.hpp @@ -5,6 +5,7 @@ #include "gstds_example_manager.hpp" #include "nv_osd_manager.hpp" #include "nv_video_convert_manager.hpp" +#include "queue_manager.hpp" #include "source_bin.hpp" #include "streammux_manager.hpp" #include "tiler_manager.hpp" diff --git a/src/queue_manager.cpp b/src/queue_manager.cpp new file mode 100644 index 0000000..daf1127 --- /dev/null +++ b/src/queue_manager.cpp @@ -0,0 +1,12 @@ +#include "queue_manager.hpp" + +QueueManager::QueueManager() {} + +QueueManager::QueueManager(char* queue_name) { + name = queue_name; + queue = gst_element_factory_make("queue", queue_name); +} + +QueueManager::~QueueManager() { + // Cleanup code (if needed) +} \ No newline at end of file diff --git a/src/queue_manager.hpp b/src/queue_manager.hpp new file mode 100644 index 0000000..8ceead0 --- /dev/null +++ b/src/queue_manager.hpp @@ -0,0 +1,11 @@ +#include + +class QueueManager { + private: + public: + GstElement* queue = NULL; + char* name; + QueueManager(); + QueueManager(char*); + ~QueueManager(); +}; \ No newline at end of file