[libcamera-devel] [PATCH v9 2/7] qcam: Support Hotplug for Camera Selection Dialog
Utkarsh Tiwari
utkarsh02t at gmail.com
Wed Aug 31 07:49:33 CEST 2022
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 at gmail.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
Difference from v8:
1. Removed the part about QPointer from commit message, no longer
needed.
2. s/didn't/doesn't commit msg.
3. Rename cameraRemoved to removeCamera and cameraAdded to addCamera
4. Pass QString to cameraRemoved, cameraAdded instead of libcamera::Camera
5. Removed blank line between cameraAdded, cameraRemoved
6. Optimize cameraId passing cameraCombo_ , cameraAdded,
cameraRemoved.
src/qcam/cam_select_dialog.cpp | 12 ++++++++++++
src/qcam/cam_select_dialog.h | 5 +++++
src/qcam/main_window.cpp | 7 +++++--
3 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/src/qcam/cam_select_dialog.cpp b/src/qcam/cam_select_dialog.cpp
index a49d822b..f82930cc 100644
--- a/src/qcam/cam_select_dialog.cpp
+++ b/src/qcam/cam_select_dialog.cpp
@@ -48,3 +48,15 @@ std::string CameraSelectorDialog::getCameraId()
{
return cameraIdComboBox_->currentText().toStdString();
}
+
+/* Hotplug / Unplug Support. */
+void CameraSelectorDialog::addCamera(QString camearaId)
+{
+ cameraIdComboBox_->addItem(camearaId);
+}
+
+void CameraSelectorDialog::removeCamera(QString cameraId)
+{
+ int cameraIndex = cameraIdComboBox_->findText(cameraId);
+ cameraIdComboBox_->removeItem(cameraIndex);
+}
diff --git a/src/qcam/cam_select_dialog.h b/src/qcam/cam_select_dialog.h
index c31f4f82..bd2dbc1e 100644
--- a/src/qcam/cam_select_dialog.h
+++ b/src/qcam/cam_select_dialog.h
@@ -13,6 +13,7 @@
#include <libcamera/camera_manager.h>
#include <QDialog>
+#include <QString>
class QComboBox;
@@ -27,6 +28,10 @@ public:
std::string getCameraId();
+ /* Hotplug / Unplug Support. */
+ void addCamera(QString cameraId);
+ void removeCamera(QString cameraId);
+
private:
libcamera::CameraManager *cm_;
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index 14bcf03e..e8e22d49 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -587,10 +587,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()) {
@@ -600,8 +602,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);
}
}
--
2.34.1
More information about the libcamera-devel
mailing list