add multi cam support
This commit is contained in:
1 parent
5048dbb1ca
commit
1853360506
11 files changed
+108
-22
No files matched your search
+73
-13
@@ -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) {
|
||||
|
||||
Reference in new issue
Block a user