diff options
author | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2018-12-03 17:34:48 +0100 |
---|---|---|
committer | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2019-01-07 07:56:00 +0000 |
commit | 80898b03be54e2855472987f60f4c2526344389b (patch) | |
tree | 865bf5808a7f19ff67f040f1ea82f2e4f47b9246 | |
parent | afc952f93922db36ff7a93ce3c4e558cb78177e2 (diff) | |
download | qtmultimedia-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.cpp | 43 |
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; - } - } - } } /*! |