void MainWindow::connectToCamera() { // Get next tab index int nextTabIndex = (deviceNumberMap.size()+fileNumberMap.size()==0) ? 0 : ui->tabWidget->count(); // Show dialog CameraConnectDialog *cameraConnectDialog = new CameraConnectDialog(this); if(cameraConnectDialog->exec()==QDialog::Accepted) { if(cameraConnectDialog->isCamera()) { // Save user-defined device number int deviceNumber = cameraConnectDialog->getDeviceNumber(); // Check if this camera is already connected if(!deviceNumberMap.contains(deviceNumber)) { // Create ImageBuffer with user-defined size Buffer<Mat> *imageBuffer = new Buffer<Mat>(cameraConnectDialog->getImageBufferSize()); // Add created ImageBuffer to SharedImageBuffer object sharedImageBuffer->add(deviceNumber, imageBuffer); // Create CameraView cameraViewMap[deviceNumber] = new CameraView(ui->tabWidget, deviceNumber, sharedImageBuffer); // Attempt to connect to camera if(cameraViewMap[deviceNumber]->connectToCamera(cameraConnectDialog->getDropFrameCheckBoxState(), cameraConnectDialog->getCaptureThreadPrio(), cameraConnectDialog->getProcessingThreadPrio(), cameraConnectDialog->getResolutionWidth(), cameraConnectDialog->getResolutionHeight(), cameraConnectDialog->getFpsNumber())) { // Add to map deviceNumberMap[deviceNumber] = nextTabIndex; // Save tab label QString tabLabel = cameraConnectDialog->getTabLabel(); // Allow tabs to be closed ui->tabWidget->setTabsClosable(true); // If start tab, remove if(nextTabIndex==0) ui->tabWidget->removeTab(0); // Add tab ui->tabWidget->addTab(cameraViewMap[deviceNumber], tabLabel + " [" + QString::number(deviceNumber) + "]"); ui->tabWidget->setCurrentWidget(cameraViewMap[deviceNumber]); // Set tooltips setTabCloseToolTips(ui->tabWidget, tr("Disconnect Camera")); //Set Codec cameraViewMap[deviceNumber]->setCodec(saveCodec); } // Could not connect to camera else { // Display error message QMessageBox::warning(this,tr("ERROR:"),tr("Could not connect to camera. Please check device number.")); // Explicitly delete widget delete cameraViewMap[deviceNumber]; cameraViewMap.remove(deviceNumber); // Remove from shared buffer sharedImageBuffer->removeByDeviceNumber(deviceNumber); // Explicitly delete ImageBuffer object delete imageBuffer; } } // Display error message else QMessageBox::warning(this,tr("ERROR:"),tr("Could not connect to camera. Already connected.")); } // Attempt to load a file else if(cameraConnectDialog->isFile()) { // Get the filepath from connectDialog QString filepath = cameraConnectDialog->getFilepath(); // String can't be empty if(filepath.isEmpty()) { QMessageBox::warning(this,tr("ERROR:"),tr("Please enter path to video file.")); connectToCamera(); return; } // Load the File QFileInfo file(filepath); QString filename = file.fileName(); if(file.exists()){ // Create new Videofile entry in QMap videoViewMap[filename] = new VideoView(ui->tabWidget,filepath); // Attemp to load the video if(videoViewMap[filename]->loadVideo(cameraConnectDialog->getPlayerThreadPrio(), cameraConnectDialog->getResolutionWidth(), cameraConnectDialog->getResolutionHeight(), cameraConnectDialog->getFpsNumber())) { // Add to map fileNumberMap[filename] = nextTabIndex; // Save tab label QString tabLabel = cameraConnectDialog->getTabLabel(); // Allow tabs to be closed ui->tabWidget->setTabsClosable(true); // If start tab remove if(nextTabIndex==0) ui->tabWidget->removeTab(0); // Add tab ui->tabWidget->addTab(videoViewMap[filename], tabLabel+"["+filename+"]"); ui->tabWidget->setCurrentWidget(videoViewMap[filename]); // Set tooltips setTabCloseToolTips(ui->tabWidget, tr("Remove Video")); // Set Codec videoViewMap[filename]->setCodec(saveCodec); videoViewMap[filename]->set_useVideoCodec(useVideoCodec); } // Could not load video else { // Display error message QMessageBox::warning(this,tr("ERROR:"),tr("Could not convert Video. Please check file format.")); // Explicitly delete widget delete videoViewMap[filename]; videoViewMap.remove(filename); } } // Error if file does not exist else { QMessageBox::warning(this,tr("ERROR:"),tr("File does not exist.")); connectToCamera(); return; } } } // Delete dialog delete cameraConnectDialog; }
void MainWindow::connectToCamera() { // We cannot connect to a camera if devices are already connected and stream synchronization is in progress if(ui->actionSynchronizeStreams->isChecked() && deviceNumberMap.size()>0 && sharedImageBuffer->getSyncEnabled()) { // Prompt user QMessageBox::warning(this, tr("qt-opencv-multithreaded"), tr("Stream synchronization is in progress.\n\n" "Please close all currently open streams before attempting to open a new stream."), QMessageBox::Ok); } // Attempt to connect to camera else { // Get next tab index int nextTabIndex = (deviceNumberMap.size()==0) ? 0 : ui->tabWidget->count(); // Show dialog CameraConnectDialog *cameraConnectDialog = new CameraConnectDialog(this, ui->actionSynchronizeStreams->isChecked()); if(cameraConnectDialog->exec()==QDialog::Accepted) { // Save user-defined device number int deviceNumber = cameraConnectDialog->getDeviceNumber(); // Check if this camera is already connected if(!deviceNumberMap.contains(deviceNumber)) { // Create ImageBuffer with user-defined size Buffer<Mat> *imageBuffer = new Buffer<Mat>(cameraConnectDialog->getImageBufferSize()); // Add created ImageBuffer to SharedImageBuffer object sharedImageBuffer->add(deviceNumber, imageBuffer, ui->actionSynchronizeStreams->isChecked()); // Create CameraView cameraViewMap[deviceNumber] = new CameraView(ui->tabWidget, deviceNumber, sharedImageBuffer); // Check if stream synchronization is enabled if(ui->actionSynchronizeStreams->isChecked()) { // Prompt user int ret = QMessageBox::question(this, tr("qt-opencv-multithreaded"), tr("Stream synchronization is enabled.\n\n" "Do you want to start processing?\n\n" "Choose 'No' if you would like to open additional streams."), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); // Start processing if(ret==QMessageBox::Yes) { sharedImageBuffer->setSyncEnabled(true); } // Defer processing else { sharedImageBuffer->setSyncEnabled(false); } } // Attempt to connect to camera if(cameraViewMap[deviceNumber]->connectToCamera(cameraConnectDialog->getDropFrameCheckBoxState(), cameraConnectDialog->getCaptureThreadPrio(), cameraConnectDialog->getProcessingThreadPrio(), cameraConnectDialog->getEnableFrameProcessingCheckBoxState(), cameraConnectDialog->getResolutionWidth(), cameraConnectDialog->getResolutionHeight())) { // Add to map deviceNumberMap[deviceNumber] = nextTabIndex; // Save tab label QString tabLabel = cameraConnectDialog->getTabLabel(); // Allow tabs to be closed ui->tabWidget->setTabsClosable(true); // If start tab, remove if(nextTabIndex==0) { ui->tabWidget->removeTab(0); } // Add tab ui->tabWidget->addTab(cameraViewMap[deviceNumber], tabLabel + " [" + QString::number(deviceNumber) + "]"); ui->tabWidget->setCurrentWidget(cameraViewMap[deviceNumber]); // Set tooltips setTabCloseToolTips(ui->tabWidget, "Disconnect Camera"); // Prevent user from enabling/disabling stream synchronization after a camera has been connected ui->actionSynchronizeStreams->setEnabled(false); } // Could not connect to camera else { // Display error message QMessageBox::warning(this,"ERROR:","Could not connect to camera. Please check device number."); // Explicitly delete widget delete cameraViewMap[deviceNumber]; cameraViewMap.remove(deviceNumber); // Remove from shared buffer sharedImageBuffer->removeByDeviceNumber(deviceNumber); // Explicitly delete ImageBuffer object delete imageBuffer; } } // Display error message else { QMessageBox::warning(this,"ERROR:","Could not connect to camera. Already connected."); } } // Delete dialog delete cameraConnectDialog; } }