summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-03-10 09:16:33 +0100
committerLars Knoll <lars.knoll@qt.io>2021-03-23 13:51:39 +0000
commitaa3e6fa8b3c4b1a1af51a1757fcb646c13b18647 (patch)
tree6bea85c42a4b9eeb8b93f18be35cbde1e1bdcf55
parent009ad36c4e52aeeff63fc6549c64d0dfe5c6fe59 (diff)
downloadqtmultimedia-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>
-rw-r--r--src/multimedia/camera/qcameraimagecapture.cpp57
-rw-r--r--src/multimedia/camera/qcameraimagecapture.h16
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol.cpp15
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameraimagecapturecontrol_p.h4
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp26
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h9
-rw-r--r--src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm82
-rw-r--r--src/multimedia/platform/darwin/camera/avfimagecapturecontrol_p.h7
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp11
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture_p.h4
-rw-r--r--src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol.cpp14
-rw-r--r--src/multimedia/platform/qnx/camera/bbcameraimagecapturecontrol_p.h4
-rw-r--r--src/multimedia/platform/qnx/camera/bbcamerasession.cpp27
-rw-r--r--src/multimedia/platform/qnx/camera/bbcamerasession_p.h9
-rw-r--r--src/multimedia/platform/qplatformcameraimagecapture_p.h4
-rw-r--r--tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp33
-rw-r--r--tests/auto/unit/mockbackend/mockcameraimagecapturecontrol.h12
-rw-r--r--tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp39
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;