diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-03-10 09:16:33 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-03-23 13:51:39 +0000 |
commit | aa3e6fa8b3c4b1a1af51a1757fcb646c13b18647 (patch) | |
tree | 6bea85c42a4b9eeb8b93f18be35cbde1e1bdcf55 | |
parent | 009ad36c4e52aeeff63fc6549c64d0dfe5c6fe59 (diff) | |
download | qtmultimedia-aa3e6fa8b3c4b1a1af51a1757fcb646c13b18647.tar.gz |
Get rid of the capture destination enum
Instead have an explicit method that captures to a buffer,
so the developer can choose whether to capture to a file
or a buffer.
Change-Id: Iab2a7d83afd80e8539e8d52eb19b0d9081ba0f19
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
18 files changed, 94 insertions, 279 deletions
diff --git a/src/multimedia/camera/qcameraimagecapture.cpp b/src/multimedia/camera/qcameraimagecapture.cpp index 780642a13..e6cf518b4 100644 --- a/src/multimedia/camera/qcameraimagecapture.cpp +++ b/src/multimedia/camera/qcameraimagecapture.cpp @@ -73,13 +73,6 @@ QT_BEGIN_NAMESPACE \sa QCamera */ -/*! - \enum QCameraImageCapture::CaptureDestination - - \value CaptureToFile Capture the image to a file. - \value CaptureToBuffer Capture the image to a buffer for further processing. -*/ - class QCameraImageCapturePrivate { Q_DECLARE_PUBLIC(QCameraImageCapture) @@ -236,33 +229,6 @@ void QCameraImageCapture::setEncodingSettings(const QImageEncoderSettings &setti d->control->setImageSettings(settings); } -/*! - Returns the image capture destination being used. - - \sa isCaptureDestinationSupported(), setCaptureDestination() -*/ -QCameraImageCapture::CaptureDestinations QCameraImageCapture::captureDestination() const -{ - return d_func()->control->captureDestination(); -} - -/*! - Sets the capture \a destination to be used. - - \sa isCaptureDestinationSupported(), captureDestination() -*/ -void QCameraImageCapture::setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) -{ - Q_D(QCameraImageCapture); - - auto old = d->control->captureDestination(); - if (old == destination) - return; - - d->control->setCaptureDestination(destination); - emit captureDestinationChanged(destination); -} - QMediaMetaData QCameraImageCapture::metaData() const { Q_D(const QCameraImageCapture); @@ -345,6 +311,23 @@ int QCameraImageCapture::capture(const QString &file) return -1; } +int QCameraImageCapture::captureToBuffer() +{ + Q_D(QCameraImageCapture); + + d->unsetError(); + + if (d->control) + return d->control->captureToBuffer(); + + d->error = NotSupportedFeatureError; + d->errorString = tr("Device does not support images capture."); + + emit error(-1, d->error, d->errorString); + + return -1; +} + /*! \enum QCameraImageCapture::Error @@ -370,12 +353,6 @@ int QCameraImageCapture::capture(const QString &file) */ /*! - \fn QCameraImageCapture::captureDestinationChanged(CaptureDestinations destination) - - Signal emitted when the capture \a destination has changed. -*/ - -/*! \fn QCameraImageCapture::imageExposed(int id) Signal emitted when the frame with request \a id was exposed. diff --git a/src/multimedia/camera/qcameraimagecapture.h b/src/multimedia/camera/qcameraimagecapture.h index ca937745f..bbae5fe2c 100644 --- a/src/multimedia/camera/qcameraimagecapture.h +++ b/src/multimedia/camera/qcameraimagecapture.h @@ -63,7 +63,6 @@ class Q_MULTIMEDIA_EXPORT QCameraImageCapture : public QObject { Q_OBJECT Q_ENUMS(Error) - Q_ENUMS(CaptureDestination) Q_PROPERTY(bool readyForCapture READ isReadyForCapture NOTIFY readyForCaptureChanged) public: enum Error @@ -76,13 +75,6 @@ public: FormatError }; - enum CaptureDestination - { - CaptureToFile = 0x01, - CaptureToBuffer = 0x02 - }; - Q_DECLARE_FLAGS(CaptureDestinations, CaptureDestination) - explicit QCameraImageCapture(QObject *parent = nullptr); ~QCameraImageCapture(); @@ -98,21 +90,18 @@ public: QImageEncoderSettings encodingSettings() const; void setEncodingSettings(const QImageEncoderSettings& settings); - CaptureDestinations captureDestination() const; - void setCaptureDestination(CaptureDestinations destination); - QMediaMetaData metaData() const; void setMetaData(const QMediaMetaData &metaData); void addMetaData(const QMediaMetaData &metaData); public Q_SLOTS: int capture(const QString &location = QString()); + int captureToBuffer(); Q_SIGNALS: void error(int id, QCameraImageCapture::Error error, const QString &errorString); void readyForCaptureChanged(bool ready); - void captureDestinationChanged(QCameraImageCapture::CaptureDestinations destination); void imageExposed(int id); void imageCaptured(int id, const QImage &preview); @@ -133,12 +122,9 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_readyChanged(bool)) }; -Q_DECLARE_OPERATORS_FOR_FLAGS(QCameraImageCapture::CaptureDestinations) - QT_END_NAMESPACE Q_MEDIA_ENUM_DEBUG(QCameraImageCapture, Error) -Q_MEDIA_ENUM_DEBUG(QCameraImageCapture, CaptureDestination) #endif diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol.cpp index 18c1d2062..492dc8431 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol.cpp @@ -66,14 +66,15 @@ int QAndroidCameraImageCaptureControl::capture(const QString &fileName) return m_session->capture(fileName); } -QCameraImageCapture::CaptureDestinations QAndroidCameraImageCaptureControl::captureDestination() const +int QAndroidCameraImageCaptureControl::captureToBuffer() { - return m_session->captureDestination();; -} - -void QAndroidCameraImageCaptureControl::setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) -{ - m_session->setCaptureDestination(destination); + // ### implement me! + const QLatin1String errorMessage("Capturing to buffer not supported."); + QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, + Q_ARG(int, -1), + Q_ARG(int, QCameraImageCapture::NotSupportedFeatureError), + Q_ARG(QString, errorMessage)); + return -1; } QImageEncoderSettings QAndroidCameraImageCaptureControl::imageSettings() const diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol_p.h index d83cfc1ac..3d941a44d 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol_p.h +++ b/src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol_p.h @@ -66,9 +66,7 @@ public: bool isReadyForCapture() const override; int capture(const QString &fileName) override; - - QCameraImageCapture::CaptureDestinations captureDestination() const override; - void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) override; + int captureToBuffer() override; QImageEncoderSettings imageSettings() const override; void setImageSettings(const QImageEncoderSettings &settings) override; diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp index 626aa9249..f42899aae 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp @@ -71,7 +71,6 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent) , m_savedState(-1) , m_status(QCamera::InactiveStatus) , m_previewStarted(false) - , m_captureDestination(QCameraImageCapture::CaptureToFile) , m_lastImageCaptureId(0) , m_readyForCapture(false) , m_currentImageCaptureId(-1) @@ -537,21 +536,6 @@ void QAndroidCameraSession::applyImageSettings() m_camera->setJpegQuality(jpegQuality); } -bool QAndroidCameraSession::isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const -{ - return destination & (QCameraImageCapture::CaptureToFile | QCameraImageCapture::CaptureToBuffer); -} - -QCameraImageCapture::CaptureDestinations QAndroidCameraSession::captureDestination() const -{ - return m_captureDestination; -} - -void QAndroidCameraSession::setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) -{ - m_captureDestination = destination; -} - bool QAndroidCameraSession::isReadyForCapture() const { return m_status == QCamera::ActiveStatus && m_readyForCapture; @@ -654,7 +638,7 @@ void QAndroidCameraSession::onCameraPictureCaptured(const QByteArray &data) m_currentImageCaptureId, data, m_actualImageSettings.resolution(), - m_captureDestination, + /* captureToBuffer = */ false, m_currentImageCaptureFileName); // Preview needs to be restarted after taking a picture @@ -706,12 +690,12 @@ void QAndroidCameraSession::onCameraPreviewStopped() void QAndroidCameraSession::processCapturedImage(int id, const QByteArray &data, const QSize &resolution, - QCameraImageCapture::CaptureDestinations dest, + bool captureToBuffer, const QString &fileName) { - if (dest & QCameraImageCapture::CaptureToFile) { + if (!captureToBuffer) { const QString actualFileName = m_mediaStorageLocation.generateFileName(fileName, QMediaStorageLocation::Pictures, QLatin1String("IMG_"), @@ -735,9 +719,7 @@ void QAndroidCameraSession::processCapturedImage(int id, const QString errorMessage = tr("Could not open destination file: %1").arg(actualFileName); emit imageCaptureError(id, QCameraImageCapture::ResourceError, errorMessage); } - } - - if (dest & QCameraImageCapture::CaptureToBuffer) { + } else { QVideoFrame frame(new QMemoryVideoBuffer(data, -1), resolution, QVideoFrame::Format_Jpeg); emit imageAvailable(id, frame); } diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h index 8121e7025..bb7a82cdd 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h +++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h @@ -97,10 +97,6 @@ public: QImageEncoderSettings imageSettings() const { return m_actualImageSettings; } void setImageSettings(const QImageEncoderSettings &settings); - bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const; - QCameraImageCapture::CaptureDestinations captureDestination() const; - void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination); - bool isReadyForCapture() const; void setReadyForCapture(bool ready); int capture(const QString &fileName); @@ -128,8 +124,6 @@ Q_SIGNALS: void error(int error, const QString &errorString); void opened(); - void captureDestinationChanged(QCameraImageCapture::CaptureDestinations destination); - void readyForCaptureChanged(bool); void imageExposed(int id); void imageCaptured(int id, const QImage &preview); @@ -167,7 +161,7 @@ private: void processCapturedImage(int id, const QByteArray &data, const QSize &resolution, - QCameraImageCapture::CaptureDestinations dest, + bool captureToBuffer, const QString &fileName); static QVideoFrame::PixelFormat QtPixelFormatFromAndroidImageFormat(AndroidCamera::ImageFormat); @@ -193,7 +187,6 @@ private: QImageEncoderSettings m_requestedImageSettings; QImageEncoderSettings m_actualImageSettings; - QCameraImageCapture::CaptureDestinations m_captureDestination; int m_lastImageCaptureId; bool m_readyForCapture; int m_currentImageCaptureId; diff --git a/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm b/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm index 9591d974e..0e74b22e0 100644 --- a/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm +++ b/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm @@ -96,9 +96,8 @@ void AVFImageCaptureControl::updateReadyStatus() } } -int AVFImageCaptureControl::capture(const QString &fileName) +int AVFImageCaptureControl::doCapture(const QString &actualFileName) { - m_lastCaptureId++; if (!isReadyForCapture()) { QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, @@ -107,17 +106,9 @@ int AVFImageCaptureControl::capture(const QString &fileName) Q_ARG(QString, tr("Camera not ready"))); return m_lastCaptureId; } + m_lastCaptureId++; - auto destination = m_service->imageCaptureControl()->captureDestination(); - QString actualFileName; - if (destination & QCameraImageCapture::CaptureToFile) { - actualFileName = m_storageLocation.generateFileName(fileName, - AVFStorageLocation::Image, - QLatin1String("img_"), - QLatin1String("jpg")); - - qDebugCamera() << "Capture image to" << actualFileName; - } + bool captureToBuffer = actualFileName.isEmpty(); CaptureRequest request = { m_lastCaptureId, QSharedPointer<QSemaphore>::create()}; m_requestsMutex.lock(); @@ -158,7 +149,7 @@ int AVFImageCaptureControl::capture(const QString &fileName) NSData *nsJpgData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; QByteArray jpgData = QByteArray::fromRawData((const char *)[nsJpgData bytes], [nsJpgData length]); - if (destination & QCameraImageCapture::CaptureToBuffer) { + if (captureToBuffer) { QBuffer data(&jpgData); QImageReader reader(&data, "JPEG"); QSize size = reader.size(); @@ -166,29 +157,26 @@ int AVFImageCaptureControl::capture(const QString &fileName) QMetaObject::invokeMethod(this, "imageAvailable", Qt::QueuedConnection, Q_ARG(int, request.captureId), Q_ARG(QVideoFrame, frame)); - } - - if (!(destination & QCameraImageCapture::CaptureToFile)) - return; - - QFile f(actualFileName); - if (f.open(QFile::WriteOnly)) { - if (f.write(jpgData) != -1) { - QMetaObject::invokeMethod(this, "imageSaved", Qt::QueuedConnection, - Q_ARG(int, request.captureId), - Q_ARG(QString, actualFileName)); + } else { + QFile f(actualFileName); + if (f.open(QFile::WriteOnly)) { + if (f.write(jpgData) != -1) { + QMetaObject::invokeMethod(this, "imageSaved", Qt::QueuedConnection, + Q_ARG(int, request.captureId), + Q_ARG(QString, actualFileName)); + } else { + QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, + Q_ARG(int, request.captureId), + Q_ARG(int, QCameraImageCapture::OutOfSpaceError), + Q_ARG(QString, f.errorString())); + } } else { + QString errorMessage = tr("Could not open destination file:\n%1").arg(actualFileName); QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, Q_ARG(int, request.captureId), - Q_ARG(int, QCameraImageCapture::OutOfSpaceError), - Q_ARG(QString, f.errorString())); + Q_ARG(int, QCameraImageCapture::ResourceError), + Q_ARG(QString, errorMessage)); } - } else { - QString errorMessage = tr("Could not open destination file:\n%1").arg(actualFileName); - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(int, request.captureId), - Q_ARG(int, QCameraImageCapture::ResourceError), - Q_ARG(QString, errorMessage)); } } else { const QLatin1String errorMessage("Image capture failed: timed out waiting" @@ -204,6 +192,23 @@ int AVFImageCaptureControl::capture(const QString &fileName) return request.captureId; } +int AVFImageCaptureControl::capture(const QString &fileName) +{ + QString actualFileName; + actualFileName = m_storageLocation.generateFileName(fileName, + AVFStorageLocation::Image, + QLatin1String("img_"), + QLatin1String("jpg")); + + qDebugCamera() << "Capture image to" << actualFileName; + return doCapture(actualFileName); +} + +int AVFImageCaptureControl::captureToBuffer() +{ + return doCapture(QString()); +} + void AVFImageCaptureControl::onNewViewfinderFrame(const QVideoFrame &frame) { QMutexLocker locker(&m_requestsMutex); @@ -232,19 +237,6 @@ void AVFImageCaptureControl::makeCapturePreview(CaptureRequest request, request.previewReady->release(); } -QCameraImageCapture::CaptureDestinations AVFImageCaptureControl::captureDestination() const -{ - return m_destination; -} - -void AVFImageCaptureControl::setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) -{ - if (m_destination != destination) { - m_destination = destination; - updateCaptureConnection(); - } -} - void AVFImageCaptureControl::updateCaptureConnection() { if (m_session->videoCaptureDevice()) { diff --git a/src/multimedia/platform/darwin/camera/avfimagecapturecontrol_p.h b/src/multimedia/platform/darwin/camera/avfimagecapturecontrol_p.h index 8a00d5673..3304f7726 100644 --- a/src/multimedia/platform/darwin/camera/avfimagecapturecontrol_p.h +++ b/src/multimedia/platform/darwin/camera/avfimagecapturecontrol_p.h @@ -78,10 +78,9 @@ public: AVCaptureStillImageOutput *stillImageOutput() const {return m_stillImageOutput;} + int doCapture(const QString &fileName); int capture(const QString &fileName) override; - - QCameraImageCapture::CaptureDestinations captureDestination() const override; - void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) override; + int captureToBuffer() override; QImageEncoderSettings imageSettings() const override; void setImageSettings(const QImageEncoderSettings &settings) override; @@ -108,8 +107,6 @@ private: QMutex m_requestsMutex; QQueue<CaptureRequest> m_captureRequests; QImageEncoderSettings m_settings; - - QCameraImageCapture::CaptureDestinations m_destination = QCameraImageCapture::CaptureToFile; }; Q_DECLARE_TYPEINFO(AVFImageCaptureControl::CaptureRequest, Q_PRIMITIVE_TYPE); diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp index 81afbb063..5e9b94807 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp @@ -95,6 +95,17 @@ int QGstreamerCameraImageCapture::capture(const QString &fileName) return m_lastId; } +int QGstreamerCameraImageCapture::captureToBuffer() +{ + // ### implement me! + const QLatin1String errorMessage("Capturing to buffer not supported."); + QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, + Q_ARG(int, -1), + Q_ARG(int, QCameraImageCapture::NotSupportedFeatureError), + Q_ARG(QString, errorMessage)); + return -1; +} + void QGstreamerCameraImageCapture::updateState() { bool ready = (m_session->state() == QGstreamerCaptureSession::PreviewState) && diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture_p.h index 4752872e5..580afbc0a 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture_p.h +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture_p.h @@ -66,9 +66,7 @@ public: bool isReadyForCapture() const override; int capture(const QString &fileName) override; - - QCameraImageCapture::CaptureDestinations captureDestination() const override { return QCameraImageCapture::CaptureToBuffer; } - virtual void setCaptureDestination(QCameraImageCapture::CaptureDestinations /*destination*/) override {} + int captureToBuffer() override; QImageEncoderSettings imageSettings() const override; void setImageSettings(const QImageEncoderSettings &settings) override; diff --git a/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp b/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp index 35e442664..506544d74 100644 --- a/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp +++ b/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp @@ -65,19 +65,15 @@ int BbCameraImageCaptureControl::capture(const QString &fileName) return m_session->capture(fileName); } -void BbCameraImageCaptureControl::cancelCapture() +int BbCameraImageCaptureControl::captureToBuffer() { - m_session->cancelCapture(); + // ### implement me + return -1; } -QCameraImageCapture::CaptureDestinations BbCameraImageCaptureControl::captureDestination() const -{ - return m_session->captureDestination(); -} - -void BbCameraImageCaptureControl::setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) +void BbCameraImageCaptureControl::cancelCapture() { - m_session->setCaptureDestination(destination); + m_session->cancelCapture(); } QImageEncoderSettings BbCameraImageCaptureControl::imageSettings() const diff --git a/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h b/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h index c13fdbe04..7a25cc0e3 100644 --- a/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h +++ b/src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h @@ -65,11 +65,9 @@ public: bool isReadyForCapture() const override; int capture(const QString &fileName) override; + int captureToBuffer() override; void cancelCapture() override; - QCameraImageCapture::CaptureDestinations captureDestination() const override; - void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) override; - QImageEncoderSettings imageSettings() const override; void setImageSettings(const QImageEncoderSettings &settings) override; diff --git a/src/multimedia/platform/qnx/camera/bbcamerasession.cpp b/src/multimedia/platform/qnx/camera/bbcamerasession.cpp index 2f1d45672..3d852df31 100644 --- a/src/multimedia/platform/qnx/camera/bbcamerasession.cpp +++ b/src/multimedia/platform/qnx/camera/bbcamerasession.cpp @@ -124,7 +124,6 @@ BbCameraSession::BbCameraSession(QObject *parent) , m_previewIsVideo(true) , m_surface(0) , m_lastImageCaptureId(0) - , m_captureDestination(QCameraImageCapture::CaptureToFile) , m_videoState(QMediaRecorder::StoppedState) , m_videoStatus(QMediaRecorder::StoppedStatus) , m_handle(CAMERA_HANDLE_INVALID) @@ -384,25 +383,6 @@ void BbCameraSession::cancelCapture() // BB10 API doesn't provide functionality for that } -bool BbCameraSession::isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const -{ - // capture to buffer, file and both are supported. - return destination & (QCameraImageCapture::CaptureToFile | QCameraImageCapture::CaptureToBuffer); -} - -QCameraImageCapture::CaptureDestinations BbCameraSession::captureDestination() const -{ - return m_captureDestination; -} - -void BbCameraSession::setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) -{ - if (m_captureDestination != destination) { - m_captureDestination = destination; - emit captureDestinationChanged(m_captureDestination); - } -} - QList<QSize> BbCameraSession::supportedResolutions(const QImageEncoderSettings&, bool *continuous) const { if (continuous) @@ -689,13 +669,10 @@ void BbCameraSession::imageCaptured(int requestId, const QImage &rawImage, const emit imageCaptured(requestId, snapPreview); } - if (m_captureDestination & QCameraImageCapture::CaptureToBuffer) { + if (/* capture to buffer */ fileName.isEmpty()) { QVideoFrame frame(image); - emit imageAvailable(requestId, frame); - } - - if (m_captureDestination & QCameraImageCapture::CaptureToFile) { + } else { const QString actualFileName = m_mediaStorageLocation.generateFileName(fileName, QCamera::CaptureStillImage, QLatin1String("IMG_"), diff --git a/src/multimedia/platform/qnx/camera/bbcamerasession_p.h b/src/multimedia/platform/qnx/camera/bbcamerasession_p.h index 86dcae2b2..dae27baa9 100644 --- a/src/multimedia/platform/qnx/camera/bbcamerasession_p.h +++ b/src/multimedia/platform/qnx/camera/bbcamerasession_p.h @@ -101,11 +101,6 @@ public: int capture(const QString &fileName); void cancelCapture(); - // capture destination control - bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const; - QCameraImageCapture::CaptureDestinations captureDestination() const; - void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination); - // image encoder control QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, bool *continuous) const; QImageEncoderSettings imageSettings() const; @@ -146,9 +141,6 @@ Q_SIGNALS: void imageSaved(int id, const QString &fileName); void imageCaptureError(int id, int error, const QString &errorString); - // capture destination control - void captureDestinationChanged(QCameraImageCapture::CaptureDestinations destination); - // media recorder control void videoStateChanged(QMediaRecorder::State state); void videoStatusChanged(QMediaRecorder::Status status); @@ -196,7 +188,6 @@ private: QMutex m_surfaceMutex; int m_lastImageCaptureId; - QCameraImageCapture::CaptureDestinations m_captureDestination; QImageEncoderSettings m_imageEncoderSettings; diff --git a/src/multimedia/platform/qplatformcameraimagecapture_p.h b/src/multimedia/platform/qplatformcameraimagecapture_p.h index b4dc2c2c4..f6e4e08f2 100644 --- a/src/multimedia/platform/qplatformcameraimagecapture_p.h +++ b/src/multimedia/platform/qplatformcameraimagecapture_p.h @@ -65,9 +65,7 @@ public: virtual bool isReadyForCapture() const = 0; virtual int capture(const QString &fileName) = 0; - - virtual QCameraImageCapture::CaptureDestinations captureDestination() const = 0; - virtual void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) = 0; + virtual int captureToBuffer() = 0; virtual QImageEncoderSettings imageSettings() const = 0; virtual void setImageSettings(const QImageEncoderSettings &settings) = 0; diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp index 07d76118d..a93da3004 100644 --- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp +++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp @@ -273,15 +273,6 @@ void tst_QCameraBackend::testCaptureToBuffer() QTRY_COMPARE(camera.status(), QCamera::ActiveStatus); - QSignalSpy destinationChangedSignal(&imageCapture, SIGNAL(captureDestinationChanged(QCameraImageCapture::CaptureDestinations))); - - QCOMPARE(imageCapture.captureDestination(), QCameraImageCapture::CaptureToFile); - imageCapture.setCaptureDestination(QCameraImageCapture::CaptureToBuffer); - QCOMPARE(imageCapture.captureDestination(), QCameraImageCapture::CaptureToBuffer); - QCOMPARE(destinationChangedSignal.size(), 1); - QCOMPARE(destinationChangedSignal.first().first().value<QCameraImageCapture::CaptureDestinations>(), - QCameraImageCapture::CaptureToBuffer); - QSignalSpy capturedSignal(&imageCapture, SIGNAL(imageCaptured(int,QImage))); QSignalSpy imageAvailableSignal(&imageCapture, SIGNAL(imageAvailable(int,QVideoFrame))); QSignalSpy savedSignal(&imageCapture, SIGNAL(imageSaved(int,QString))); @@ -290,7 +281,7 @@ void tst_QCameraBackend::testCaptureToBuffer() camera.start(); QTRY_VERIFY(imageCapture.isReadyForCapture()); - int id = imageCapture.capture(); + int id = imageCapture.captureToBuffer(); QTRY_VERIFY(!imageAvailableSignal.isEmpty()); QVERIFY(errorSignal.isEmpty()); @@ -312,28 +303,6 @@ void tst_QCameraBackend::testCaptureToBuffer() savedSignal.clear(); QTRY_VERIFY(imageCapture.isReadyForCapture()); - - //Try to capture to both buffer and file - imageCapture.setCaptureDestination(QCameraImageCapture::CaptureToBuffer | QCameraImageCapture::CaptureToFile); - - int oldId = id; - id = imageCapture.capture(); - QVERIFY(id != oldId); - QTRY_VERIFY(!savedSignal.isEmpty()); - - QVERIFY(errorSignal.isEmpty()); - QVERIFY(!capturedSignal.isEmpty()); - QVERIFY(!imageAvailableSignal.isEmpty()); - QVERIFY(!savedSignal.isEmpty()); - - QCOMPARE(capturedSignal.first().first().toInt(), id); - QCOMPARE(imageAvailableSignal.first().first().toInt(), id); - - frame = imageAvailableSignal.first().last().value<QVideoFrame>(); - QVERIFY(!frame.image().isNull()); - - QString fileName = savedSignal.first().last().toString(); - QVERIFY(QFileInfo(fileName).exists()); } void tst_QCameraBackend::testCameraCaptureMetadata() diff --git a/tests/auto/unit/mockbackend/mockcameraimagecapturecontrol.h b/tests/auto/unit/mockbackend/mockcameraimagecapturecontrol.h index dcc381403..70d8fa920 100644 --- a/tests/auto/unit/mockbackend/mockcameraimagecapturecontrol.h +++ b/tests/auto/unit/mockbackend/mockcameraimagecapturecontrol.h @@ -67,16 +67,7 @@ public: return -1; } - - QCameraImageCapture::CaptureDestinations captureDestination() const - { - return m_destination; - } - - void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) - { - m_destination = destination; - } + int captureToBuffer() { return -1; } QImageEncoderSettings imageSettings() const { return m_settings; } void setImageSettings(const QImageEncoderSettings &settings) { m_settings = settings; } @@ -106,7 +97,6 @@ private: QString m_fileName; int m_captureRequest; bool m_ready; - QCameraImageCapture::CaptureDestinations m_destination; QImageEncoderSettings m_settings; }; diff --git a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp index 1dc3a8171..b2384ac8b 100644 --- a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp +++ b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp @@ -66,7 +66,6 @@ private slots: void testSimpleCameraExposure(); void testSimpleCameraFocus(); void testSimpleCameraCapture(); - void testSimpleCaptureDestination(); void testCameraWhiteBalance(); void testCameraExposure(); @@ -75,7 +74,6 @@ private slots: void testCameraCaptureMetadata(); void testImageSettings(); void testCameraEncodingProperyChange(); - void testCaptureDestination(); void testConstructor(); void testQCameraIsAvailable(); @@ -266,43 +264,6 @@ void tst_QCamera::testSimpleCameraCapture() QVERIFY(!imageCapture.errorString().isEmpty()); } -void tst_QCamera::testSimpleCaptureDestination() -{ - MockMediaRecorderService::simpleCamera = true; - - QMediaCaptureSession session; - QCamera camera; - QCameraImageCapture imageCapture; - session.setCamera(&camera); - session.setImageCapture(&imageCapture); - - QCOMPARE(imageCapture.captureDestination(), QCameraImageCapture::CaptureToFile); - imageCapture.setCaptureDestination(QCameraImageCapture::CaptureToBuffer); - QCOMPARE(imageCapture.captureDestination(), QCameraImageCapture::CaptureToFile); -} - -void tst_QCamera::testCaptureDestination() -{ - QMediaCaptureSession session; - QCamera camera; - QCameraImageCapture imageCapture; - session.setCamera(&camera); - session.setImageCapture(&imageCapture); - - QSignalSpy destinationChangedSignal(&imageCapture, SIGNAL(captureDestinationChanged(QCameraImageCapture::CaptureDestinations))); - - QCOMPARE(imageCapture.captureDestination(), QCameraImageCapture::CaptureToFile); - imageCapture.setCaptureDestination(QCameraImageCapture::CaptureToBuffer); - QCOMPARE(imageCapture.captureDestination(), QCameraImageCapture::CaptureToBuffer); - QCOMPARE(destinationChangedSignal.size(), 1); - QCOMPARE(destinationChangedSignal.first().first().value<QCameraImageCapture::CaptureDestinations>(), - QCameraImageCapture::CaptureToBuffer); - - imageCapture.setCaptureDestination(QCameraImageCapture::CaptureToBuffer | QCameraImageCapture::CaptureToFile); - QCOMPARE(imageCapture.captureDestination(), QCameraImageCapture::CaptureToBuffer | QCameraImageCapture::CaptureToFile); - QCOMPARE(destinationChangedSignal.size(), 2); -} - void tst_QCamera::testCameraCapture() { QMediaCaptureSession session; |