diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index ef4ad4a22dca..19a8801eafac 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -66,27 +66,40 @@ void MainWindow::updateTitle()
 	setWindowTitle(title_ + " : " + QString::number(fps, 'f', 2) + " fps");
 }
 
-int MainWindow::openCamera(CameraManager *cm)
+std::string MainWindow::chooseCamera(CameraManager *cm)
 {
-	std::string cameraName;
+	QString name;
+	bool result;
 
-	if (!options_.isSet(OptCamera)) {
+	if (cm->cameras().size() == 1)
+		return cm->cameras()[0]->name();
+
+	for (const std::shared_ptr<Camera> &cam : cm->cameras()) {
 		QStringList cameras;
-		bool result;
 
-		for (const std::shared_ptr<Camera> &cam : cm->cameras())
-			cameras.append(QString::fromStdString(cam->name()));
+		cameras.append(QString::fromStdString(cam->name()));
 
 		QString name = QInputDialog::getItem(this, "Select Camera",
 						     "Camera:", cameras, 0,
 						     false, &result);
 		if (!result)
-			return -EINVAL;
+			return "";
+	}
 
-		cameraName = name.toStdString();
-	} else {
+	return name.toStdString();
+}
+
+int MainWindow::openCamera(CameraManager *cm)
+{
+	std::string cameraName;
+
+	if (options_.isSet(OptCamera))
 		cameraName = static_cast<std::string>(options_[OptCamera]);
-	}
+	else
+		cameraName = chooseCamera(cm);
+
+	if (cameraName == "")
+		return -EINVAL;
 
 	camera_ = cm->get(cameraName);
 	if (!camera_) {
diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
index 6873155aaa03..30dd8743104d 100644
--- a/src/qcam/main_window.h
+++ b/src/qcam/main_window.h
@@ -43,6 +43,7 @@ private Q_SLOTS:
 	void updateTitle();
 
 private:
+	std::string chooseCamera(CameraManager *cm);
 	int openCamera(CameraManager *cm);
 
 	int startCapture();
