qcam: Support Hotplug for Camera Selection Dialog

Currently if there is HotPlug event when the user is on the Camera
selection dialog, the QComboBox doesn't update to reflect the change.

Add support for hotplugging / unplugging cameras.

Signed-off-by: Utkarsh Tiwari <utkarsh02t@gmail.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Utkarsh Tiwari
2022-08-07 00:34:31 +05:30
parent f03da23b56
commit 923927ae45
3 changed files with 22 additions and 2 deletions

View File

@@ -48,3 +48,15 @@ std::string CameraSelectorDialog::getCameraId()
{
return cameraIdComboBox_->currentText().toStdString();
}
/* Hotplug / Unplug Support. */
void CameraSelectorDialog::addCamera(QString cameraId)
{
cameraIdComboBox_->addItem(cameraId);
}
void CameraSelectorDialog::removeCamera(QString cameraId)
{
int cameraIndex = cameraIdComboBox_->findText(cameraId);
cameraIdComboBox_->removeItem(cameraIndex);
}

View File

@@ -13,6 +13,7 @@
#include <libcamera/camera_manager.h>
#include <QDialog>
#include <QString>
class QComboBox;
@@ -26,6 +27,10 @@ public:
std::string getCameraId();
/* Hotplug / Unplug Support. */
void addCamera(QString cameraId);
void removeCamera(QString cameraId);
private:
libcamera::CameraManager *cm_;

View File

@@ -594,10 +594,12 @@ void MainWindow::stopCapture()
void MainWindow::processHotplug(HotplugEvent *e)
{
Camera *camera = e->camera();
QString cameraId = QString::fromStdString(camera->id());
HotplugEvent::PlugEvent event = e->hotplugEvent();
if (event == HotplugEvent::HotPlug) {
cameraCombo_->addItem(QString::fromStdString(camera->id()));
cameraCombo_->addItem(cameraId);
cameraSelectorDialog_->addCamera(cameraId);
} else if (event == HotplugEvent::HotUnplug) {
/* Check if the currently-streaming camera is removed. */
if (camera == camera_.get()) {
@@ -607,8 +609,9 @@ void MainWindow::processHotplug(HotplugEvent *e)
cameraCombo_->setCurrentIndex(0);
}
int camIndex = cameraCombo_->findText(QString::fromStdString(camera->id()));
int camIndex = cameraCombo_->findText(cameraId);
cameraCombo_->removeItem(camIndex);
cameraSelectorDialog_->removeCamera(cameraId);
}
}