Create streammux class
This commit is contained in:
parent
5044982c87
commit
f9d16f29cf
@ -25,16 +25,19 @@ endif()
|
|||||||
|
|
||||||
|
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
pkg_check_modules(GLIB REQUIRED glib-2.0 gobject-2.0)
|
pkg_check_modules(GLIB REQUIRED glib-2.0 gobject-2.0 nlohmann_json gstreamer-base-1.0 gstreamer-1.0 gstreamer-video-1.0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
include_directories(/usr/lib/x86_64-linux-gnu/glib-2.0/include)
|
include_directories(/usr/lib/x86_64-linux-gnu/glib-2.0/include)
|
||||||
include_directories(/usr/include/gstreamer-1.0)
|
include_directories(/usr/include/gstreamer-1.0)
|
||||||
|
include_directories(/usr/include/nlohmann)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/camera_manager.hpp)
|
include_directories(${PROJECT_SOURCE_DIR}/camera_manager.hpp)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/pipeline_manager.hpp)
|
include_directories(${PROJECT_SOURCE_DIR}/pipeline_manager.hpp)
|
||||||
|
include_directories(${PROJECT_SOURCE_DIR}/streammux_manager.hpp)
|
||||||
|
|
||||||
set(SOURCES src/main.cpp src/camera_manager.cpp src/pipeline_manager.cpp)
|
|
||||||
|
set(SOURCES src/main.cpp src/camera_manager.cpp src/pipeline_manager.cpp src/streammux_manager.cpp)
|
||||||
# Create the executable
|
# Create the executable
|
||||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||||
|
|
||||||
|
|||||||
4
data/configuration.json
Normal file
4
data/configuration.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"MUXER_OUTPUT_HEIGHT": 1080,
|
||||||
|
"MUXER_OUTPUT_WIDTH": 1920
|
||||||
|
}
|
||||||
@ -77,6 +77,7 @@ int main(int argc, char *argv[]) {
|
|||||||
PipelineManager *pipeline_manager =
|
PipelineManager *pipeline_manager =
|
||||||
new PipelineManager(num_sources, url_camera);
|
new PipelineManager(num_sources, url_camera);
|
||||||
pipeline_manager->create_pipeline();
|
pipeline_manager->create_pipeline();
|
||||||
|
pipeline_manager->create_pipeline_elements(num_sources);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -20,4 +20,8 @@ int PipelineManager::create_pipeline() {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PipelineManager::create_pipeline_elements(int num_sources) {
|
||||||
|
streammux_manager->create_streammux(num_sources);
|
||||||
}
|
}
|
||||||
@ -1,16 +1,20 @@
|
|||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
|
|
||||||
|
#include "streammux_manager.hpp"
|
||||||
|
|
||||||
class PipelineManager {
|
class PipelineManager {
|
||||||
private:
|
private:
|
||||||
gboolean g_run_forever = FALSE;
|
gboolean g_run_forever = FALSE;
|
||||||
GMainLoop *loop = NULL;
|
GMainLoop *loop = NULL;
|
||||||
GstElement *pipeline = NULL;
|
GstElement *pipeline = NULL;
|
||||||
GMutex eos_lock;
|
GMutex eos_lock;
|
||||||
|
StreammuxManager *streammux_manager = new StreammuxManager();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PipelineManager();
|
PipelineManager();
|
||||||
PipelineManager(int, char **);
|
PipelineManager(int, char **);
|
||||||
int create_pipeline();
|
int create_pipeline();
|
||||||
|
void create_pipeline_elements(int);
|
||||||
~PipelineManager();
|
~PipelineManager();
|
||||||
};
|
};
|
||||||
37
src/streammux_manager.cpp
Normal file
37
src/streammux_manager.cpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#include "streammux_manager.hpp"
|
||||||
|
|
||||||
|
#define SET_GPU_ID(object, gpu_id) \
|
||||||
|
g_object_set(G_OBJECT(object), "gpu-id", gpu_id, NULL);
|
||||||
|
#define GPU_ID 0
|
||||||
|
#define MUXER_BATCH_TIMEOUT_USEC 40000
|
||||||
|
|
||||||
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
StreammuxManager::StreammuxManager() {
|
||||||
|
json j;
|
||||||
|
std::ifstream i("../data/configuration.json");
|
||||||
|
i >> j;
|
||||||
|
|
||||||
|
MUXER_OUTPUT_HEIGHT = j["MUXER_OUTPUT_HEIGHT"];
|
||||||
|
MUXER_OUTPUT_WIDTH = j["MUXER_OUTPUT_WIDTH"];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool StreammuxManager::create_streammux(int num_sources) {
|
||||||
|
/* Create nvstreammux instance to form batches from one or more sources. */
|
||||||
|
streammux = gst_element_factory_make("nvstreammux", "stream-muxer");
|
||||||
|
g_object_set(G_OBJECT(streammux), "batch-size", num_sources, NULL);
|
||||||
|
g_object_set(G_OBJECT(streammux), "enable-padding", 1, NULL);
|
||||||
|
// g_object_set (G_OBJECT (streammux), "drop-pipeline-eos",
|
||||||
|
// g_run_forever, NULL);
|
||||||
|
g_object_set(G_OBJECT(streammux), "live-source", 1, NULL);
|
||||||
|
g_object_set(G_OBJECT(streammux), "width", MUXER_OUTPUT_WIDTH, "height",
|
||||||
|
MUXER_OUTPUT_HEIGHT, "batched-push-timeout",
|
||||||
|
MUXER_BATCH_TIMEOUT_USEC, NULL);
|
||||||
|
SET_GPU_ID(streammux, GPU_ID);
|
||||||
|
|
||||||
|
if (!streammux) {
|
||||||
|
g_printerr("Unable to create streammux.Exiting.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
19
src/streammux_manager.hpp
Normal file
19
src/streammux_manager.hpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include <gst/gst.h>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
#include "json.hpp"
|
||||||
|
|
||||||
|
class StreammuxManager {
|
||||||
|
private:
|
||||||
|
GstElement *streammux = NULL;
|
||||||
|
|
||||||
|
public:
|
||||||
|
int MUXER_OUTPUT_WIDTH;
|
||||||
|
int MUXER_OUTPUT_HEIGHT;
|
||||||
|
StreammuxManager();
|
||||||
|
bool create_streammux(int);
|
||||||
|
~StreammuxManager();
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user