add multi cam support

This commit is contained in:
Maik Jurischka committed 2026-10-19 14:48:26 +02:00
1 parent 5048dbb1ca
commit 1853360506
11 files changed
+108 -22

No files matched your search

+73 -13
View File
@@ -21,11 +21,65 @@ void signalHandler(int signal) {
g_running = false;
}
int main() {
static void printUsage() {
std::cout << "Usage: vizionStreamer [options]\n"
<< " -c, --camera <idx> Camera index to open (default: auto-detect VCI-AR0234, else 0)\n"
<< " -s, --socket <path> Control socket path (default: /tmp/vizion_control.sock)\n"
<< " -h, --help Show this help\n"
<< "\n"
<< "Run multiple instances for multiple cameras:\n"
<< " ./vizionStreamer --camera 0 --socket /tmp/vizion_cam0.sock\n"
<< " ./vizionStreamer --camera 1 --socket /tmp/vizion_cam1.sock\n";
}
int main(int argc, char* argv[]) {
// Setup signal handlers for clean shutdown
signal(SIGINT, signalHandler);
signal(SIGTERM, signalHandler);
// Parse CLI arguments
int cameraIndex = -1; // -1 = auto-detect
std::string socketPath = "/tmp/vizion_control.sock";
bool argsOk = true;
try {
for (int i = 1; i < argc && argsOk; i++) {
const std::string arg = argv[i];
if (arg == "-h" || arg == "--help") {
printUsage();
return 0;
} else if (arg == "-c" || arg == "--camera") {
if (i + 1 >= argc) {
std::cerr << "Missing value for " << arg << std::endl;
argsOk = false;
} else {
cameraIndex = std::stoi(argv[++i]);
}
} else if (arg.rfind("--camera=", 0) == 0) {
cameraIndex = std::stoi(arg.substr(9));
} else if (arg == "-s" || arg == "--socket") {
if (i + 1 >= argc) {
std::cerr << "Missing value for " << arg << std::endl;
argsOk = false;
} else {
socketPath = argv[++i];
}
} else if (arg.rfind("--socket=", 0) == 0) {
socketPath = arg.substr(8);
} else {
std::cerr << "Unknown argument: " << arg << std::endl;
argsOk = false;
}
}
} catch (const std::exception& e) {
std::cerr << "Invalid argument: " << e.what() << std::endl;
argsOk = false;
}
if (!argsOk) {
printUsage();
return -1;
}
// List available cameras
std::vector<std::string> devList;
const int deviceCount = VxDiscoverCameraDevices(devList);
@@ -40,19 +94,26 @@ int main() {
std::cout << "[" << i << "] " << devList[i] << std::endl;
}
// Find VCI-AR0234 camera
int cameraIndex = -1;
for (size_t i = 0; i < devList.size(); i++) {
if (devList[i].find("VCI-AR0234") != std::string::npos) {
cameraIndex = static_cast<int>(i);
std::cout << "Selected camera [" << cameraIndex << "]: " << devList[i] << std::endl;
break;
if (cameraIndex >= 0) {
if (cameraIndex >= deviceCount) {
std::cout << "Camera index " << cameraIndex << " out of range (0-" << deviceCount - 1 << ")" << std::endl;
return -1;
}
std::cout << "Selected camera [" << cameraIndex << "]: " << devList[cameraIndex] << std::endl;
} else {
// Auto-detect: prefer VCI-AR0234, fall back to index 0
for (size_t i = 0; i < devList.size(); i++) {
if (devList[i].find("VCI-AR0234") != std::string::npos) {
cameraIndex = static_cast<int>(i);
std::cout << "Selected camera [" << cameraIndex << "]: " << devList[i] << std::endl;
break;
}
}
}
if (cameraIndex == -1) {
std::cout << "VCI-AR0234 camera not found, using default (index 0)" << std::endl;
cameraIndex = 0;
if (cameraIndex == -1) {
std::cout << "VCI-AR0234 camera not found, using default (index 0)" << std::endl;
cameraIndex = 0;
}
}
// Open camera
@@ -81,7 +142,6 @@ int main() {
const auto controller = std::make_shared<CameraController>(cam);
const std::string socketPath = "/tmp/vizion_control.sock";
SocketServer server(socketPath);
if (!server.start([controller](const std::string& cmd) {