From f9de9889f6b909968f31743ab60e66dd356f2a4d Mon Sep 17 00:00:00 2001
From: Yoann Lopes <yoann.lopes@digia.com>
Date: Thu, 25 Sep 2014 17:10:08 +0200
Subject: [PATCH] Use QCameraInfo in camera example.

To replace QCamera::availableDevices(), which is deprecated since 5.3.

Change-Id: I0b1bd6286ec78d6d26ce309d224369989d4a5063
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
---
 examples/multimediawidgets/camera/camera.cpp | 27 +++++++++-----------
 examples/multimediawidgets/camera/camera.h   |  2 +-
 2 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/examples/multimediawidgets/camera/camera.cpp b/examples/multimediawidgets/camera/camera.cpp
index 3afe59324..714de7a4d 100644
--- a/examples/multimediawidgets/camera/camera.cpp
+++ b/examples/multimediawidgets/camera/camera.cpp
@@ -46,6 +46,7 @@
 #include <QMediaService>
 #include <QMediaRecorder>
 #include <QCameraViewfinder>
+#include <QCameraInfo>
 #include <QMediaMetaData>
 
 #include <QMessageBox>
@@ -53,6 +54,8 @@
 
 #include <QtWidgets>
 
+Q_DECLARE_METATYPE(QCameraInfo)
+
 Camera::Camera(QWidget *parent) :
     QMainWindow(parent),
     ui(new Ui::Camera),
@@ -65,26 +68,23 @@ Camera::Camera(QWidget *parent) :
     ui->setupUi(this);
 
     //Camera devices:
-    QByteArray cameraDevice;
 
     QActionGroup *videoDevicesGroup = new QActionGroup(this);
     videoDevicesGroup->setExclusive(true);
-    foreach(const QByteArray &deviceName, QCamera::availableDevices()) {
-        QString description = camera->deviceDescription(deviceName);
-        QAction *videoDeviceAction = new QAction(description, videoDevicesGroup);
+    foreach (const QCameraInfo &cameraInfo, QCameraInfo::availableCameras()) {
+        QAction *videoDeviceAction = new QAction(cameraInfo.description(), videoDevicesGroup);
         videoDeviceAction->setCheckable(true);
-        videoDeviceAction->setData(QVariant(deviceName));
-        if (cameraDevice.isEmpty()) {
-            cameraDevice = deviceName;
+        videoDeviceAction->setData(QVariant::fromValue(cameraInfo));
+        if (cameraInfo == QCameraInfo::defaultCamera())
             videoDeviceAction->setChecked(true);
-        }
+
         ui->menuDevices->addAction(videoDeviceAction);
     }
 
     connect(videoDevicesGroup, SIGNAL(triggered(QAction*)), SLOT(updateCameraDevice(QAction*)));
     connect(ui->captureWidget, SIGNAL(currentChanged(int)), SLOT(updateCaptureMode()));
 
-    setCamera(cameraDevice);
+    setCamera(QCameraInfo::defaultCamera());
 }
 
 Camera::~Camera()
@@ -94,16 +94,13 @@ Camera::~Camera()
     delete camera;
 }
 
-void Camera::setCamera(const QByteArray &cameraDevice)
+void Camera::setCamera(const QCameraInfo &cameraInfo)
 {
     delete imageCapture;
     delete mediaRecorder;
     delete camera;
 
-    if (cameraDevice.isEmpty())
-        camera = new QCamera;
-    else
-        camera = new QCamera(cameraDevice);
+    camera = new QCamera(cameraInfo);
 
     connect(camera, SIGNAL(stateChanged(QCamera::State)), this, SLOT(updateCameraState(QCamera::State)));
     connect(camera, SIGNAL(error(QCamera::Error)), this, SLOT(displayCameraError()));
@@ -398,7 +395,7 @@ void Camera::displayCameraError()
 
 void Camera::updateCameraDevice(QAction *action)
 {
-    setCamera(action->data().toByteArray());
+    setCamera(qvariant_cast<QCameraInfo>(action->data()));
 }
 
 void Camera::displayViewfinder()
diff --git a/examples/multimediawidgets/camera/camera.h b/examples/multimediawidgets/camera/camera.h
index 52f03cbd3..faa02ccd7 100644
--- a/examples/multimediawidgets/camera/camera.h
+++ b/examples/multimediawidgets/camera/camera.h
@@ -60,7 +60,7 @@ public:
     ~Camera();
 
 private slots:
-    void setCamera(const QByteArray &cameraDevice);
+    void setCamera(const QCameraInfo &cameraInfo);
 
     void startCamera();
     void stopCamera();
-- 
GitLab