summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/multimedia/audiorecorder/audiorecorder.cpp3
-rw-r--r--examples/multimedia/audiorecorder/audiorecorder.h2
-rw-r--r--examples/multimediawidgets/camera/camera.cpp9
-rw-r--r--examples/multimediawidgets/camera/camera.h2
-rw-r--r--examples/multimediawidgets/camera/imagesettings.cpp4
-rw-r--r--src/imports/multimedia/qdeclarativecamera.cpp4
-rw-r--r--src/imports/multimedia/qdeclarativecamera_p.h2
-rw-r--r--src/imports/multimedia/qdeclarativecameracapture.cpp65
-rw-r--r--src/imports/multimedia/qdeclarativecameracapture_p.h13
-rw-r--r--src/imports/multimedia/qdeclarativecamerarecorder.cpp5
-rw-r--r--src/imports/multimedia/qdeclarativecamerarecorder_p.h2
-rw-r--r--src/imports/multimedia/qdeclarativetorch.cpp3
-rw-r--r--src/multimedia/camera/qcamera.cpp111
-rw-r--r--src/multimedia/camera/qcamera.h9
-rw-r--r--src/multimedia/camera/qcamera_p.h3
-rw-r--r--src/multimedia/camera/qcameraimagecapture.cpp88
-rw-r--r--src/multimedia/camera/qcameraimagecapture.h14
-rw-r--r--src/multimedia/recording/qmediacapturesession.cpp61
-rw-r--r--src/multimedia/recording/qmediacapturesession.h5
-rw-r--r--src/multimedia/recording/qmediarecorder.cpp48
-rw-r--r--src/multimedia/recording/qmediarecorder.h14
-rw-r--r--src/multimedia/recording/qmediarecorder_p.h8
-rw-r--r--src/qtmultimediaquicktools/qdeclarativevideooutput.cpp13
-rw-r--r--tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp33
-rw-r--r--tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp7
-rw-r--r--tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp37
-rw-r--r--tests/auto/unit/multimedia/qcameraimagecapture/tst_qcameraimagecapture.cpp123
-rw-r--r--tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp103
-rw-r--r--tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp44
29 files changed, 452 insertions, 383 deletions
diff --git a/examples/multimedia/audiorecorder/audiorecorder.cpp b/examples/multimedia/audiorecorder/audiorecorder.cpp
index 821b6481c..0d0ad8355 100644
--- a/examples/multimedia/audiorecorder/audiorecorder.cpp
+++ b/examples/multimedia/audiorecorder/audiorecorder.cpp
@@ -69,7 +69,8 @@ AudioRecorder::AudioRecorder()
{
ui->setupUi(this);
- m_audioRecorder = new QMediaRecorder(QMediaRecorder::AudioOnly, this);
+ m_audioRecorder = new QMediaRecorder(this);
+ m_captureSession.setRecorder(m_audioRecorder);
// ### replace with a monitoring output once we have it.
// m_probe = new QAudioProbe(this);
// connect(m_probe, &QAudioProbe::audioBufferProbed,
diff --git a/examples/multimedia/audiorecorder/audiorecorder.h b/examples/multimedia/audiorecorder/audiorecorder.h
index 4d253d6b6..76968674b 100644
--- a/examples/multimedia/audiorecorder/audiorecorder.h
+++ b/examples/multimedia/audiorecorder/audiorecorder.h
@@ -53,6 +53,7 @@
#include <QMainWindow>
#include <QMediaRecorder>
+#include <QMediaCaptureSession>
#include <QUrl>
QT_BEGIN_NAMESPACE
@@ -88,6 +89,7 @@ private:
Ui::AudioRecorder *ui = nullptr;
+ QMediaCaptureSession m_captureSession;
QMediaRecorder *m_audioRecorder = nullptr;
QList<AudioLevel*> m_audioLevels;
bool m_outputLocationSet = false;
diff --git a/examples/multimediawidgets/camera/camera.cpp b/examples/multimediawidgets/camera/camera.cpp
index b8fd7c4d5..8fa860901 100644
--- a/examples/multimediawidgets/camera/camera.cpp
+++ b/examples/multimediawidgets/camera/camera.cpp
@@ -104,14 +104,17 @@ Camera::Camera() : ui(new Ui::Camera)
void Camera::setCamera(const QCameraInfo &cameraInfo)
{
m_camera.reset(new QCamera(cameraInfo));
+ m_captureSession.setCamera(m_camera.data());
connect(m_camera.data(), &QCamera::activeChanged, this, &Camera::updateCameraActive);
connect(m_camera.data(), &QCamera::errorOccurred, this, &Camera::displayCameraError);
- m_mediaRecorder.reset(new QMediaRecorder(m_camera.data()));
+ m_mediaRecorder.reset(new QMediaRecorder);
+ m_captureSession.setRecorder(m_mediaRecorder.data());
connect(m_mediaRecorder.data(), &QMediaRecorder::stateChanged, this, &Camera::updateRecorderState);
- m_imageCapture = new QCameraImageCapture(m_camera.data());
+ m_imageCapture = new QCameraImageCapture;
+ m_captureSession.setImageCapture(m_imageCapture);
connect(m_mediaRecorder.data(), &QMediaRecorder::durationChanged, this, &Camera::updateRecordTime);
connect(m_mediaRecorder.data(), QOverload<QMediaRecorder::Error>::of(&QMediaRecorder::error),
@@ -119,7 +122,7 @@ void Camera::setCamera(const QCameraInfo &cameraInfo)
connect(ui->exposureCompensation, &QAbstractSlider::valueChanged, this, &Camera::setExposureCompensation);
- m_camera->setViewfinder(ui->viewfinder);
+ m_captureSession.setVideoPreview(ui->viewfinder);
updateCameraActive(m_camera->isActive());
updateRecorderState(m_mediaRecorder->state());
diff --git a/examples/multimediawidgets/camera/camera.h b/examples/multimediawidgets/camera/camera.h
index 8b8968142..fe47acf75 100644
--- a/examples/multimediawidgets/camera/camera.h
+++ b/examples/multimediawidgets/camera/camera.h
@@ -56,6 +56,7 @@
#include <QMediaRecorder>
#include <QScopedPointer>
#include <QMediaMetaData>
+#include <QMediaCaptureSession>
#include <QMainWindow>
@@ -128,6 +129,7 @@ private:
QActionGroup *videoDevicesGroup = nullptr;
+ QMediaCaptureSession m_captureSession;
QScopedPointer<QCamera> m_camera;
QCameraImageCapture *m_imageCapture;
QScopedPointer<QMediaRecorder> m_mediaRecorder;
diff --git a/examples/multimediawidgets/camera/imagesettings.cpp b/examples/multimediawidgets/camera/imagesettings.cpp
index a74982854..df0056029 100644
--- a/examples/multimediawidgets/camera/imagesettings.cpp
+++ b/examples/multimediawidgets/camera/imagesettings.cpp
@@ -55,7 +55,7 @@
#include <QDebug>
#include <QCameraImageCapture>
#include <QCamera>
-
+#include <QMediaCaptureSession>
ImageSettings::ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent) :
QDialog(parent),
@@ -75,7 +75,7 @@ ImageSettings::ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent)
ui->imageQualitySlider->setRange(0, int(QImageEncoderSettings::VeryHighQuality));
ui->imageResolutionBox->addItem(tr("Default Resolution"));
- const QList<QSize> supportedResolutions = imagecapture->camera()->cameraInfo().photoResolutions();
+ const QList<QSize> supportedResolutions = imagecapture->captureSession()->camera()->cameraInfo().photoResolutions();
for (const QSize &resolution : supportedResolutions) {
ui->imageResolutionBox->addItem(QString("%1x%2").arg(resolution.width()).arg(resolution.height()),
QVariant(resolution));
diff --git a/src/imports/multimedia/qdeclarativecamera.cpp b/src/imports/multimedia/qdeclarativecamera.cpp
index 481c2f055..9e4f775a8 100644
--- a/src/imports/multimedia/qdeclarativecamera.cpp
+++ b/src/imports/multimedia/qdeclarativecamera.cpp
@@ -171,8 +171,8 @@ QDeclarativeCamera::QDeclarativeCamera(QObject *parent) :
m_currentCameraInfo = QMediaDeviceManager::defaultVideoInput();
m_camera = new QCamera(m_currentCameraInfo);
- m_imageCapture = new QDeclarativeCameraCapture(m_camera);
- m_videoRecorder = new QDeclarativeCameraRecorder(m_camera);
+ m_imageCapture = new QDeclarativeCameraCapture(&captureSession);
+ m_videoRecorder = new QDeclarativeCameraRecorder(&captureSession);
m_exposure = new QDeclarativeCameraExposure(m_camera);
m_flash = new QDeclarativeCameraFlash(m_camera);
m_torch = new QDeclarativeTorch(m_camera);
diff --git a/src/imports/multimedia/qdeclarativecamera_p.h b/src/imports/multimedia/qdeclarativecamera_p.h
index ebe7b4d2a..c06df6c42 100644
--- a/src/imports/multimedia/qdeclarativecamera_p.h
+++ b/src/imports/multimedia/qdeclarativecamera_p.h
@@ -58,6 +58,7 @@
#include <qcamerainfo.h>
#include <qcameraimageprocessing.h>
#include <qcameraimagecapture.h>
+#include <qmediacapturesession.h>
#include <QtCore/qbasictimer.h>
#include <QtCore/qdatetime.h>
@@ -246,6 +247,7 @@ private:
Q_DISABLE_COPY(QDeclarativeCamera)
void setupDevice(const QString &deviceName);
+ QMediaCaptureSession captureSession;
QCamera *m_camera;
QCameraInfo m_currentCameraInfo;
diff --git a/src/imports/multimedia/qdeclarativecameracapture.cpp b/src/imports/multimedia/qdeclarativecameracapture.cpp
index 59267e792..3360cc319 100644
--- a/src/imports/multimedia/qdeclarativecameracapture.cpp
+++ b/src/imports/multimedia/qdeclarativecameracapture.cpp
@@ -95,11 +95,10 @@ QT_BEGIN_NAMESPACE
*/
-QDeclarativeCameraCapture::QDeclarativeCameraCapture(QCamera *camera)
- : QObject(camera),
- m_camera(camera)
+QDeclarativeCameraCapture::QDeclarativeCameraCapture(QMediaCaptureSession *captureSession)
+ : QObject(captureSession)
{
- m_capture = new QCameraImageCapture(camera);
+ m_capture = new QCameraImageCapture(captureSession);
connect(m_capture, SIGNAL(readyForCaptureChanged(bool)), this, SIGNAL(readyForCaptureChanged(bool)));
connect(m_capture, SIGNAL(imageExposed(int)), this, SIGNAL(imageExposed(int)));
@@ -109,9 +108,6 @@ QDeclarativeCameraCapture::QDeclarativeCameraCapture(QCamera *camera)
connect(m_capture, SIGNAL(imageSaved(int,QString)), this, SLOT(_q_imageSaved(int,QString)));
connect(m_capture, SIGNAL(error(int,QCameraImageCapture::Error,QString)),
this, SLOT(_q_captureFailed(int,QCameraImageCapture::Error,QString)));
-
- connect(m_camera, SIGNAL(statusChanged(QCamera::Status)),
- this, SLOT(_q_cameraStatusChanged(QCamera::Status)));
}
QDeclarativeCameraCapture::~QDeclarativeCameraCapture() = default;
@@ -230,44 +226,12 @@ void QDeclarativeCameraCapture::_q_captureFailed(int id, QCameraImageCapture::Er
emit captureFailed(id, message);
}
-void QDeclarativeCameraCapture::_q_cameraStatusChanged(QCamera::Status status)
-{
- if (status != QCamera::InactiveStatus && status != QCamera::ActiveStatus)
- return;
-
- emit supportedResolutionsChanged();
-}
/*!
\property QDeclarativeCameraCapture::resolution
This property holds the resolution/size of the image to be captured.
If empty, the system chooses the appropriate resolution.
*/
-
-/*!
- \qmlproperty size QtMultimedia::CameraCapture::resolution
-
- This property holds the resolution/size of the image to be captured.
- If empty, the system chooses the appropriate resolution.
-
- \sa supportedResolutions
-*/
-
-QSize QDeclarativeCameraCapture::resolution()
-{
- return m_imageSettings.resolution();
-}
-
-void QDeclarativeCameraCapture::setResolution(const QSize &captureResolution)
-{
- m_imageSettings = m_capture->encodingSettings();
- if (captureResolution != resolution()) {
- m_imageSettings.setResolution(captureResolution);
- m_capture->setEncodingSettings(m_imageSettings);
- emit resolutionChanged(captureResolution);
- }
-}
-
QCameraImageCapture::Error QDeclarativeCameraCapture::error() const
{
return m_capture->error();
@@ -289,29 +253,6 @@ QString QDeclarativeCameraCapture::errorString() const
}
/*!
- \qmlproperty list<size> QtMultimedia::CameraCapture::supportedResolutions
-
- This property holds a list of resolutions which are supported for capturing.
- The information can be used to set a valid \e resolution. If the camera isn't
- loaded, the list will be empty.
-
- \since 5.9
- \sa resolution
- */
-QVariantList QDeclarativeCameraCapture::supportedResolutions()
-{
- QVariantList supportedResolutions;
-
- if (m_camera) {
- auto resolutions = m_camera->cameraInfo().photoResolutions();
- for (const auto &r : resolutions)
- supportedResolutions.append(r);
- }
-
- return supportedResolutions;
-}
-
-/*!
\qmlmethod QtMultimedia::CameraCapture::setMetadata(key, value)
diff --git a/src/imports/multimedia/qdeclarativecameracapture_p.h b/src/imports/multimedia/qdeclarativecameracapture_p.h
index aa6aa8fc6..055b16b1d 100644
--- a/src/imports/multimedia/qdeclarativecameracapture_p.h
+++ b/src/imports/multimedia/qdeclarativecameracapture_p.h
@@ -67,28 +67,22 @@ class QDeclarativeCameraCapture : public QObject
Q_OBJECT
Q_PROPERTY(bool ready READ isReadyForCapture NOTIFY readyForCaptureChanged)
Q_PROPERTY(QString capturedImagePath READ capturedImagePath NOTIFY imageSaved)
- Q_PROPERTY(QSize resolution READ resolution WRITE setResolution NOTIFY resolutionChanged)
Q_PROPERTY(QString errorString READ errorString NOTIFY captureFailed)
- Q_PROPERTY(QVariantList supportedResolutions READ supportedResolutions NOTIFY supportedResolutionsChanged REVISION 1)
public:
~QDeclarativeCameraCapture();
bool isReadyForCapture() const;
- QSize resolution();
-
QString capturedImagePath() const;
QCameraImageCapture::Error error() const;
QString errorString() const;
- QVariantList supportedResolutions();
public Q_SLOTS:
int capture();
int captureToLocation(const QString &location);
void cancelCapture();
- void setResolution(const QSize &resolution);
void setMetadata(QMediaMetaData::Key key, const QVariant &value);
Q_SIGNALS:
@@ -100,20 +94,15 @@ Q_SIGNALS:
void imageSaved(int requestId, const QString &path);
void captureFailed(int requestId, const QString &message);
- void resolutionChanged(const QSize &);
- void supportedResolutionsChanged();
-
private slots:
void _q_imageCaptured(int, const QImage&);
void _q_imageSaved(int, const QString&);
void _q_captureFailed(int, QCameraImageCapture::Error, const QString&);
- void _q_cameraStatusChanged(QCamera::Status status);
private:
friend class QDeclarativeCamera;
- QDeclarativeCameraCapture(QCamera *camera);
+ QDeclarativeCameraCapture(QMediaCaptureSession *captureSession);
- QCamera *m_camera;
QCameraImageCapture *m_capture;
QImageEncoderSettings m_imageSettings;
QString m_capturedImagePath;
diff --git a/src/imports/multimedia/qdeclarativecamerarecorder.cpp b/src/imports/multimedia/qdeclarativecamerarecorder.cpp
index 39d218373..d5e49b6cf 100644
--- a/src/imports/multimedia/qdeclarativecamerarecorder.cpp
+++ b/src/imports/multimedia/qdeclarativecamerarecorder.cpp
@@ -75,10 +75,11 @@ QT_BEGIN_NAMESPACE
\sa QAudioEncoderSettings, QVideoEncoderSettings
*/
-QDeclarativeCameraRecorder::QDeclarativeCameraRecorder(QCamera *camera, QObject *parent) :
+QDeclarativeCameraRecorder::QDeclarativeCameraRecorder(QMediaCaptureSession *session, QObject *parent) :
QObject(parent)
{
- m_recorder = new QMediaRecorder(camera, this);
+ m_recorder = new QMediaRecorder(this);
+ session->setRecorder(m_recorder);
connect(m_recorder, SIGNAL(stateChanged(QMediaRecorder::State)),
SLOT(updateRecorderState(QMediaRecorder::State)));
connect(m_recorder, SIGNAL(statusChanged(QMediaRecorder::Status)),
diff --git a/src/imports/multimedia/qdeclarativecamerarecorder_p.h b/src/imports/multimedia/qdeclarativecamerarecorder_p.h
index 613d00cb6..48a35703a 100644
--- a/src/imports/multimedia/qdeclarativecamerarecorder_p.h
+++ b/src/imports/multimedia/qdeclarativecamerarecorder_p.h
@@ -209,7 +209,7 @@ private slots:
private:
friend class QDeclarativeCamera;
- QDeclarativeCameraRecorder(QCamera *camera, QObject *parent = 0);
+ QDeclarativeCameraRecorder(QMediaCaptureSession *session, QObject *parent = 0);
QMediaRecorder *m_recorder = nullptr;
QDeclarativeMediaMetaData *m_metaData = nullptr;
diff --git a/src/imports/multimedia/qdeclarativetorch.cpp b/src/imports/multimedia/qdeclarativetorch.cpp
index 66f2105f4..d0fabe099 100644
--- a/src/imports/multimedia/qdeclarativetorch.cpp
+++ b/src/imports/multimedia/qdeclarativetorch.cpp
@@ -40,6 +40,7 @@
#include <QDebug>
#include <private/qplatformmediacapture_p.h>
#include <private/qplatformcamera_p.h>
+#include <qmediacapturesession.h>
#include "qdeclarativetorch_p.h"
@@ -73,7 +74,7 @@ QDeclarativeTorch::QDeclarativeTorch(QCamera *camera)
{
if (!camera)
return;
- auto *service = m_camera->captureInterface();
+ auto *service = m_camera->captureSession()->platformSession();
m_exposure = service->cameraControl()->exposureControl();
if (m_exposure)
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index 3db7040a5..e1a964fcd 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -49,6 +49,7 @@
#include <private/qplatformmediaintegration_p.h>
#include <private/qplatformmediacapture_p.h>
#include <qmediadevicemanager.h>
+#include <qmediacapturesession.h>
#include <QDebug>
@@ -87,33 +88,30 @@ void QCameraPrivate::_q_error(int error, const QString &errorString)
void QCameraPrivate::init()
{
Q_Q(QCamera);
- initControls();
- cameraExposure = new QCameraExposure(q, control);
- cameraFocus = new QCameraFocus(q, control);
- imageProcessing = new QCameraImageProcessing(q, control);
-}
-
-void QCameraPrivate::initControls()
-{
- Q_Q(QCamera);
-
- captureInterface = QPlatformMediaIntegration::instance()->createCaptureSession(QMediaRecorder::AudioAndVideo);
- if (captureInterface) {
+ control = nullptr;
+ if (captureInterface && !cameraInfo.isNull()) {
control = captureInterface->cameraControl();
-
- if (control) {
- q->connect(control, SIGNAL(activeChanged(bool)), q, SIGNAL(activeChanged(bool)));
- q->connect(control, SIGNAL(statusChanged(QCamera::Status)), q, SIGNAL(statusChanged(QCamera::Status)));
- q->connect(control, SIGNAL(error(int,QString)), q, SLOT(_q_error(int,QString)));
- }
-
- error = QCamera::NoError;
+ control->setCamera(cameraInfo);
} else {
- control = nullptr;
+ clear();
+ error = QCamera::CameraError;
+ errorString = QCamera::tr("The camera is not connected to a capture session");
+ return;
+ }
+ if (!control) {
+ clear();
error = QCamera::CameraError;
- errorString = QCamera::tr("The camera captureInterface is missing");
+ errorString = QCamera::tr("The capture session doesn't support cameras.");
+ return;
}
+
+ q->connect(control, SIGNAL(activeChanged(bool)), q, SIGNAL(activeChanged(bool)));
+ q->connect(control, SIGNAL(statusChanged(QCamera::Status)), q, SIGNAL(statusChanged(QCamera::Status)));
+ q->connect(control, SIGNAL(error(int,QString)), q, SLOT(_q_error(int,QString)));
+ cameraExposure = new QCameraExposure(q, control);
+ cameraFocus = new QCameraFocus(q, control);
+ imageProcessing = new QCameraImageProcessing(q, control);
}
void QCameraPrivate::clear()
@@ -151,6 +149,7 @@ QCamera::QCamera(const QCameraInfo &cameraInfo, QObject *parent)
: QObject(*new QCameraPrivate, parent)
{
Q_D(QCamera);
+
d->init();
setCameraInfo(cameraInfo);
}
@@ -191,7 +190,9 @@ QCamera::QCamera(QCameraInfo::Position position, QObject *parent)
QCamera::~QCamera()
{
Q_D(QCamera);
- d->clear();
+ if (d->captureSession)
+ d->captureSession->setCamera(nullptr);
+ Q_ASSERT(!d->captureSession);
}
/*!
@@ -206,13 +207,14 @@ bool QCamera::isAvailable() const
bool QCamera::isActive() const
{
Q_D(const QCamera);
- return d->control->isActive();
+ return d->control && d->control->isActive();
}
void QCamera::setActive(bool active)
{
Q_D(const QCamera);
- d->control->setActive(active);
+ if (d->control)
+ d->control->setActive(active);
}
/*!
@@ -240,38 +242,6 @@ QCameraImageProcessing *QCamera::imageProcessing() const
}
/*!
- Sets a QObject based camera \a viewfinder.
-
- A QObject based viewfinder is expected to have an invokable videoSurface()
- method that returns a QAbstractVideoSurface.
-
- The previously set viewfinder is detached.
-*/
-void QCamera::setViewfinder(QObject *viewfinder)
-{
- auto *mo = viewfinder->metaObject();
- QAbstractVideoSurface *surface = nullptr;
- if (viewfinder && !mo->invokeMethod(viewfinder, "videoSurface", Q_RETURN_ARG(QAbstractVideoSurface *, surface))) {
- qWarning() << "QCamera::setViewFinder: Object" << viewfinder->metaObject()->className() << "does not have a videoSurface()";
- return;
- }
- setViewfinder(surface);
-}
-
-/*!
- Sets a video \a surface as the viewfinder of a camera.
-
- If a viewfinder has already been set on the camera the new surface
- will replace it.
-*/
-
-void QCamera::setViewfinder(QAbstractVideoSurface *surface)
-{
- Q_D(QCamera);
- d->control->setVideoSurface(surface);
-}
-
-/*!
Returns the error state of the object.
*/
@@ -288,14 +258,6 @@ QString QCamera::errorString() const
return d_func()->errorString;
}
-/*!
- \internal
- */
-QPlatformMediaCaptureSession *QCamera::captureInterface() const
-{
- return d_func()->captureInterface;
-}
-
/*! \fn void QCamera::start()
Starts the camera.
@@ -326,6 +288,20 @@ QCamera::Status QCamera::status() const
return QCamera::UnavailableStatus;
}
+QMediaCaptureSession *QCamera::captureSession() const
+{
+ Q_D(const QCamera);
+ return d->captureSession;
+}
+
+void QCamera::setCaptureSession(QMediaCaptureSession *session)
+{
+ Q_D(QCamera);
+ d->captureSession = session;
+ d->captureInterface = session ? session->platformSession() : nullptr;
+ d->init();
+}
+
/*!
Returns the QCameraInfo object associated with this camera.
*/
@@ -338,10 +314,7 @@ QCameraInfo QCamera::cameraInfo() const
void QCamera::setCameraInfo(const QCameraInfo &cameraInfo)
{
Q_D(QCamera);
- if (cameraInfo.isNull())
- d->cameraInfo = QMediaDeviceManager::defaultVideoInput();
- else
- d->cameraInfo = cameraInfo;
+ d->cameraInfo = cameraInfo;
if (d->control)
d->control->setCamera(d->cameraInfo);
}
diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h
index 11b11b1a4..63003ecf4 100644
--- a/src/multimedia/camera/qcamera.h
+++ b/src/multimedia/camera/qcamera.h
@@ -61,6 +61,7 @@ QT_BEGIN_NAMESPACE
class QAbstractVideoSurface;
class QCameraInfo;
class QPlatformMediaCaptureSession;
+class QMediaCaptureSession;
class QCameraPrivate;
class Q_MULTIMEDIA_EXPORT QCamera : public QObject
@@ -96,6 +97,8 @@ public:
Status status() const;
+ QMediaCaptureSession *captureSession() const;
+
QCameraInfo cameraInfo() const;
void setCameraInfo(const QCameraInfo &cameraInfo);
@@ -103,13 +106,9 @@ public:
QCameraFocus *focus() const;
QCameraImageProcessing *imageProcessing() const;
- void setViewfinder(QObject *viewfinder);
- void setViewfinder(QAbstractVideoSurface *surface);
-
Error error() const;
QString errorString() const;
- QPlatformMediaCaptureSession *captureInterface() const;
public Q_SLOTS:
void setActive(bool active);
void start() { setActive(true); }
@@ -121,6 +120,8 @@ Q_SIGNALS:
void errorOccurred(QCamera::Error);
private:
+ void setCaptureSession(QMediaCaptureSession *session);
+ friend class QMediaCaptureSession;
Q_DISABLE_COPY(QCamera)
Q_DECLARE_PRIVATE(QCamera)
Q_PRIVATE_SLOT(d_func(), void _q_error(int, const QString &))
diff --git a/src/multimedia/camera/qcamera_p.h b/src/multimedia/camera/qcamera_p.h
index 5ef2566a4..f0f1c2553 100644
--- a/src/multimedia/camera/qcamera_p.h
+++ b/src/multimedia/camera/qcamera_p.h
@@ -71,13 +71,14 @@ public:
}
void init();
- void initControls();
void clear();
+ QMediaCaptureSession *captureSession = nullptr;
QPlatformMediaCaptureSession *captureInterface = nullptr;
QPlatformCamera *control = nullptr;
+ QCameraInfo cameraDevice;
QCameraExposure *cameraExposure = nullptr;
QCameraFocus *cameraFocus = nullptr;
QCameraImageProcessing *imageProcessing = nullptr;
diff --git a/src/multimedia/camera/qcameraimagecapture.cpp b/src/multimedia/camera/qcameraimagecapture.cpp
index b3528f9aa..e11b0cf28 100644
--- a/src/multimedia/camera/qcameraimagecapture.cpp
+++ b/src/multimedia/camera/qcameraimagecapture.cpp
@@ -41,6 +41,7 @@
#include <qmediaencodersettings.h>
#include <qmediametadata.h>
#include <private/qplatformmediacapture_p.h>
+#include <qmediacapturesession.h>
#include "private/qobject_p.h"
#include <qcamera.h>
@@ -85,6 +86,7 @@ class QCameraImageCapturePrivate
public:
QCamera *camera = nullptr;
+ QMediaCaptureSession *captureSession = nullptr;
QPlatformCameraImageCapture *control = nullptr;
QCameraImageCapture::Error error = QCameraImageCapture::NoError;
@@ -93,7 +95,6 @@ public:
void _q_error(int id, int error, const QString &errorString);
void _q_readyChanged(bool);
- void _q_serviceDestroyed();
void unsetError() { error = QCameraImageCapture::NoError; errorString.clear(); }
@@ -116,56 +117,48 @@ void QCameraImageCapturePrivate::_q_readyChanged(bool ready)
emit q->readyForCaptureChanged(ready);
}
-void QCameraImageCapturePrivate::_q_serviceDestroyed()
-{
- camera = nullptr;
- control = nullptr;
-}
-
/*!
Constructs a media recorder which records the media produced by \a camera.
The \a camera is also used as the parent of this object.
*/
-QCameraImageCapture::QCameraImageCapture(QCamera *camera)
- : QObject(camera), d_ptr(new QCameraImageCapturePrivate)
+QCameraImageCapture::QCameraImageCapture(QObject *parent)
+ : QObject(parent), d_ptr(new QCameraImageCapturePrivate)
{
- Q_ASSERT(camera);
Q_D(QCameraImageCapture);
-
d->q_ptr = this;
- d->camera = camera;
-
- QPlatformMediaCaptureSession *service = camera->captureInterface();
- if (service) {
- d->control = service->imageCaptureControl();
-
- if (d->control) {
- connect(d->control, SIGNAL(imageExposed(int)),
- this, SIGNAL(imageExposed(int)));
- connect(d->control, SIGNAL(imageCaptured(int,QImage)),
- this, SIGNAL(imageCaptured(int,QImage)));
- connect(d->control, SIGNAL(imageMetadataAvailable(int,const QMediaMetaData&)),
- this, SIGNAL(imageMetadataAvailable(int,const QMediaMetaData&)));
- connect(d->control, SIGNAL(imageAvailable(int,QVideoFrame)),
- this, SIGNAL(imageAvailable(int,QVideoFrame)));
- connect(d->control, SIGNAL(imageSaved(int,QString)),
- this, SIGNAL(imageSaved(int,QString)));
- connect(d->control, SIGNAL(readyForCaptureChanged(bool)),
- this, SLOT(_q_readyChanged(bool)));
- connect(d->control, SIGNAL(error(int,int,QString)),
- this, SLOT(_q_error(int,int,QString)));
-
- connect(service, SIGNAL(destroyed()), this, SLOT(_q_serviceDestroyed()));
-
- return;
- }
+}
+
+void QCameraImageCapture::setCaptureSession(QMediaCaptureSession *session)
+{
+ Q_D(QCameraImageCapture);
+ d->captureSession = session;
+
+ if (!session) {
+ d->control = nullptr;
+ return;
}
- // without QPlatformCameraImageCapture discard the camera
- d->camera = nullptr;
- d->control = nullptr;
+ d->control = session->platformSession()->imageCaptureControl();
+
+ if (!d->control)
+ return;
+
+ connect(d->control, SIGNAL(imageExposed(int)),
+ this, SIGNAL(imageExposed(int)));
+ connect(d->control, SIGNAL(imageCaptured(int,QImage)),
+ this, SIGNAL(imageCaptured(int,QImage)));
+ connect(d->control, SIGNAL(imageMetadataAvailable(int,const QMediaMetaData&)),
+ this, SIGNAL(imageMetadataAvailable(int,const QMediaMetaData&)));
+ connect(d->control, SIGNAL(imageAvailable(int,QVideoFrame)),
+ this, SIGNAL(imageAvailable(int,QVideoFrame)));
+ connect(d->control, SIGNAL(imageSaved(int,QString)),
+ this, SIGNAL(imageSaved(int,QString)));
+ connect(d->control, SIGNAL(readyForCaptureChanged(bool)),
+ this, SLOT(_q_readyChanged(bool)));
+ connect(d->control, SIGNAL(error(int,int,QString)),
+ this, SLOT(_q_error(int,int,QString)));
}
/*!
@@ -174,18 +167,12 @@ QCameraImageCapture::QCameraImageCapture(QCamera *camera)
QCameraImageCapture::~QCameraImageCapture()
{
+ if (d_ptr->captureSession)
+ d_ptr->captureSession->setImageCapture(nullptr);
delete d_ptr;
}
/*!
- \reimp
-*/
-QCamera *QCameraImageCapture::camera() const
-{
- return d_func()->camera;
-}
-
-/*!
Returns true if the images capture service ready to use.
*/
bool QCameraImageCapture::isAvailable() const
@@ -193,6 +180,11 @@ bool QCameraImageCapture::isAvailable() const
return d_func()->control != nullptr;
}
+QMediaCaptureSession *QCameraImageCapture::captureSession() const
+{
+ return d_ptr->captureSession;
+}
+
/*!
Returns the current error state.
diff --git a/src/multimedia/camera/qcameraimagecapture.h b/src/multimedia/camera/qcameraimagecapture.h
index 785ab1d78..1eb72a63b 100644
--- a/src/multimedia/camera/qcameraimagecapture.h
+++ b/src/multimedia/camera/qcameraimagecapture.h
@@ -56,6 +56,7 @@ QT_BEGIN_NAMESPACE
class QImageEncoderSettings;
class QCamera;
+class QMediaCaptureSession;
class QCameraImageCapturePrivate;
class Q_MULTIMEDIA_EXPORT QCameraImageCapture : public QObject
@@ -82,12 +83,12 @@ public:
};
Q_DECLARE_FLAGS(CaptureDestinations, CaptureDestination)
- explicit QCameraImageCapture(QCamera *camera);
+ explicit QCameraImageCapture(QObject *parent = nullptr);
~QCameraImageCapture();
bool isAvailable() const;
- QCamera *camera() const;
+ QMediaCaptureSession *captureSession() const;
Error error() const;
QString errorString() const;
@@ -120,14 +121,17 @@ Q_SIGNALS:
void imageAvailable(int id, const QVideoFrame &frame);
void imageSaved(int id, const QString &fileName);
-protected:
- QCameraImageCapturePrivate *d_ptr;
private:
+ // This is here to flag an incompatibilities with Qt 5
+ QCameraImageCapture(QCamera *) = delete;
+
+ friend class QMediaCaptureSession;
+ void setCaptureSession(QMediaCaptureSession *session);
+ QCameraImageCapturePrivate *d_ptr;
Q_DISABLE_COPY(QCameraImageCapture)
Q_DECLARE_PRIVATE(QCameraImageCapture)
Q_PRIVATE_SLOT(d_func(), void _q_error(int, int, const QString &))
Q_PRIVATE_SLOT(d_func(), void _q_readyChanged(bool))
- Q_PRIVATE_SLOT(d_func(), void _q_serviceDestroyed())
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QCameraImageCapture::CaptureDestinations)
diff --git a/src/multimedia/recording/qmediacapturesession.cpp b/src/multimedia/recording/qmediacapturesession.cpp
index bac3da3e2..251f09b51 100644
--- a/src/multimedia/recording/qmediacapturesession.cpp
+++ b/src/multimedia/recording/qmediacapturesession.cpp
@@ -39,21 +39,23 @@
#include "qmediacapturesession.h"
#include "qaudiodeviceinfo.h"
-#include "qplatformmediaintegration_p.h"
#include "qcamera.h"
#include "qmediarecorder.h"
#include "qcameraimagecapture.h"
+#include "qplatformmediaintegration_p.h"
+#include "qplatformmediacapture_p.h"
+
QT_BEGIN_NAMESPACE
class QMediaCaptureSessionPrivate
{
public:
QPlatformMediaCaptureSession *captureSession;
- QCamera *camera;
QAudioDeviceInfo audioInput;
- QCameraImageCapture *imageCapture;
- QMediaRecorder *recorder;
+ QCamera *camera = nullptr;
+ QCameraImageCapture *imageCapture = nullptr;
+ QMediaRecorder *recorder = nullptr;
};
@@ -104,7 +106,14 @@ QCamera *QMediaCaptureSession::camera() const
void QMediaCaptureSession::setCamera(QCamera *camera)
{
+ if (d_ptr->camera == camera)
+ return;
+ if (d_ptr->camera)
+ d_ptr->camera->setCaptureSession(nullptr);
+
d_ptr->camera = camera;
+ if (d_ptr->camera)
+ d_ptr->camera->setCaptureSession(this);
emit cameraChanged();
}
@@ -115,7 +124,14 @@ QCameraImageCapture *QMediaCaptureSession::imageCapture()
void QMediaCaptureSession::setImageCapture(QCameraImageCapture *imageCapture)
{
+ if (d_ptr->imageCapture == imageCapture)
+ return;
+ if (d_ptr->imageCapture)
+ d_ptr->imageCapture->setCaptureSession(nullptr);
+
d_ptr->imageCapture = imageCapture;
+ if (d_ptr->imageCapture)
+ d_ptr->imageCapture->setCaptureSession(this);
emit imageCaptureChanged();
}
@@ -126,10 +142,47 @@ QMediaRecorder *QMediaCaptureSession::recorder()
void QMediaCaptureSession::setRecorder(QMediaRecorder *recorder)
{
+ if (d_ptr->recorder == recorder)
+ return;
+ if (d_ptr->recorder)
+ d_ptr->recorder->setCaptureSession(nullptr);
+
d_ptr->recorder = recorder;
+ if (d_ptr->recorder)
+ d_ptr->recorder->setCaptureSession(this);
emit recorderChanged();
}
+/*!
+ Sets a QObject based video preview for the capture session.
+
+ A QObject based preview is expected to have an invokable videoSurface()
+ method that returns a QAbstractVideoSurface.
+
+ The previously set preview is detached.
+*/
+void QMediaCaptureSession::setVideoPreview(QObject *preview)
+{
+ auto *mo = preview->metaObject();
+ QAbstractVideoSurface *surface = nullptr;
+ if (preview && !mo->invokeMethod(preview, "videoSurface", Q_RETURN_ARG(QAbstractVideoSurface *, surface))) {
+ qWarning() << "QCamera::setViewFinder: Object" << preview->metaObject()->className() << "does not have a videoSurface()";
+ return;
+ }
+ setVideoPreview(surface);
+}
+
+/*!
+ Sets a video \a surface as the preview for the capture session.
+
+ If a preview has already been set on the session, the new surface
+ will replace it.
+*/
+void QMediaCaptureSession::setVideoPreview(QAbstractVideoSurface *preview)
+{
+ d_ptr->captureSession->setVideoPreview(preview);
+}
+
QPlatformMediaCaptureSession *QMediaCaptureSession::platformSession() const
{
return d_ptr->captureSession;
diff --git a/src/multimedia/recording/qmediacapturesession.h b/src/multimedia/recording/qmediacapturesession.h
index 05eb20405..db2976385 100644
--- a/src/multimedia/recording/qmediacapturesession.h
+++ b/src/multimedia/recording/qmediacapturesession.h
@@ -47,9 +47,11 @@ QT_BEGIN_NAMESPACE
class QCamera;
class QAudioDeviceInfo;
+class QCameraInfo;
class QCameraImageCapture; // ### rename to QMediaImageCapture
class QMediaRecorder;
class QPlatformMediaCaptureSession;
+class QAbstractVideoSurface;
class QMediaCaptureSessionPrivate;
class Q_MULTIMEDIA_EXPORT QMediaCaptureSession : public QObject
@@ -77,6 +79,9 @@ public:
QMediaRecorder *recorder();
void setRecorder(QMediaRecorder *recorder);
+ void setVideoPreview(QObject *preview);
+ void setVideoPreview(QAbstractVideoSurface *preview);
+
QPlatformMediaCaptureSession *platformSession() const;
Q_SIGNALS:
diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp
index e480eb45b..7cd5b2a32 100644
--- a/src/multimedia/recording/qmediarecorder.cpp
+++ b/src/multimedia/recording/qmediarecorder.cpp
@@ -43,6 +43,7 @@
#include <private/qplatformmediarecorder_p.h>
#include <qaudiodeviceinfo.h>
#include <qcamera.h>
+#include <qmediacapturesession.h>
#include <private/qplatformcamera_p.h>
#include <private/qplatformmediaintegration_p.h>
#include <private/qplatformmediacapture_p.h>
@@ -126,29 +127,12 @@ void QMediaRecorderPrivate::_q_applySettings()
Constructs a media recorder which records the media produced by a microphone and camera.
*/
-QMediaRecorder::QMediaRecorder(QMediaRecorder::CaptureMode mode, QObject *parent)
+QMediaRecorder::QMediaRecorder(QObject *parent)
: QObject(parent),
d_ptr(new QMediaRecorderPrivate)
{
Q_D(QMediaRecorder);
d->q_ptr = this;
-
- if (mode != AudioOnly) {
- setCamera(new QCamera(this));
- } else {
- auto *captureIface = QPlatformMediaIntegration::instance()->createCaptureSession(mode);
- d->control = captureIface->mediaRecorderControl();
- }
-}
-
-QMediaRecorder::QMediaRecorder(QCamera *camera, QObject *parent)
- : QObject(parent),
- d_ptr(new QMediaRecorderPrivate)
-{
- Q_D(QMediaRecorder);
- d->q_ptr = this;
-
- setCamera(camera);
}
/*!
@@ -157,23 +141,31 @@ QMediaRecorder::QMediaRecorder(QCamera *camera, QObject *parent)
QMediaRecorder::~QMediaRecorder()
{
+ if (d_ptr->captureSession)
+ d_ptr->captureSession->setRecorder(nullptr);
delete d_ptr;
}
/*!
\internal
*/
-bool QMediaRecorder::setCamera(QCamera *object)
+void QMediaRecorder::setCaptureSession(QMediaCaptureSession *session)
{
Q_D(QMediaRecorder);
- Q_ASSERT(!d->camera);
+ if (d->captureSession == session)
+ return;
- d->camera = object;
+ if (d->control)
+ d->control->disconnect(this);
+
+ d->captureSession = session;
- auto *service = d->camera->captureInterface();
- Q_ASSERT(service);
+ if (!d->captureSession) {
+ d->control = nullptr;
+ return;
+ }
- d->control = service->mediaRecorderControl();
+ d->control = d->captureSession->platformSession()->mediaRecorderControl();
Q_ASSERT(d->control);
connect(d->control, SIGNAL(stateChanged(QMediaRecorder::State)),
@@ -202,7 +194,6 @@ bool QMediaRecorder::setCamera(QCamera *object)
d->applySettingsLater();
- return true;
}
/*!
@@ -603,13 +594,14 @@ QCameraInfo QMediaRecorder::videoInput() const
{
Q_D(const QMediaRecorder);
- return d->camera ? d->camera->cameraInfo() : QCameraInfo();
+ auto *camera = d->captureSession->camera();
+ return camera ? camera->cameraInfo() : QCameraInfo();
}
-QCamera *QMediaRecorder::camera() const
+QMediaCaptureSession *QMediaRecorder::captureSession() const
{
Q_D(const QMediaRecorder);
- return d->camera;
+ return d->captureSession;
}
/*!
diff --git a/src/multimedia/recording/qmediarecorder.h b/src/multimedia/recording/qmediarecorder.h
index b024b8a22..eb0c02b56 100644
--- a/src/multimedia/recording/qmediarecorder.h
+++ b/src/multimedia/recording/qmediarecorder.h
@@ -59,6 +59,7 @@ class QMediaRecorderService;
class QAudioEncoderSettings;
class QVideoEncoderSettings;
class QAudioDeviceInfo;
+class QMediaCaptureSession;
class QMediaRecorderPrivate;
class Q_MULTIMEDIA_EXPORT QMediaRecorder : public QObject
@@ -107,8 +108,7 @@ public:
AudioAndVideo
};
- QMediaRecorder(CaptureMode mode = AudioOnly, QObject *parent = nullptr);
- explicit QMediaRecorder(QCamera *mediaSource, QObject *parent = nullptr);
+ QMediaRecorder(QObject *parent = nullptr);
~QMediaRecorder();
bool isAvailable() const;
@@ -139,7 +139,7 @@ public:
QAudioDeviceInfo audioInput() const;
QCameraInfo videoInput() const;
- QCamera *camera() const;
+ QMediaCaptureSession *captureSession() const;
public Q_SLOTS:
void record();
@@ -162,11 +162,13 @@ Q_SIGNALS:
void metaDataChanged();
-protected:
- bool setCamera(QCamera *object);
+private:
+ // This is here to flag an incompatibilities with Qt 5
+ QMediaRecorder(QCamera *) = delete;
QMediaRecorderPrivate *d_ptr;
-private:
+ friend class QMediaCaptureSession;
+ void setCaptureSession(QMediaCaptureSession *session);
Q_DISABLE_COPY(QMediaRecorder)
Q_DECLARE_PRIVATE(QMediaRecorder)
Q_PRIVATE_SLOT(d_func(), void _q_stateChanged(QMediaRecorder::State))
diff --git a/src/multimedia/recording/qmediarecorder_p.h b/src/multimedia/recording/qmediarecorder_p.h
index 096236a05..2cadc709a 100644
--- a/src/multimedia/recording/qmediarecorder_p.h
+++ b/src/multimedia/recording/qmediarecorder_p.h
@@ -64,20 +64,16 @@ class QAudioEncoderSettingsControl;
class QVideoEncoderSettingsControl;
class QTimer;
-#define Q_DECLARE_NON_CONST_PUBLIC(Class) \
- inline Class* q_func() { return static_cast<Class *>(q_ptr); } \
- friend class Class;
-
class QMediaRecorderPrivate
{
- Q_DECLARE_NON_CONST_PUBLIC(QMediaRecorder)
+ Q_DECLARE_PUBLIC(QMediaRecorder)
public:
QMediaRecorderPrivate() = default;
void applySettingsLater();
- QPointer<QCamera> camera;
+ QMediaCaptureSession *captureSession = nullptr;
QPlatformMediaRecorder *control = nullptr;
diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
index 7cea41330..4699a6c20 100644
--- a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
@@ -43,7 +43,7 @@
#include "qdeclarativevideooutput_p.h"
#include <private/qvideooutputorientationhandler_p.h>
#include <QtMultimedia/qmediaplayer.h>
-#include <QtMultimedia/qcamera.h>
+#include <QtMultimedia/qmediacapturesession.h>
#include <private/qfactoryloader_p.h>
#include <QtCore/qloggingcategory.h>
@@ -176,19 +176,18 @@ void QDeclarativeVideoOutput::setSource(QObject *source)
return;
m_source = source;
- QObject *s = source;
- if (s) {
+ if (source) {
const QMetaObject *metaObject = m_source.data()->metaObject();
int mediaSourcePropertyIndex = metaObject->indexOfProperty("mediaSource");
if (mediaSourcePropertyIndex != -1) {
const QMetaProperty mediaSourceProperty = metaObject->property(mediaSourcePropertyIndex);
- s = mediaSourceProperty.read(s).value<QObject *>();
+ source = mediaSourceProperty.read(source).value<QObject *>();
}
}
- if (QCamera *c = qobject_cast<QCamera *>(s)) {
- c->setViewfinder(videoSurface());
- } else if (QMediaPlayer *p = qobject_cast<QMediaPlayer *>(s)) {
+ if (QMediaCaptureSession *s = qobject_cast<QMediaCaptureSession *>(source)) {
+ s->setVideoPreview(videoSurface());
+ } else if (QMediaPlayer *p = qobject_cast<QMediaPlayer *>(source)) {
p->setVideoOutput(videoSurface());
}
emit sourceChanged();
diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
index 190f54e16..7923689b7 100644
--- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
+++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
@@ -41,6 +41,7 @@
#include <qcamera.h>
#include <qcamerainfo.h>
#include <qcameraimagecapture.h>
+#include <qmediacapturesession.h>
#include <qobject.h>
#include <qmediadevicemanager.h>
#include <qmediarecorder.h>
@@ -155,8 +156,11 @@ void tst_QCameraBackend::testCtorWithPosition()
void tst_QCameraBackend::testCameraStates()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
QSignalSpy errorSignal(&camera, SIGNAL(errorOccurred(QCamera::Error)));
QSignalSpy activeChangedSignal(&camera, SIGNAL(activeChanged()));
@@ -183,8 +187,12 @@ void tst_QCameraBackend::testCameraStates()
void tst_QCameraBackend::testCameraStartError()
{
+ QMediaCaptureSession session1;
+ QMediaCaptureSession session2;
QCamera camera1(QMediaDeviceManager::defaultVideoInput());
QCamera camera2(QMediaDeviceManager::defaultVideoInput());
+ session1.setCamera(&camera1);
+ session2.setCamera(&camera2);
QSignalSpy errorSpy1(&camera1, &QCamera::errorOccurred);
QSignalSpy errorSpy2(&camera2, &QCamera::errorOccurred);
@@ -203,8 +211,12 @@ void tst_QCameraBackend::testCameraStartError()
void tst_QCameraBackend::testCameraCapture()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
//prevents camera to flash during the test
camera.exposure()->setFlashMode(QCameraExposure::FlashOff);
@@ -249,8 +261,12 @@ void tst_QCameraBackend::testCameraCapture()
void tst_QCameraBackend::testCaptureToBuffer()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
camera.exposure()->setFlashMode(QCameraExposure::FlashOff);
camera.setActive(true);
@@ -324,8 +340,12 @@ void tst_QCameraBackend::testCameraCaptureMetadata()
{
QSKIP("Capture metadata is supported only on harmattan");
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
camera.exposure()->setFlashMode(QCameraExposure::FlashOff);
QSignalSpy metadataSignal(&imageCapture, SIGNAL(imageMetadataAvailable(int,const QMediaMetaData&)));
@@ -421,9 +441,12 @@ void tst_QCameraBackend::testVideoRecording()
{
QFETCH(QCameraInfo, device);
+ QMediaCaptureSession session;
QScopedPointer<QCamera> camera(new QCamera(device));
+ session.setCamera(camera.data());
- QMediaRecorder recorder(camera.data());
+ QMediaRecorder recorder;
+ session.setRecorder(&recorder);
QSignalSpy errorSignal(camera.data(), SIGNAL(errorOccurred(QCamera::Error)));
QSignalSpy recorderErrorSignal(&recorder, SIGNAL(error(QMediaRecorder::Error)));
diff --git a/tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp b/tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp
index b599cdbf5..6a1b4aa55 100644
--- a/tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp
+++ b/tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp
@@ -35,6 +35,7 @@
#include <private/qplatformmediarecorder_p.h>
#include <qaudiodeviceinfo.h>
#include <qaudioinput.h>
+#include <qmediacapturesession.h>
//TESTED_COMPONENT=src/multimedia
@@ -106,9 +107,11 @@ void tst_QAudioRecorder::testNullControl()
void tst_QAudioRecorder::testAudioSource()
{
- audiosource = new QMediaRecorder(QMediaRecorder::AudioOnly);
+ QMediaCaptureSession session;
+ audiosource = new QMediaRecorder;
+ session.setRecorder(audiosource);
- QCOMPARE(audiosource->camera(), nullptr);
+ QCOMPARE(session.camera(), nullptr);
}
void tst_QAudioRecorder::testDevices()
diff --git a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp
index a9a94b7c5..bbf405ad0 100644
--- a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp
+++ b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp
@@ -40,6 +40,7 @@
#include <qcamera.h>
#include <qcamerainfo.h>
#include <qcameraimagecapture.h>
+#include <qmediacapturesession.h>
#include <qobject.h>
#include <qmediadevicemanager.h>
@@ -246,8 +247,11 @@ void tst_QCamera::testSimpleCameraCapture()
{
MockMediaRecorderService::simpleCamera = true;
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
QVERIFY(!imageCapture.isReadyForCapture());
QVERIFY(!imageCapture.isAvailable());
@@ -266,8 +270,11 @@ void tst_QCamera::testSimpleCaptureDestination()
{
MockMediaRecorderService::simpleCamera = true;
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
QCOMPARE(imageCapture.captureDestination(), QCameraImageCapture::CaptureToFile);
imageCapture.setCaptureDestination(QCameraImageCapture::CaptureToBuffer);
@@ -276,8 +283,11 @@ void tst_QCamera::testSimpleCaptureDestination()
void tst_QCamera::testCaptureDestination()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
QSignalSpy destinationChangedSignal(&imageCapture, SIGNAL(captureDestinationChanged(QCameraImageCapture::CaptureDestinations)));
@@ -295,8 +305,11 @@ void tst_QCamera::testCaptureDestination()
void tst_QCamera::testCameraCapture()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
QVERIFY(!imageCapture.isReadyForCapture());
@@ -323,8 +336,11 @@ void tst_QCamera::testCameraCapture()
void tst_QCamera::testCameraCaptureMetadata()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
QSignalSpy metadataSignal(&imageCapture, SIGNAL(imageMetadataAvailable(int,const QMediaMetaData&)));
QSignalSpy savedSignal(&imageCapture, SIGNAL(imageSaved(int,QString)));
@@ -644,8 +660,11 @@ void tst_QCamera::testImageSettings()
void tst_QCamera::testCameraEncodingProperyChange()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
QSignalSpy stateChangedSignal(&camera, SIGNAL(stateChanged(QCamera::State)));
QSignalSpy statusChangedSignal(&camera, SIGNAL(statusChanged(QCamera::Status)));
@@ -665,7 +684,7 @@ void tst_QCamera::testSetVideoOutput()
MockVideoSurface surface;
QCamera camera;
- camera.setViewfinder(static_cast<QAbstractVideoSurface *>(nullptr));
+// camera.setViewfinder(static_cast<QAbstractVideoSurface *>(nullptr));
// QCOMPARE(mockCameraService->rendererRef, 0);
@@ -701,7 +720,7 @@ void tst_QCamera::testSetVideoOutputNoService()
integration->setFlags(QMockIntegration::NoCaptureInterface);
QCamera camera;
- camera.setViewfinder(&surface);
+// camera.setViewfinder(&surface);
// Nothing we can verify here other than it doesn't assert.
}
@@ -711,7 +730,7 @@ void tst_QCamera::testSetVideoOutputDestruction()
{
QCamera camera;
- camera.setViewfinder(&surface);
+// camera.setViewfinder(&surface);
}
}
diff --git a/tests/auto/unit/multimedia/qcameraimagecapture/tst_qcameraimagecapture.cpp b/tests/auto/unit/multimedia/qcameraimagecapture/tst_qcameraimagecapture.cpp
index 6c8fb8456..4abc9d5a4 100644
--- a/tests/auto/unit/multimedia/qcameraimagecapture/tst_qcameraimagecapture.cpp
+++ b/tests/auto/unit/multimedia/qcameraimagecapture/tst_qcameraimagecapture.cpp
@@ -46,6 +46,7 @@ Reviewer Name Date Coverage ( Full / Test Case IDs ).
#include <private/qplatformcameraimageprocessing_p.h>
#include <qcamera.h>
#include <qcameraimagecapture.h>
+#include <qmediacapturesession.h>
#include "mockmediarecorderservice.h"
#include "qmockintegration_p.h"
@@ -103,37 +104,53 @@ void tst_QCameraImageCapture::cleanupTestCase()
//MaemoAPI-1823:test QCameraImageCapture Constructor
void tst_QCameraImageCapture::constructor()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QVERIFY(imageCapture.isAvailable() == true);
}
//MaemoAPI-1824:test mediaSource
void tst_QCameraImageCapture::mediaSource()
{
- QCamera camera;
- mockIntegration->lastCaptureService()->hasControls = false;
- QCameraImageCapture imageCapture(&camera);
- QVERIFY(imageCapture.camera() == nullptr);
-
- QCamera camera1;
- QCameraImageCapture imageCapture1(&camera1);
- auto *medobj1 = imageCapture1.camera();
- QCOMPARE(medobj1, &camera1);
+ {
+ QMediaCaptureSession session;
+ QCamera camera;
+ mockIntegration->lastCaptureService()->hasControls = false;
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
+ QVERIFY(!imageCapture.isAvailable());
+ }
+
+ {
+ QMediaCaptureSession session;
+ QCamera camera;
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
+ QVERIFY(imageCapture.isAvailable());
+ }
}
void tst_QCameraImageCapture::deleteMediaSource()
{
+ QMediaCaptureSession session;
QCamera *camera = new QCamera;
- QCameraImageCapture *capture = new QCameraImageCapture(camera);
+ QCameraImageCapture *capture = new QCameraImageCapture;
+ session.setCamera(camera);
+ session.setImageCapture(capture);
- QVERIFY(capture->camera() == camera);
QVERIFY(capture->isAvailable());
delete camera;
- //capture should detach from camera
- QVERIFY(capture->camera() == nullptr);
+ QVERIFY(session.camera() == nullptr);
QVERIFY(!capture->isAvailable());
capture->capture();
@@ -143,8 +160,12 @@ void tst_QCameraImageCapture::deleteMediaSource()
//MaemoAPI-1825:test isReadyForCapture
void tst_QCameraImageCapture::isReadyForCapture()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QVERIFY(imageCapture.isAvailable() == true);
QVERIFY(imageCapture.isReadyForCapture() == false);
camera.start();
@@ -156,8 +177,12 @@ void tst_QCameraImageCapture::isReadyForCapture()
//MaemoAPI-1826:test capture
void tst_QCameraImageCapture::capture()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QVERIFY(imageCapture.isAvailable() == true);
QVERIFY(imageCapture.isReadyForCapture() == false);
QVERIFY(imageCapture.capture() == -1);
@@ -171,8 +196,12 @@ void tst_QCameraImageCapture::capture()
//MaemoAPI-1827:test cancelCapture
void tst_QCameraImageCapture::cancelCapture()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QSignalSpy spy(&imageCapture, SIGNAL(imageCaptured(int,QImage)));
QSignalSpy spy1(&imageCapture, SIGNAL(imageSaved(int,QString)));
QVERIFY(imageCapture.isAvailable() == true);
@@ -198,8 +227,12 @@ void tst_QCameraImageCapture::cancelCapture()
//MaemoAPI-1829:test set encodingSettings
void tst_QCameraImageCapture::encodingSettings()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QVERIFY(imageCapture.isAvailable() == true);
QVERIFY(imageCapture.encodingSettings() == QImageEncoderSettings());
QImageEncoderSettings settings;
@@ -216,15 +249,25 @@ void tst_QCameraImageCapture::errors()
{
MockMediaRecorderService::simpleCamera = true;
- QCamera camera1;
- QCameraImageCapture imageCapture1(&camera1);
- QVERIFY(imageCapture1.isAvailable() == false);
- imageCapture1.capture(QString::fromLatin1("/dev/null"));
- QVERIFY(imageCapture1.error() == QCameraImageCapture::NotSupportedFeatureError);
- QVERIFY2(!imageCapture1.errorString().isEmpty(), "Device does not support images capture");
+ {
+ QMediaCaptureSession session;
+ QCamera camera;
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+
+ session.setImageCapture(&imageCapture);
+ QVERIFY(imageCapture.isAvailable() == false);
+ imageCapture.capture(QString::fromLatin1("/dev/null"));
+ QVERIFY(imageCapture.error() == QCameraImageCapture::NotSupportedFeatureError);
+ QVERIFY2(!imageCapture.errorString().isEmpty(), "Device does not support images capture");
+ }
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QVERIFY(imageCapture.isAvailable() == true);
QVERIFY(imageCapture.error() == QCameraImageCapture::NoError);
QVERIFY(imageCapture.errorString().isEmpty());
@@ -239,8 +282,12 @@ void tst_QCameraImageCapture::errors()
//MaemoAPI-1831:test error
void tst_QCameraImageCapture::error()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QSignalSpy spy(&imageCapture, SIGNAL(error(int,QCameraImageCapture::Error,QString)));
imageCapture.capture();
QTest::qWait(30);
@@ -254,8 +301,12 @@ void tst_QCameraImageCapture::error()
//MaemoAPI-1832:test imageCaptured
void tst_QCameraImageCapture::imageCaptured()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QSignalSpy spy(&imageCapture, SIGNAL(imageCaptured(int,QImage)));
QVERIFY(imageCapture.isAvailable() == true);
QVERIFY(imageCapture.isReadyForCapture() == false);
@@ -274,8 +325,12 @@ void tst_QCameraImageCapture::imageCaptured()
//MaemoAPI-1833:test imageExposed
void tst_QCameraImageCapture::imageExposed()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QSignalSpy spy(&imageCapture, SIGNAL(imageExposed(int)));
QVERIFY(imageCapture.isAvailable() == true);
QVERIFY(imageCapture.isReadyForCapture() == false);
@@ -292,8 +347,12 @@ void tst_QCameraImageCapture::imageExposed()
//MaemoAPI-1834:test imageSaved
void tst_QCameraImageCapture::imageSaved()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QSignalSpy spy(&imageCapture, SIGNAL(imageSaved(int,QString)));
QVERIFY(imageCapture.isAvailable() == true);
QVERIFY(imageCapture.isReadyForCapture() == false);
@@ -311,8 +370,12 @@ void tst_QCameraImageCapture::imageSaved()
//MaemoAPI-1835:test readyForCaptureChanged
void tst_QCameraImageCapture::readyForCaptureChanged()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
+
QSignalSpy spy(&imageCapture, SIGNAL(readyForCaptureChanged(bool)));
QVERIFY(imageCapture.isReadyForCapture() == false);
imageCapture.capture();
diff --git a/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp b/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp
index 356cc64e7..ccbb0774b 100644
--- a/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp
+++ b/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp
@@ -35,6 +35,7 @@
#include <qmediarecorder.h>
#include <qaudioformat.h>
#include <qmockintegration_p.h>
+#include <qmediacapturesession.h>
#include "mockmediarecorderservice.h"
#include "mockmediarecordercontrol.h"
@@ -72,7 +73,6 @@ private slots:
void testAudioSettingsOperatorAssign();
void testAudioSettingsDestructor();
- void testAvailabilityStatus();
void testIsAvailable();
void testMediaSource();
void testEnum();
@@ -87,6 +87,7 @@ private slots:
private:
QMockIntegration *mockIntegration = nullptr;
+ QMediaCaptureSession *captureSession;
QCamera *object = nullptr;
MockMediaRecorderService *service = nullptr;
MockMediaRecorderControl *mock;
@@ -96,8 +97,11 @@ private:
void tst_QMediaRecorder::initTestCase()
{
mockIntegration = new QMockIntegration;
+ captureSession = new QMediaCaptureSession;
object = new QCamera;
- capture = new QMediaRecorder(object);
+ capture = new QMediaRecorder;
+ captureSession->setCamera(object);
+ captureSession->setRecorder(capture);
service = mockIntegration->lastCaptureService();
mock = service->mockControl;
}
@@ -114,8 +118,11 @@ void tst_QMediaRecorder::testNullService()
{
const QString id(QLatin1String("application/x-format"));
- QCamera object;
- QMediaRecorder recorder(&object);
+ QMediaCaptureSession session;
+ QCamera camera;
+ QMediaRecorder recorder;
+ session.setCamera(&camera);
+ session.setRecorder(&recorder);
QCOMPARE(recorder.outputLocation(), QUrl());
QCOMPARE(recorder.state(), QMediaRecorder::StoppedState);
@@ -129,8 +136,11 @@ void tst_QMediaRecorder::testNullService()
void tst_QMediaRecorder::testNullControls()
{
service->hasControls = false;
- QCamera object;
- QMediaRecorder recorder(&object);
+ QMediaCaptureSession session;
+ QCamera camera;
+ QMediaRecorder recorder;
+ session.setCamera(&camera);
+ session.setRecorder(&recorder);
QCOMPARE(recorder.outputLocation(), QUrl());
QCOMPARE(recorder.state(), QMediaRecorder::StoppedState);
@@ -175,18 +185,21 @@ void tst_QMediaRecorder::testNullControls()
void tst_QMediaRecorder::testDeleteMediaSource()
{
- QCamera *object = new QCamera;
- QMediaRecorder *capture = new QMediaRecorder(object);
+ QMediaCaptureSession session;
+ QCamera *camera = new QCamera;
+ QMediaRecorder *recorder = new QMediaRecorder;
+ session.setCamera(camera);
+ session.setRecorder(recorder);
- QVERIFY(capture->camera() == object);
- QVERIFY(capture->isAvailable());
+ QVERIFY(session.camera() == camera);
+ QVERIFY(recorder->isAvailable());
- delete object;
+ delete camera;
- QVERIFY(capture->camera() == nullptr);
- QVERIFY(!capture->isAvailable());
+ QVERIFY(session.camera() == nullptr);
+ QVERIFY(recorder->isAvailable());
- delete capture;
+ delete recorder;
}
void tst_QMediaRecorder::testError()
@@ -720,9 +733,12 @@ void tst_QMediaRecorder::metaData()
QFETCH(QString, genre);
QFETCH(QString, custom);
- QCamera object;
+ QMediaCaptureSession session;
+ QCamera camera;
+ QMediaRecorder recorder;
+ session.setCamera(&camera);
+ session.setRecorder(&recorder);
- QMediaRecorder recorder(&object);
QVERIFY(recorder.metaData().isEmpty());
QMediaMetaData data;
@@ -866,54 +882,35 @@ void tst_QMediaRecorder::testAudioSettingsDestructor()
// delete audiosettings;
}
-/* availability() API test. */
-void tst_QMediaRecorder::testAvailabilityStatus()
+void tst_QMediaRecorder::testIsAvailable()
{
{
- QCamera object;
- QMediaRecorder recorder(&object);
- QCOMPARE(recorder.isAvailable(), false);
+ QMediaCaptureSession session;
+ QCamera camera;
+ QMediaRecorder recorder;
+ session.setCamera(&camera);
+ session.setRecorder(&recorder);
+ QCOMPARE(recorder.isAvailable(), true);
}
{
- mockIntegration->createCaptureSession(QMediaRecorder::AudioAndVideo);
- QCamera object1;
- QMediaRecorder recorder1(&object1);
- QCOMPARE(recorder1.isAvailable(), true);
- }
- {
- mockIntegration->createCaptureSession(QMediaRecorder::AudioAndVideo);
- QCamera object1;
- QMediaRecorder recorder1(&object1);
-
- QCOMPARE(recorder1.isAvailable(), true);
+ QMediaRecorder recorder;
+ QCOMPARE(recorder.isAvailable(), false);
}
}
-/* isAvailable() API test. */
-void tst_QMediaRecorder::testIsAvailable()
-{
- QCamera object;
- QMediaRecorder recorder(&object);
- QCOMPARE(recorder.isAvailable(), false);
-
- mockIntegration->createCaptureSession(QMediaRecorder::AudioAndVideo);
- QCamera object1;
- QMediaRecorder recorder1(&object1);
- QCOMPARE(recorder1.isAvailable(), true);
-}
-
/* mediaSource() API test. */
void tst_QMediaRecorder::testMediaSource()
{
service->hasControls = false;
- QCamera object;
- QMediaRecorder recorder(&object);
-
- QCamera *medobj = recorder.camera();
- QVERIFY(medobj == nullptr);
-
- auto *medobj1 = capture->camera();
- QVERIFY(medobj1 != nullptr);
+ QMediaCaptureSession session;
+ QCamera camera;
+ QMediaRecorder recorder;
+ session.setCamera(&camera);
+ session.setRecorder(&recorder);
+
+ QCamera *medobj = session.camera();
+ QVERIFY(medobj != nullptr);
+ QVERIFY(!camera.isAvailable());
}
/* enum QMediaRecorder::ResourceError property test. */
diff --git a/tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp b/tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp
index dc08f0e55..1b083bed7 100644
--- a/tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp
+++ b/tests/auto/unit/multimediawidgets/qcamerawidgets/tst_qcamerawidgets.cpp
@@ -37,6 +37,7 @@
#include <private/qplatformcamerafocus_p.h>
#include <private/qplatformcameraimagecapture_p.h>
#include <private/qplatformcameraimageprocessing_p.h>
+#include <qmediacapturesession.h>
#include <qcamera.h>
#include <qcameraimagecapture.h>
#include <qgraphicsvideoitem.h>
@@ -90,8 +91,11 @@ void tst_QCameraWidgets::cleanupTestCase()
void tst_QCameraWidgets::testCameraEncodingProperyChange()
{
+ QMediaCaptureSession session;
QCamera camera;
- QCameraImageCapture imageCapture(&camera);
+ QCameraImageCapture imageCapture;
+ session.setCamera(&camera);
+ session.setImageCapture(&imageCapture);
QSignalSpy stateChangedSignal(&camera, SIGNAL(stateChanged(QCamera::State)));
QSignalSpy statusChangedSignal(&camera, SIGNAL(statusChanged(QCamera::Status)));
@@ -111,39 +115,39 @@ void tst_QCameraWidgets::testSetVideoOutput()
QVideoWidget widget;
QGraphicsVideoItem item;
MockVideoSurface surface;
- QCamera camera;
+ QMediaCaptureSession session;
- camera.setViewfinder(&widget);
+ session.setVideoPreview(&widget);
// qDebug() << widget.mediaSource();
-// QVERIFY(widget.mediaSource() == &camera);
+// QVERIFY(widget.mediaSource() == &session);
- camera.setViewfinder(&item);
+ session.setVideoPreview(&item);
// QVERIFY(widget.mediaSource() == nullptr);
-// QVERIFY(item.mediaSource() == &camera);
+// QVERIFY(item.mediaSource() == &session);
- camera.setViewfinder(reinterpret_cast<QVideoWidget *>(0));
+ session.setVideoPreview(reinterpret_cast<QVideoWidget *>(0));
// QVERIFY(item.mediaSource() == nullptr);
- camera.setViewfinder(&widget);
-// QVERIFY(widget.mediaSource() == &camera);
+ session.setVideoPreview(&widget);
+// QVERIFY(widget.mediaSource() == &session);
- camera.setViewfinder(reinterpret_cast<QGraphicsVideoItem *>(0));
+ session.setVideoPreview(reinterpret_cast<QGraphicsVideoItem *>(0));
// QVERIFY(widget.mediaSource() == nullptr);
- camera.setViewfinder(&surface);
-// QVERIFY(mockCameraService->rendererControl->surface() == &surface);
+ session.setVideoPreview(&surface);
+// QVERIFY(mocksessionService->rendererControl->surface() == &surface);
- camera.setViewfinder(reinterpret_cast<QAbstractVideoSurface *>(0));
-// QVERIFY(mockCameraService->rendererControl->surface() == nullptr);
+ session.setVideoPreview(reinterpret_cast<QAbstractVideoSurface *>(0));
+// QVERIFY(mocksessionService->rendererControl->surface() == nullptr);
- camera.setViewfinder(&surface);
-// QVERIFY(mockCameraService->rendererControl->surface() == &surface);
+ session.setVideoPreview(&surface);
+// QVERIFY(mocksessionService->rendererControl->surface() == &surface);
- camera.setViewfinder(&widget);
-// QVERIFY(mockCameraService->rendererControl->surface() == nullptr);
-// QVERIFY(widget.mediaSource() == &camera);
+ session.setVideoPreview(&widget);
+// QVERIFY(mocksessionService->rendererControl->surface() == nullptr);
+// QVERIFY(widget.mediaSource() == &session);
- camera.setViewfinder(&surface);
+ session.setVideoPreview(&surface);
// QVERIFY(mockCameraService->rendererControl->surface() == &surface);
// QVERIFY(widget.mediaSource() == nullptr);
}