Create streammux class
This commit is contained in:
parent
5044982c87
commit
f9d16f29cf
@ -25,16 +25,19 @@ endif()
|
||||
|
||||
|
||||
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/include/gstreamer-1.0)
|
||||
include_directories(/usr/include/nlohmann)
|
||||
include_directories(${PROJECT_SOURCE_DIR}/camera_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
|
||||
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 =
|
||||
new PipelineManager(num_sources, url_camera);
|
||||
pipeline_manager->create_pipeline();
|
||||
pipeline_manager->create_pipeline_elements(num_sources);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -20,4 +20,8 @@ int PipelineManager::create_pipeline() {
|
||||
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 <gst/gst.h>
|
||||
|
||||
#include "streammux_manager.hpp"
|
||||
|
||||
class PipelineManager {
|
||||
private:
|
||||
gboolean g_run_forever = FALSE;
|
||||
GMainLoop *loop = NULL;
|
||||
GstElement *pipeline = NULL;
|
||||
GMutex eos_lock;
|
||||
StreammuxManager *streammux_manager = new StreammuxManager();
|
||||
|
||||
public:
|
||||
PipelineManager();
|
||||
PipelineManager(int, char **);
|
||||
int create_pipeline();
|
||||
void create_pipeline_elements(int);
|
||||
~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