FaceRecognition/src/main.cpp
2025-06-30 18:24:27 +00:00

86 lines
2.8 KiB
C++

#include <filesystem>
#include <fstream>
#include <iostream>
#include <string>
#include "camera_manager.hpp"
#include "pipeline_manager.hpp"
namespace fs = std::filesystem;
gint *g_source_id_list = NULL;
gboolean *g_eos_list = NULL;
gboolean *check_finished_streams = NULL;
gboolean *g_source_enabled = NULL;
guint num_sources; // number of input cameras
GstElement **g_source_bin_list = NULL;
void allocate_memory_variables_cameras(const int MAX_NUM_SOURCES) {
g_source_id_list = (gint *)g_malloc0(sizeof(gint) * MAX_NUM_SOURCES);
g_eos_list = (gboolean *)g_malloc0(sizeof(gboolean) * MAX_NUM_SOURCES);
check_finished_streams =
(gboolean *)g_malloc0(sizeof(gboolean) * MAX_NUM_SOURCES);
g_source_enabled =
(gboolean *)g_malloc0(sizeof(gboolean) * MAX_NUM_SOURCES);
g_source_bin_list =
(GstElement **)g_malloc0(sizeof(GstElement *) * MAX_NUM_SOURCES);
}
int load_rtsp_address(CameraManager *camera_manager, fs::path file_path) {
try {
std::ifstream file(file_path);
if (!file.is_open()) {
throw std::runtime_error("Failed to open file: " +
file_path.string());
}
std::cout << "Contents of '" << file_path << "':\n";
std::cout << "-----------------\n";
std::string line;
int line_number = 1;
while (std::getline(file, line)) {
std::cout << "Line " << line_number++ << ": " << line << '\n';
camera_manager->add_rtsp_camera(line, line_number);
}
} catch (const std::exception &e) {
std::cerr << "Error: " << e.what() << '\n';
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
int main(int argc, char *argv[]) {
if (argc < 1) {
std::cerr << "Usage: " << argv[0] << " <RTSP_URL>" << std::endl;
return 1;
}
CameraManager *camera_manager = new CameraManager();
// Path handling works across platforms
fs::path data_dir = "../data";
fs::path file_path = data_dir / "example.txt";
load_rtsp_address(camera_manager, file_path);
char **url_camera = new char *[camera_manager->camera_list.size() + 1];
num_sources = camera_manager->camera_list.size();
const int MAX_NUM_SOURCES = camera_manager->camera_list.size();
allocate_memory_variables_cameras(MAX_NUM_SOURCES);
url_camera[0] = argv[0];
for (guint i = 0; i < num_sources; i++) {
url_camera[i + 1] = &camera_manager->camera_list.at(i).address[0];
}
std::cout << "print content of camera urls" << std::endl;
for (int i = 0; i < (int)num_sources + 1; i++) {
std::cout << url_camera[i] << std::endl;
}
PipelineManager *pipeline_manager =
new PipelineManager(num_sources, url_camera);
pipeline_manager->create_pipeline();
pipeline_manager->create_pipeline_elements(num_sources, url_camera);
return 0;
}