summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVaL Doroshchuk <valentyn.doroshchuk@qt.io>2018-12-03 17:34:48 +0100
committerVaL Doroshchuk <valentyn.doroshchuk@qt.io>2019-01-07 07:56:00 +0000
commit80898b03be54e2855472987f60f4c2526344389b (patch)
tree865bf5808a7f19ff67f040f1ea82f2e4f47b9246
parentafc952f93922db36ff7a93ce3c4e558cb78177e2 (diff)
downloadqtmultimedia-80898b03be54e2855472987f60f4c2526344389b.tar.gz
Return ServiceMissingError if no camera found by name
If no camera devices found with requested name, the object should be invalid. Task-number: QTBUG-54901 Change-Id: I54037c5c7caad09da2df51eb0624eb0e88f12bf8 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
-rw-r--r--src/multimedia/camera/qcamera.cpp43
1 files changed, 19 insertions, 24 deletions
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index 722c5b629..c7d64155c 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -347,18 +347,27 @@ QCamera::QCamera(const QByteArray& deviceName, QObject *parent):
Q_D(QCamera);
d->init();
- if (d->service != 0) {
- //pass device name to service
- if (d->deviceControl) {
- const QString name = QString::fromLatin1(deviceName);
- for (int i = 0; i < d->deviceControl->deviceCount(); i++) {
- if (d->deviceControl->deviceName(i) == name) {
- d->deviceControl->setSelectedDevice(i);
- break;
- }
+ bool found = false;
+ // Pass device name to service.
+ if (d->deviceControl) {
+ const QString name = QString::fromLatin1(deviceName);
+ for (int i = 0; i < d->deviceControl->deviceCount(); i++) {
+ if (d->deviceControl->deviceName(i) == name) {
+ d->deviceControl->setSelectedDevice(i);
+ found = true;
+ break;
}
}
}
+
+ // The camera should not be used if device with requested name does not exist.
+ if (!found) {
+ if (d->service && d->control)
+ d->service->releaseControl(d->control);
+ d->control = nullptr;
+ d->error = QCamera::ServiceMissingError;
+ d->errorString = QCamera::tr("The camera service is missing");
+ }
}
/*!
@@ -368,22 +377,8 @@ QCamera::QCamera(const QByteArray& deviceName, QObject *parent):
*/
QCamera::QCamera(const QCameraInfo &cameraInfo, QObject *parent)
- : QMediaObject(*new QCameraPrivate,
- parent,
- QMediaServiceProvider::defaultServiceProvider()->requestService(Q_MEDIASERVICE_CAMERA,
- QMediaServiceProviderHint(cameraInfo.deviceName().toLatin1())))
+ : QCamera(cameraInfo.deviceName().toLatin1(), parent)
{
- Q_D(QCamera);
- d->init();
-
- if (d->service != 0 && d->deviceControl) {
- for (int i = 0; i < d->deviceControl->deviceCount(); i++) {
- if (d->deviceControl->deviceName(i) == cameraInfo.deviceName()) {
- d->deviceControl->setSelectedDevice(i);
- break;
- }
- }
- }
}
/*!