summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-03-01 16:51:18 +0100
committerLars Knoll <lars.knoll@qt.io>2021-03-16 07:41:30 +0000
commite7702afc9dfa6e69b1b05d68a38248ccc6b6dd87 (patch)
tree8d8cfbd6b2ac894dcbb250d9084c7cff099a0b65 /src
parent7ac9e201ab41f76763477821216665d474ce5ec6 (diff)
Simplify state handling in QCamera and QMediaRecorder
Remove the loaded/unloaded states. Instead simply have a boolean indicating whether the camera is active. Change-Id: I1dad15f2c4f2f606f6d64320cea3763d1213a09b Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/imports/multimedia/plugins.qmltypes44
-rw-r--r--src/imports/multimedia/qdeclarativecamera.cpp98
-rw-r--r--src/imports/multimedia/qdeclarativecamera_p.h27
-rw-r--r--src/imports/multimedia/qdeclarativecameracapture.cpp3
-rw-r--r--src/imports/multimedia/qdeclarativecameraexposure.cpp4
-rw-r--r--src/imports/multimedia/qdeclarativecameraflash.cpp3
-rw-r--r--src/imports/multimedia/qdeclarativecamerafocus.cpp4
-rw-r--r--src/imports/multimedia/qdeclarativecameraimageprocessing.cpp4
-rw-r--r--src/imports/multimedia/qdeclarativecamerarecorder_p.h4
-rw-r--r--src/imports/multimedia/qmldir1
-rw-r--r--src/multimedia/camera/qcamera.cpp85
-rw-r--r--src/multimedia/camera/qcamera.h27
-rw-r--r--src/multimedia/camera/qcamera_p.h12
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp8
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h4
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp60
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h12
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp4
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp16
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameracontrol.mm29
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameracontrol_p.h6
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraexposurecontrol.mm22
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraexposurecontrol_p.h2
-rw-r--r--src/multimedia/platform/darwin/camera/avfcamerafocuscontrol.mm2
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraimageprocessingcontrol.mm2
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraservice.mm2
-rw-r--r--src/multimedia/platform/darwin/camera/avfcamerasession.mm32
-rw-r--r--src/multimedia/platform/darwin/camera/avfcamerasession_p.h10
-rw-r--r--src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm3
-rw-r--r--src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm20
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol.cpp42
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol_p.h8
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp6
-rw-r--r--src/multimedia/platform/qnx/camera/bbcamerasession.cpp6
-rw-r--r--src/multimedia/platform/qplatformcamera_p.h6
-rw-r--r--src/multimedia/recording/qmediarecorder.h4
36 files changed, 200 insertions, 422 deletions
diff --git a/src/imports/multimedia/plugins.qmltypes b/src/imports/multimedia/plugins.qmltypes
index 3a14b5ec5..63dc4f4e2 100644
--- a/src/imports/multimedia/plugins.qmltypes
+++ b/src/imports/multimedia/plugins.qmltypes
@@ -312,21 +312,17 @@ Module {
name: "Status"
values: {
"UnavailableStatus": 0,
- "UnloadedStatus": 1,
- "LoadingStatus": 2,
- "UnloadingStatus": 3,
- "LoadedStatus": 4,
- "StartingStatus": 5,
- "StoppingStatus": 6,
- "ActiveStatus": 7
+ "InactiveStatus": 1,
+ "StartingStatus": 2,
+ "StoppingStatus": 3,
+ "ActiveStatus": 4
}
}
Enum {
name: "State"
values: {
- "UnloadedState": 0,
- "LoadedState": 1,
- "ActiveState": 2
+ "InactiveState": 0,
+ "ActiveState": 1
}
}
Enum {
@@ -540,22 +536,18 @@ Module {
Enum {
name: "State"
values: {
- "ActiveState": 2,
- "LoadedState": 1,
- "UnloadedState": 0
+ "InactiveState": 0,
+ "ActiveState": 1
}
}
Enum {
name: "Status"
values: {
"UnavailableStatus": 0,
- "UnloadedStatus": 1,
- "LoadingStatus": 2,
- "UnloadingStatus": 3,
- "LoadedStatus": 4,
- "StartingStatus": 5,
- "StoppingStatus": 6,
- "ActiveStatus": 7
+ "InactiveStatus": 1,
+ "StartingStatus": 2,
+ "StoppingStatus": 3,
+ "ActiveStatus": 4
}
}
Enum {
@@ -1103,13 +1095,11 @@ Module {
name: "RecorderStatus"
values: {
"UnavailableStatus": 0,
- "UnloadedStatus": 1,
- "LoadingStatus": 2,
- "LoadedStatus": 3,
- "StartingStatus": 4,
- "RecordingStatus": 5,
- "PausedStatus": 6,
- "FinalizingStatus": 7
+ "StoppedStatus": 1,
+ "StartingStatus": 2,
+ "RecordingStatus": 3,
+ "PausedStatus": 4,
+ "FinalizingStatus": 5
}
}
Enum {
diff --git a/src/imports/multimedia/qdeclarativecamera.cpp b/src/imports/multimedia/qdeclarativecamera.cpp
index 504dcccba..481c2f055 100644
--- a/src/imports/multimedia/qdeclarativecamera.cpp
+++ b/src/imports/multimedia/qdeclarativecamera.cpp
@@ -64,11 +64,6 @@ void QDeclarativeCamera::_q_errorOccurred(QCamera::Error errorCode)
emit errorChanged();
}
-void QDeclarativeCamera::_q_updateState(QCamera::State state)
-{
- emit cameraStateChanged(QDeclarativeCamera::State(state));
-}
-
/*!
\qmltype Camera
\instantiates QDeclarativeCamera
@@ -171,7 +166,6 @@ QDeclarativeCamera::QDeclarativeCamera(QObject *parent) :
QObject(parent),
m_camera(nullptr),
m_metaData(nullptr),
- m_pendingState(ActiveState),
m_componentComplete(false)
{
m_currentCameraInfo = QMediaDeviceManager::defaultVideoInput();
@@ -185,7 +179,7 @@ QDeclarativeCamera::QDeclarativeCamera(QObject *parent) :
m_focus = new QDeclarativeCameraFocus(m_camera);
m_imageProcessing = new QDeclarativeCameraImageProcessing(m_camera);
- connect(m_camera, &QCamera::stateChanged, this, &QDeclarativeCamera::_q_updateState);
+ connect(m_camera, &QCamera::activeChanged, this, &QDeclarativeCamera::activeChanged);
connect(m_camera, SIGNAL(statusChanged(QCamera::Status)), this, SIGNAL(cameraStatusChanged()));
connect(m_camera, SIGNAL(errorOccurred(QCamera::Error)), this, SLOT(_q_errorOccurred(QCamera::Error)));
@@ -196,8 +190,6 @@ QDeclarativeCamera::QDeclarativeCamera(QObject *parent) :
/*! Destructor, clean up memory */
QDeclarativeCamera::~QDeclarativeCamera()
{
- m_camera->unload();
-
// These must be deleted before QCamera
delete m_imageCapture;
delete m_videoRecorder;
@@ -217,7 +209,7 @@ void QDeclarativeCamera::classBegin()
void QDeclarativeCamera::componentComplete()
{
m_componentComplete = true;
- setCameraState(m_pendingState);
+ setActive(pendingActive);
}
/*!
@@ -355,9 +347,6 @@ void QDeclarativeCamera::setupDevice(const QString &deviceName)
break;
}
}
- State previousState = cameraState();
- setCameraState(UnloadedState);
-
m_currentCameraInfo = info;
m_camera->setCameraInfo(info);
@@ -366,8 +355,6 @@ void QDeclarativeCamera::setupDevice(const QString &deviceName)
emit displayNameChanged();
if (oldCameraInfo.position() != m_currentCameraInfo.position())
emit positionChanged();
-
- setCameraState(previousState);
}
/*!
@@ -402,32 +389,14 @@ bool QDeclarativeCamera::isAvailable() const
}
/*!
- \qmlproperty enumeration QtMultimedia::Camera::cameraState
-
- This property holds the camera object's current state. The default camera
- state is \c ActiveState.
-
- \value Camera.UnloadedState
- The initial camera state, with the camera not loaded.
- The camera capabilities (with the exception of supported capture modes)
- are unknown. This state saves the most power, but takes the longest
- time to be ready for capture.
- While the supported settings are unknown in this state,
- you can still set the camera capture settings like codec,
- resolution, or frame rate.
- \value Camera.LoadedState
- The camera is loaded and ready to be configured.
- In this state you can query camera capabilities,
- set capture resolution, codecs, and so on.
- The viewfinder is not active in the loaded state.
- The camera consumes power in this state.
- \value Camera.ActiveState
- In the active state, the viewfinder frames are available
- and the camera is ready for capture.
+ \qmlproperty bool QtMultimedia::Camera::active
+
+ This property holds the camera object's current state. By default, the default
+ camera is inactive.
*/
-QDeclarativeCamera::State QDeclarativeCamera::cameraState() const
+bool QDeclarativeCamera::isActive() const
{
- return m_componentComplete ? QDeclarativeCamera::State(m_camera->state()) : m_pendingState;
+ return m_componentComplete ? m_camera->isActive() : pendingActive;
}
/*!
@@ -448,48 +417,25 @@ QDeclarativeCamera::State QDeclarativeCamera::cameraState() const
service is not ready to capture yet.
\value Camera.StoppingStatus
The camera is transitioning from \c {Camera.ActiveState} to
- \c {Camera.LoadedState} or \c {Camera.UnloadedState}.
- \value Camera.LoadedStatus
- The camera is loaded and ready to be configured.
- This status indicates that the camera is opened and it's
- possible to query for supported image and video capture
- settings, such as resolution, frame rate, and codecs.
- \value Camera.LoadingStatus
- The camera is transitioning from \c {Camera.UnloadedState} to
- \c {Camera.LoadedState} or \c {Camera.ActiveState}.
- \value Camera.UnloadingStatus
- The camera is transitioning from \c {Camera.LoadedState} or
- \c {Camera.ActiveState} to \c {Camera.UnloadedState}.
- \value Camera.UnloadedStatus
- The initial camera status, with camera not loaded.
- The camera capabilities including supported capture
- settings may be unknown.
+ \c {Camera.InactiveState}.
+ \value Camera.InactiveStatus
+ The camera is inactive.
\value Camera.UnavailableStatus
- The camera or camera backend is not available.
+ The camera is not available.
*/
QDeclarativeCamera::Status QDeclarativeCamera::cameraStatus() const
{
return QDeclarativeCamera::Status(m_camera->status());
}
-void QDeclarativeCamera::setCameraState(QDeclarativeCamera::State state)
+void QDeclarativeCamera::setActive(bool active)
{
if (!m_componentComplete) {
- m_pendingState = state;
+ pendingActive = active;
return;
}
- switch (state) {
- case QDeclarativeCamera::ActiveState:
- m_camera->start();
- break;
- case QDeclarativeCamera::UnloadedState:
- m_camera->unload();
- break;
- case QDeclarativeCamera::LoadedState:
- m_camera->load();
- break;
- }
+ m_camera->setActive(active);
}
/*!
@@ -499,10 +445,6 @@ void QDeclarativeCamera::setCameraState(QDeclarativeCamera::State state)
be available and image or movie capture will
be possible.
*/
-void QDeclarativeCamera::start()
-{
- setCameraState(QDeclarativeCamera::ActiveState);
-}
/*!
\qmlmethod QtMultimedia::Camera::stop()
@@ -512,10 +454,6 @@ void QDeclarativeCamera::start()
In this state, the camera still consumes power.
*/
-void QDeclarativeCamera::stop()
-{
- setCameraState(QDeclarativeCamera::LoadedState);
-}
/*!
\qmlproperty real QtMultimedia::Camera::minimumZoomFactor
@@ -599,13 +537,13 @@ void QDeclarativeCamera::setZoomFactor(qreal value)
*/
/*!
- \qmlsignal Camera::cameraStateChanged(state)
+ \qmlsignal Camera::activeChanged(active)
- This signal is emitted when the camera state has changed to \a state. Since the
+ This signal is emitted when the camera state has changed to \a active. Since the
state changes may take some time to occur this signal may arrive sometime
after the state change has been requested.
- The corresponding handler is \c onCameraStateChanged.
+ The corresponding handler is \c onActiveChanged.
*/
/*!
diff --git a/src/imports/multimedia/qdeclarativecamera_p.h b/src/imports/multimedia/qdeclarativecamera_p.h
index b0f617865..8ee7b4753 100644
--- a/src/imports/multimedia/qdeclarativecamera_p.h
+++ b/src/imports/multimedia/qdeclarativecamera_p.h
@@ -82,7 +82,7 @@ class QDeclarativeCamera : public QObject, public QQmlParserStatus
Q_PROPERTY(Position position READ position WRITE setPosition NOTIFY positionChanged REVISION 1)
Q_PROPERTY(QString displayName READ displayName NOTIFY displayNameChanged REVISION 1)
- Q_PROPERTY(State cameraState READ cameraState WRITE setCameraState NOTIFY cameraStateChanged)
+ Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
Q_PROPERTY(Status cameraStatus READ cameraStatus NOTIFY cameraStatusChanged)
Q_PROPERTY(Error errorCode READ errorCode NOTIFY errorChanged)
Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
@@ -118,20 +118,10 @@ public:
FrontFace = QCameraInfo::FrontFace
};
- enum State
- {
- ActiveState = QCamera::ActiveState,
- LoadedState = QCamera::LoadedState,
- UnloadedState = QCamera::UnloadedState
- };
-
enum Status
{
UnavailableStatus = QCamera::UnavailableStatus,
- UnloadedStatus = QCamera::UnloadedStatus,
- LoadingStatus = QCamera::LoadingStatus,
- UnloadingStatus = QCamera::UnloadingStatus,
- LoadedStatus = QCamera::LoadedStatus,
+ InactiveStatus = QCamera::InactiveStatus,
StartingStatus = QCamera::StartingStatus,
StoppingStatus = QCamera::StoppingStatus,
ActiveStatus = QCamera::ActiveStatus
@@ -209,7 +199,7 @@ public:
QString displayName() const;
- State cameraState() const;
+ bool isActive() const;
Status cameraStatus() const;
Error errorCode() const;
@@ -223,10 +213,10 @@ public:
bool isAvailable() const;
public Q_SLOTS:
- void start();
- void stop();
+ void start() { setActive(true); }
+ void stop() { setActive(false); }
- void setCameraState(State state);
+ void setActive(bool active);
void setZoomFactor(qreal);
@@ -243,13 +233,12 @@ Q_SIGNALS:
Q_REVISION(1) void positionChanged();
Q_REVISION(1) void displayNameChanged();
- void cameraStateChanged(QDeclarativeCamera::State);
+ void activeChanged();
void cameraStatusChanged();
void zoomFactorChanged(qreal);
private Q_SLOTS:
- void _q_updateState(QCamera::State);
void _q_errorOccurred(QCamera::Error);
protected:
@@ -272,8 +261,8 @@ private:
QDeclarativeCameraImageProcessing *m_imageProcessing;
QDeclarativeMediaMetaData *m_metaData;
- State m_pendingState;
bool m_componentComplete;
+ bool pendingActive = false;
};
QT_END_NAMESPACE
diff --git a/src/imports/multimedia/qdeclarativecameracapture.cpp b/src/imports/multimedia/qdeclarativecameracapture.cpp
index 91cdd9e1d..59267e792 100644
--- a/src/imports/multimedia/qdeclarativecameracapture.cpp
+++ b/src/imports/multimedia/qdeclarativecameracapture.cpp
@@ -232,8 +232,7 @@ void QDeclarativeCameraCapture::_q_captureFailed(int id, QCameraImageCapture::Er
void QDeclarativeCameraCapture::_q_cameraStatusChanged(QCamera::Status status)
{
- if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus &&
- status != QCamera::ActiveStatus)
+ if (status != QCamera::InactiveStatus && status != QCamera::ActiveStatus)
return;
emit supportedResolutionsChanged();
diff --git a/src/imports/multimedia/qdeclarativecameraexposure.cpp b/src/imports/multimedia/qdeclarativecameraexposure.cpp
index ec7122666..cca388243 100644
--- a/src/imports/multimedia/qdeclarativecameraexposure.cpp
+++ b/src/imports/multimedia/qdeclarativecameraexposure.cpp
@@ -108,10 +108,8 @@ QDeclarativeCameraExposure::QDeclarativeCameraExposure(QCamera *camera, QObject
connect(m_exposure, SIGNAL(exposureCompensationChanged(qreal)), this, SIGNAL(exposureCompensationChanged(qreal)));
connect(camera, &QCamera::statusChanged, [this](QCamera::Status status) {
- if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus
- && status != QCamera::ActiveStatus) {
+ if (status != QCamera::InactiveStatus && status != QCamera::ActiveStatus)
return;
- }
emit supportedExposureModesChanged();
});
diff --git a/src/imports/multimedia/qdeclarativecameraflash.cpp b/src/imports/multimedia/qdeclarativecameraflash.cpp
index 38991c364..dd2255393 100644
--- a/src/imports/multimedia/qdeclarativecameraflash.cpp
+++ b/src/imports/multimedia/qdeclarativecameraflash.cpp
@@ -123,8 +123,7 @@ void QDeclarativeCameraFlash::setFlashMode(QDeclarativeCameraFlash::FlashMode mo
void QDeclarativeCameraFlash::_q_cameraStatusChanged(QCamera::Status status)
{
- if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus &&
- status != QCamera::ActiveStatus)
+ if (status != QCamera::InactiveStatus && status != QCamera::ActiveStatus)
return;
emit supportedModesChanged();
diff --git a/src/imports/multimedia/qdeclarativecamerafocus.cpp b/src/imports/multimedia/qdeclarativecamerafocus.cpp
index 0a50b12f8..51a3a87e3 100644
--- a/src/imports/multimedia/qdeclarativecamerafocus.cpp
+++ b/src/imports/multimedia/qdeclarativecamerafocus.cpp
@@ -97,10 +97,8 @@ QDeclarativeCameraFocus::QDeclarativeCameraFocus(QCamera *camera, QObject *paren
m_focus = camera->focus();
connect(camera, &QCamera::statusChanged, [this](QCamera::Status status) {
- if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus
- && status != QCamera::ActiveStatus) {
+ if (status != QCamera::InactiveStatus && status != QCamera::ActiveStatus)
return;
- }
emit supportedFocusModeChanged();
});
diff --git a/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp b/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp
index 78c1ee25b..d6c7c2ab8 100644
--- a/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp
+++ b/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp
@@ -86,10 +86,8 @@ QDeclarativeCameraImageProcessing::QDeclarativeCameraImageProcessing(QCamera *ca
m_imageProcessing = camera->imageProcessing();
connect(camera, &QCamera::statusChanged, [this](QCamera::Status status) {
- if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus
- && status != QCamera::ActiveStatus) {
+ if (status != QCamera::InactiveStatus && status != QCamera::ActiveStatus)
return;
- }
emit supportedColorFiltersChanged();
emit supportedWhiteBalanceModesChanged();
diff --git a/src/imports/multimedia/qdeclarativecamerarecorder_p.h b/src/imports/multimedia/qdeclarativecamerarecorder_p.h
index fb142213c..5c62c2639 100644
--- a/src/imports/multimedia/qdeclarativecamerarecorder_p.h
+++ b/src/imports/multimedia/qdeclarativecamerarecorder_p.h
@@ -103,9 +103,7 @@ public:
enum RecorderStatus
{
UnavailableStatus = QMediaRecorder::UnavailableStatus,
- UnloadedStatus = QMediaRecorder::UnloadedStatus,
- LoadingStatus = QMediaRecorder::LoadingStatus,
- LoadedStatus = QMediaRecorder::LoadedStatus,
+ StoppedStatus = QMediaRecorder::StoppedStatus,
StartingStatus = QMediaRecorder::StartingStatus,
RecordingStatus = QMediaRecorder::RecordingStatus,
PausedStatus = QMediaRecorder::PausedStatus,
diff --git a/src/imports/multimedia/qmldir b/src/imports/multimedia/qmldir
index e7dcc3dd6..d68049f63 100644
--- a/src/imports/multimedia/qmldir
+++ b/src/imports/multimedia/qmldir
@@ -4,4 +4,3 @@ classname QMultimediaDeclarativeModule
typeinfo plugins.qmltypes
typeinfo plugins.qmltypes
Video 5.0 Video.qml
-
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index ace835aae..855dd48ef 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -84,28 +84,6 @@ void QCameraPrivate::_q_error(int error, const QString &errorString)
emit q->errorOccurred(this->error);
}
-void QCameraPrivate::setState(QCamera::State newState)
-{
- unsetError();
-
- if (!control) {
- _q_error(QCamera::CameraError, QCamera::tr("The camera service is missing"));
- return;
- }
-
- control->setState(newState);
-}
-
-void QCameraPrivate::_q_updateState(QCamera::State newState)
-{
- Q_Q(QCamera);
-
- if (newState != state) {
- state = newState;
- emit q->stateChanged(state);
- }
-}
-
void QCameraPrivate::init()
{
Q_Q(QCamera);
@@ -124,7 +102,7 @@ void QCameraPrivate::initControls()
control = captureInterface->cameraControl();
if (control) {
- q->connect(control, SIGNAL(stateChanged(QCamera::State)), q, SLOT(_q_updateState(QCamera::State)));
+ 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)));
}
@@ -225,6 +203,17 @@ bool QCamera::isAvailable() const
return (d->control != nullptr);
}
+bool QCamera::isActive() const
+{
+ Q_D(const QCamera);
+ return d->control->isActive();
+}
+
+void QCamera::setActive(bool active)
+{
+ Q_D(const QCamera);
+ d->control->setActive(active);
+}
/*!
Returns the camera exposure control object.
@@ -307,7 +296,8 @@ QPlatformMediaCapture *QCamera::captureInterface() const
return d_func()->captureInterface;
}
-/*!
+/*! \fn void QCamera::start()
+
Starts the camera.
State is changed to QCamera::ActiveState if camera is started
@@ -317,13 +307,9 @@ QPlatformMediaCapture *QCamera::captureInterface() const
starting the camera service can be asynchronous with the actual
status reported with QCamera::status property.
*/
-void QCamera::start()
-{
- Q_D(QCamera);
- d->setState(QCamera::ActiveState);
-}
-/*!
+/*! \fn void QCamera::stop()
+
Stops the camera.
The camera state is changed from QCamera::ActiveState to QCamera::LoadedState.
@@ -331,45 +317,6 @@ void QCamera::start()
\sa unload(), QCamera::UnloadedState
*/
-void QCamera::stop()
-{
- Q_D(QCamera);
- d->setState(QCamera::LoadedState);
-}
-
-/*!
- Opens the camera device.
- The camera state is changed to QCamera::LoadedState.
-
- It's not necessary to explicitly load the camera, unless the application
- needs to read the supported camera settings and change the default values
- according to the camera capabilities.
-
- In all the other cases, it's possible to start the camera directly
- from the unloaded state.
-
- /sa QCamera::UnloadedState
-*/
-void QCamera::load()
-{
- Q_D(QCamera);
- d->setState(QCamera::LoadedState);
-}
-
-/*!
- Closes the camera device and deallocates the related resources.
- The camera state is changed to QCamera::UnloadedState.
-*/
-void QCamera::unload()
-{
- Q_D(QCamera);
- d->setState(QCamera::UnloadedState);
-}
-
-QCamera::State QCamera::state() const
-{
- return d_func()->state;
-}
QCamera::Status QCamera::status() const
{
diff --git a/src/multimedia/camera/qcamera.h b/src/multimedia/camera/qcamera.h
index e70db30b0..18276df4b 100644
--- a/src/multimedia/camera/qcamera.h
+++ b/src/multimedia/camera/qcamera.h
@@ -66,7 +66,7 @@ class QCameraPrivate;
class Q_MULTIMEDIA_EXPORT QCamera : public QObject
{
Q_OBJECT
- Q_PROPERTY(QCamera::State state READ state NOTIFY stateChanged)
+ Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
Q_PROPERTY(QCamera::Status status READ status NOTIFY statusChanged)
Q_ENUMS(Status)
@@ -76,21 +76,12 @@ class Q_MULTIMEDIA_EXPORT QCamera : public QObject
public:
enum Status {
UnavailableStatus,
- UnloadedStatus,
- LoadingStatus,
- UnloadingStatus,
- LoadedStatus,
+ InactiveStatus,
StartingStatus,
StoppingStatus,
ActiveStatus
};
- enum State {
- UnloadedState,
- LoadedState,
- ActiveState
- };
-
enum Error
{
NoError,
@@ -103,8 +94,8 @@ public:
~QCamera();
bool isAvailable() const;
+ bool isActive() const;
- State state() const;
Status status() const;
QCameraInfo cameraInfo() const;
@@ -122,14 +113,12 @@ public:
QPlatformMediaCapture *captureInterface() const;
public Q_SLOTS:
- void load();
- void unload();
-
- void start();
- void stop();
+ void setActive(bool active);
+ void start() { setActive(true); }
+ void stop() { setActive(false); }
Q_SIGNALS:
- void stateChanged(QCamera::State state);
+ void activeChanged(bool);
void statusChanged(QCamera::Status status);
void errorOccurred(QCamera::Error);
@@ -137,13 +126,11 @@ private:
Q_DISABLE_COPY(QCamera)
Q_DECLARE_PRIVATE(QCamera)
Q_PRIVATE_SLOT(d_func(), void _q_error(int, const QString &))
- Q_PRIVATE_SLOT(d_func(), void _q_updateState(QCamera::State))
friend class QCameraInfo;
};
QT_END_NAMESPACE
-Q_MEDIA_ENUM_DEBUG(QCamera, State)
Q_MEDIA_ENUM_DEBUG(QCamera, Status)
Q_MEDIA_ENUM_DEBUG(QCamera, Error)
diff --git a/src/multimedia/camera/qcamera_p.h b/src/multimedia/camera/qcamera_p.h
index a5f755754..cacd17b75 100644
--- a/src/multimedia/camera/qcamera_p.h
+++ b/src/multimedia/camera/qcamera_p.h
@@ -66,9 +66,7 @@ class QCameraPrivate : public QObjectPrivate
public:
QCameraPrivate()
: QObjectPrivate(),
- state(QCamera::UnloadedState),
- error(QCamera::NoError),
- supressLockChangedSignal(false)
+ error(QCamera::NoError)
{
}
@@ -86,21 +84,13 @@ public:
QObject *capture = nullptr;
- QCamera::State state;
-
QCamera::Error error;
QString errorString;
QCameraInfo cameraInfo;
- bool supressLockChangedSignal;
-
void _q_error(int error, const QString &errorString);
void unsetError() { error = QCamera::NoError; errorString.clear(); }
-
- void setState(QCamera::State);
-
- void _q_updateState(QCamera::State newState);
};
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp
index 3a08621c7..c83fe4aa0 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol.cpp
@@ -73,14 +73,14 @@ QAndroidCameraControl::~QAndroidCameraControl()
delete m_renderer;
}
-void QAndroidCameraControl::setState(QCamera::State state)
+void QAndroidCameraControl::setActive(bool active)
{
- m_cameraSession->setState(state);
+ m_cameraSession->setActive(active);
}
-QCamera::State QAndroidCameraControl::state() const
+bool QAndroidCameraControl::isActive() const
{
- return m_cameraSession->state();
+ return m_cameraSession->isActive();
}
QCamera::Status QAndroidCameraControl::status() const
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h
index 742105137..4eab6269a 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcameracontrol_p.h
@@ -66,8 +66,8 @@ public:
explicit QAndroidCameraControl(QAndroidCameraSession *session);
virtual ~QAndroidCameraControl();
- QCamera::State state() const override;
- void setState(QCamera::State state) override;
+ bool isActive() const override;
+ void setActive(bool active) override;
QCamera::Status status() const override;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
index 47d347c80..ab72ad836 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp
@@ -68,9 +68,8 @@ QAndroidCameraSession::QAndroidCameraSession(QObject *parent)
, m_camera(0)
, m_nativeOrientation(0)
, m_videoOutput(0)
- , m_state(QCamera::UnloadedState)
, m_savedState(-1)
- , m_status(QCamera::UnloadedStatus)
+ , m_status(QCamera::InactiveStatus)
, m_previewStarted(false)
, m_captureDestination(QCameraImageCapture::CaptureToFile)
, m_lastImageCaptureId(0)
@@ -115,43 +114,36 @@ QAndroidCameraSession::~QAndroidCameraSession()
// applyResolution(m_actualImageSettings.resolution());
//}
-void QAndroidCameraSession::setState(QCamera::State state)
+void QAndroidCameraSession::setActive(bool active)
{
- if (m_state == state)
+ if (m_active == active)
return;
- m_state = state;
- emit stateChanged(m_state);
+ m_active = active;
+ emit activeChanged(m_active);
// If the application is inactive, the camera shouldn't be started. Save the desired state
// instead and it will be set when the application becomes active.
if (qApp->applicationState() == Qt::ApplicationActive)
- setStateHelper(state);
+ setActiveHelper(active);
else
- m_savedState = state;
+ m_savedState = active;
}
-void QAndroidCameraSession::setStateHelper(QCamera::State state)
+void QAndroidCameraSession::setActiveHelper(bool active)
{
- switch (state) {
- case QCamera::UnloadedState:
+ if (!active) {
+ stopPreview();
close();
- break;
- case QCamera::LoadedState:
- case QCamera::ActiveState:
+ } else {
if (!m_camera && !open()) {
- m_state = QCamera::UnloadedState;
- emit stateChanged(m_state);
+ m_active = false;
emit error(QCamera::CameraError, QStringLiteral("Failed to open camera"));
- m_status = QCamera::UnloadedStatus;
+ m_status = QCamera::InactiveStatus;
emit statusChanged(m_status);
return;
}
- if (state == QCamera::ActiveState)
- startPreview();
- else if (state == QCamera::LoadedState)
- stopPreview();
- break;
+ startPreview();
}
}
@@ -181,7 +173,7 @@ bool QAndroidCameraSession::open()
{
close();
- m_status = QCamera::LoadingStatus;
+ m_status = QCamera::StartingStatus;
emit statusChanged(m_status);
m_camera = AndroidCamera::open(m_selectedCamera);
@@ -202,8 +194,6 @@ bool QAndroidCameraSession::open()
m_nativeOrientation = m_camera->getNativeOrientation();
- m_status = QCamera::LoadedStatus;
-
if (m_camera->getPreviewFormat() != AndroidCamera::NV21)
m_camera->setPreviewFormat(AndroidCamera::NV21);
@@ -223,7 +213,7 @@ void QAndroidCameraSession::close()
stopPreview();
- m_status = QCamera::UnloadingStatus;
+ m_status = QCamera::StoppingStatus;
emit statusChanged(m_status);
m_readyForCapture = false;
@@ -235,7 +225,7 @@ void QAndroidCameraSession::close()
delete m_camera;
m_camera = 0;
- m_status = QCamera::UnloadedStatus;
+ m_status = QCamera::InactiveStatus;
emit statusChanged(m_status);
}
@@ -708,7 +698,7 @@ void QAndroidCameraSession::onCameraPreviewFailedToStart()
}
m_previewStarted = false;
- m_status = QCamera::LoadedStatus;
+ m_status = QCamera::InactiveStatus;
emit statusChanged(m_status);
setReadyForCapture(false);
@@ -718,7 +708,7 @@ void QAndroidCameraSession::onCameraPreviewFailedToStart()
void QAndroidCameraSession::onCameraPreviewStopped()
{
if (m_status == QCamera::StoppingStatus) {
- m_status = QCamera::LoadedStatus;
+ m_status = QCamera::InactiveStatus;
emit statusChanged(m_status);
}
@@ -803,7 +793,7 @@ AndroidCamera::ImageFormat QAndroidCameraSession::AndroidImageFormatFromQtPixelF
void QAndroidCameraSession::onVideoOutputReady(bool ready)
{
- if (ready && m_state == QCamera::ActiveState)
+ if (ready && m_active)
startPreview();
}
@@ -811,16 +801,16 @@ void QAndroidCameraSession::onApplicationStateChanged(Qt::ApplicationState state
{
switch (state) {
case Qt::ApplicationInactive:
- if (!m_keepActive && m_state != QCamera::UnloadedState) {
- m_savedState = m_state;
+ if (!m_keepActive && m_active) {
+ m_savedState = m_active;
close();
- m_state = QCamera::UnloadedState;
- emit stateChanged(m_state);
+ m_active = false;
+ emit activeChanged(m_active);
}
break;
case Qt::ApplicationActive:
if (m_savedState != -1) {
- setStateHelper(QCamera::State(m_savedState));
+ setActiveHelper(m_savedState);
m_savedState = -1;
}
break;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
index 5a3436feb..4ccdb074f 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession_p.h
@@ -79,8 +79,8 @@ public:
void setSelectedCamera(int cameraId) { m_selectedCamera = cameraId; }
AndroidCamera *camera() const { return m_camera; }
- QCamera::State state() const { return m_state; }
- void setState(QCamera::State state);
+ bool isActive() const { return m_active; }
+ void setActive(bool active);
QCamera::Status status() const { return m_status; }
@@ -122,7 +122,7 @@ public:
Q_SIGNALS:
void statusChanged(QCamera::Status status);
- void stateChanged(QCamera::State);
+ void activeChanged(bool);
void error(int error, const QString &errorString);
void opened();
@@ -171,15 +171,15 @@ private:
static QVideoFrame::PixelFormat QtPixelFormatFromAndroidImageFormat(AndroidCamera::ImageFormat);
static AndroidCamera::ImageFormat AndroidImageFormatFromQtPixelFormat(QVideoFrame::PixelFormat);
- void setStateHelper(QCamera::State state);
+ void setActiveHelper(bool active);
int m_selectedCamera;
AndroidCamera *m_camera;
int m_nativeOrientation;
QAndroidVideoOutput *m_videoOutput;
- QCamera::State m_state;
- int m_savedState;
+ bool m_active = false;
+ int m_savedState = -1;
QCamera::Status m_status;
bool m_previewStarted;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp
index 6c4f36914..47fac4e63 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcameravideorenderercontrol.cpp
@@ -151,12 +151,12 @@ void QAndroidCameraDataVideoOutput::configureFormat()
} else {
m_control->cameraSession()->setPreviewCallback(this);
- if (m_control->cameraSession()->status() > QCamera::LoadedStatus)
+ if (m_control->cameraSession()->status() > QCamera::InactiveStatus)
m_control->cameraSession()->camera()->stopPreview();
m_control->cameraSession()->setPreviewFormat(qt_androidImageFormatFromPixelFormat(m_pixelFormat));
- if (m_control->cameraSession()->status() > QCamera::LoadedStatus)
+ if (m_control->cameraSession()->status() > QCamera::InactiveStatus)
m_control->cameraSession()->camera()->startPreview();
}
}
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp
index e534f0e80..e592983da 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp
@@ -58,7 +58,7 @@ QAndroidCaptureSession::QAndroidCaptureSession(QAndroidCameraSession *cameraSess
, m_audioSource(AndroidMediaRecorder::DefaultAudioSource)
, m_duration(0)
, m_state(QMediaRecorder::StoppedState)
- , m_status(QMediaRecorder::UnloadedStatus)
+ , m_status(QMediaRecorder::StoppedStatus)
, m_encoderSettingsDirty(true)
, m_outputFormat(AndroidMediaRecorder::DefaultOutputFormat)
, m_audioEncoder(AndroidMediaRecorder::DefaultAudioEncoder)
@@ -85,21 +85,18 @@ QAndroidCaptureSession::QAndroidCaptureSession(QAndroidCameraSession *cameraSess
// Stop recording when stopping the camera.
if (status == QCamera::StoppingStatus) {
setState(QMediaRecorder::StoppedState);
- setStatus(QMediaRecorder::UnloadedStatus);
+ setStatus(QMediaRecorder::StoppedStatus);
return;
}
-
- if (status == QCamera::LoadingStatus)
- setStatus(QMediaRecorder::LoadingStatus);
});
connect(cameraSession, &QAndroidCameraSession::readyForCaptureChanged, this,
[this](bool ready) {
if (ready)
- setStatus(QMediaRecorder::LoadedStatus);
+ setStatus(QMediaRecorder::StoppedStatus);
});
} else {
// Audio-only recording.
- setStatus(QMediaRecorder::LoadedStatus);
+ setStatus(QMediaRecorder::StoppedStatus);
}
m_notifyTimer.setInterval(1000);
@@ -188,7 +185,7 @@ void QAndroidCaptureSession::setState(QMediaRecorder::State state)
void QAndroidCaptureSession::start()
{
- if (m_state == QMediaRecorder::RecordingState || m_status != QMediaRecorder::LoadedStatus)
+ if (m_state == QMediaRecorder::RecordingState || m_status != QMediaRecorder::StoppedStatus)
return;
setStatus(QMediaRecorder::StartingStatus);
@@ -337,8 +334,7 @@ void QAndroidCaptureSession::stop(bool error)
m_state = QMediaRecorder::StoppedState;
emit stateChanged(m_state);
- if (!m_cameraSession)
- setStatus(QMediaRecorder::LoadedStatus);
+ setStatus(QMediaRecorder::StoppedStatus);
}
void QAndroidCaptureSession::setStatus(QMediaRecorder::Status status)
diff --git a/src/multimedia/platform/darwin/camera/avfcameracontrol.mm b/src/multimedia/platform/darwin/camera/avfcameracontrol.mm
index 5ee2be793..c59ebbd45 100644
--- a/src/multimedia/platform/darwin/camera/avfcameracontrol.mm
+++ b/src/multimedia/platform/darwin/camera/avfcameracontrol.mm
@@ -53,42 +53,41 @@ AVFCameraControl::AVFCameraControl(AVFCameraService *service, QObject *parent)
: QPlatformCamera(parent)
, m_session(service->session())
, m_service(service)
- , m_state(QCamera::UnloadedState)
- , m_lastStatus(QCamera::UnloadedStatus)
+ , m_active(false)
+ , m_lastStatus(QCamera::InactiveStatus)
{
Q_UNUSED(service);
- connect(m_session, SIGNAL(stateChanged(QCamera::State)), SLOT(updateStatus()));
+ connect(m_session, SIGNAL(activeChanged(bool)), SLOT(updateStatus()));
}
AVFCameraControl::~AVFCameraControl()
{
}
-QCamera::State AVFCameraControl::state() const
+bool AVFCameraControl::isActive() const
{
- return m_state;
+ return m_active;
}
-void AVFCameraControl::setState(QCamera::State state)
+void AVFCameraControl::setActive(bool active)
{
- if (m_state == state)
+ if (m_active == active)
return;
- m_state = state;
- m_session->setState(state);
+ m_active = active;
+ m_session->setActive(active);
- Q_EMIT stateChanged(m_state);
+ Q_EMIT activeChanged(m_active);
updateStatus();
}
QCamera::Status AVFCameraControl::status() const
{
- static QCamera::Status statusTable[3][3] = {
- { QCamera::UnloadedStatus, QCamera::UnloadingStatus, QCamera::StoppingStatus }, //Unloaded state
- { QCamera::LoadingStatus, QCamera::LoadedStatus, QCamera::StoppingStatus }, //Loaded state
- { QCamera::LoadingStatus, QCamera::StartingStatus, QCamera::ActiveStatus } //ActiveState
+ static QCamera::Status statusTable[2][2] = {
+ { QCamera::InactiveStatus, QCamera::StoppingStatus }, //Inactive state
+ { QCamera::StartingStatus, QCamera::ActiveStatus } //ActiveState
};
- return statusTable[m_state][m_session->state()];
+ return statusTable[m_active ? 1 : 0][m_session->isActive() ? 1 : 0];
}
void AVFCameraControl::setCamera(const QCameraInfo &camera)
diff --git a/src/multimedia/platform/darwin/camera/avfcameracontrol_p.h b/src/multimedia/platform/darwin/camera/avfcameracontrol_p.h
index ffba37d70..9b58d5087 100644
--- a/src/multimedia/platform/darwin/camera/avfcameracontrol_p.h
+++ b/src/multimedia/platform/darwin/camera/avfcameracontrol_p.h
@@ -69,8 +69,8 @@ public:
AVFCameraControl(AVFCameraService *service, QObject *parent = nullptr);
~AVFCameraControl();
- QCamera::State state() const override;
- void setState(QCamera::State state) override;
+ bool isActive() const override;
+ void setActive(bool activce) override;
QCamera::Status status() const override;
@@ -96,7 +96,7 @@ private:
AVFCameraSession *m_session;
AVFCameraService *m_service;
- QCamera::State m_state;
+ bool m_active;
QCamera::Status m_lastStatus;
};
diff --git a/src/multimedia/platform/darwin/camera/avfcameraexposurecontrol.mm b/src/multimedia/platform/darwin/camera/avfcameraexposurecontrol.mm
index a9352f959..44f2a13ea 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraexposurecontrol.mm
+++ b/src/multimedia/platform/darwin/camera/avfcameraexposurecontrol.mm
@@ -224,7 +224,7 @@ AVFCameraExposureControl::AVFCameraExposureControl(AVFCameraService *service)
m_session = m_service->session();
Q_ASSERT(m_session);
- connect(m_session, SIGNAL(stateChanged(QCamera::State)), SLOT(cameraStateChanged(QCamera::State)));
+ connect(m_session, SIGNAL(activeChanged(bool)), SLOT(cameraActiveChanged(bool)));
}
bool AVFCameraExposureControl::isParameterSupported(ExposureParameter parameter) const
@@ -562,10 +562,10 @@ bool AVFCameraExposureControl::setISO(const QVariant &value)
#endif
}
-void AVFCameraExposureControl::cameraStateChanged(QCamera::State newState)
+void AVFCameraExposureControl::cameraActiveChanged(bool active)
{
#ifdef Q_OS_IOS
- if (m_session->state() != QCamera::ActiveState)
+ if (!m_session->isActive())
return;
AVCaptureDevice *captureDevice = m_session->videoCaptureDevice();
@@ -657,9 +657,9 @@ void AVFCameraExposureControl::cameraStateChanged(QCamera::State newState)
isFlashSupported = isFlashAutoSupported = false;
isTorchSupported = isTorchAutoSupported = false;
- if (newState == QCamera::UnloadedState) {
+ if (!active) {
Q_EMIT flashReady(false);
- } else if (newState == QCamera::ActiveState) {
+ } else {
AVCaptureDevice *captureDevice = m_session->videoCaptureDevice();
if (!captureDevice) {
qDebugCamera() << Q_FUNC_INFO << "no capture device in 'Active' state";
@@ -698,14 +698,14 @@ void AVFCameraExposureControl::setFlashMode(QCameraExposure::FlashMode mode)
if (m_flashMode == mode)
return;
- if (m_session->state() == QCamera::ActiveState && !isFlashModeSupported(mode)) {
+ if (m_session->isActive() && !isFlashModeSupported(mode)) {
qDebugCamera() << Q_FUNC_INFO << "unsupported mode" << mode;
return;
}
m_flashMode = mode;
- if (m_session->state() != QCamera::ActiveState)
+ if (!m_session->isActive())
return;
applyFlashSettings();
@@ -723,7 +723,7 @@ bool AVFCameraExposureControl::isFlashModeSupported(QCameraExposure::FlashMode m
bool AVFCameraExposureControl::isFlashReady() const
{
- if (m_session->state() != QCamera::ActiveState)
+ if (!m_session->isActive())
return false;
AVCaptureDevice *captureDevice = m_session->videoCaptureDevice();
@@ -756,14 +756,14 @@ void AVFCameraExposureControl::setTorchMode(QCameraExposure::TorchMode mode)
if (m_torchMode == mode)
return;
- if (m_session->state() == QCamera::ActiveState && !isTorchModeSupported(mode)) {
+ if (m_session->isActive() && !isTorchModeSupported(mode)) {
qDebugCamera() << Q_FUNC_INFO << "unsupported torch mode" << mode;
return;
}
m_torchMode = mode;
- if (m_session->state() != QCamera::ActiveState)
+ if (!m_session->isActive())
return;
applyFlashSettings();
@@ -781,7 +781,7 @@ bool AVFCameraExposureControl::isTorchModeSupported(QCameraExposure::TorchMode m
void AVFCameraExposureControl::applyFlashSettings()
{
- Q_ASSERT(m_session->requestedState() == QCamera::ActiveState);
+ Q_ASSERT(m_session->isActive());
AVCaptureDevice *captureDevice = m_session->videoCaptureDevice();
if (!captureDevice) {
diff --git a/src/multimedia/platform/darwin/camera/avfcameraexposurecontrol_p.h b/src/multimedia/platform/darwin/camera/avfcameraexposurecontrol_p.h
index 842531159..8a8a89d51 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraexposurecontrol_p.h
+++ b/src/multimedia/platform/darwin/camera/avfcameraexposurecontrol_p.h
@@ -86,7 +86,7 @@ public:
bool isTorchModeSupported(QCameraExposure::TorchMode mode) const override;
private Q_SLOTS:
- void cameraStateChanged(QCamera::State newState);
+ void cameraActiveChanged(bool active);
private:
void applyFlashSettings();
diff --git a/src/multimedia/platform/darwin/camera/avfcamerafocuscontrol.mm b/src/multimedia/platform/darwin/camera/avfcamerafocuscontrol.mm
index 628394686..a603083bf 100644
--- a/src/multimedia/platform/darwin/camera/avfcamerafocuscontrol.mm
+++ b/src/multimedia/platform/darwin/camera/avfcamerafocuscontrol.mm
@@ -236,7 +236,7 @@ float AVFCameraFocusControl::focusDistance() const
void AVFCameraFocusControl::cameraStateChanged()
{
- if (m_session->state() != QCamera::ActiveState)
+ if (m_session->isActive())
return;
AVCaptureDevice *captureDevice = m_session->videoCaptureDevice();
diff --git a/src/multimedia/platform/darwin/camera/avfcameraimageprocessingcontrol.mm b/src/multimedia/platform/darwin/camera/avfcameraimageprocessingcontrol.mm
index 6a55807b7..c08726825 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraimageprocessingcontrol.mm
+++ b/src/multimedia/platform/darwin/camera/avfcameraimageprocessingcontrol.mm
@@ -320,7 +320,7 @@ bool AVFCameraImageProcessingControl::setColorTemperature(float temperature)
void AVFCameraImageProcessingControl::cameraStateChanged()
{
- if (m_session->state() != QCamera::ActiveState)
+ if (!m_session->isActive())
return;
setWhiteBalanceMode(QCameraImageProcessing::WhiteBalanceAuto);
}
diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice.mm b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
index 2dd507552..87aa14fd9 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraservice.mm
+++ b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
@@ -84,8 +84,6 @@ AVFCameraService::AVFCameraService()
AVFCameraService::~AVFCameraService()
{
- m_cameraControl->setState(QCamera::UnloadedState);
-
#ifdef Q_OS_IOS
delete m_recorderControl;
#endif
diff --git a/src/multimedia/platform/darwin/camera/avfcamerasession.mm b/src/multimedia/platform/darwin/camera/avfcamerasession.mm
index fa062a414..295bb4bff 100644
--- a/src/multimedia/platform/darwin/camera/avfcamerasession.mm
+++ b/src/multimedia/platform/darwin/camera/avfcamerasession.mm
@@ -143,8 +143,6 @@ AVFCameraSession::AVFCameraSession(AVFCameraService *service, QObject *parent)
: QObject(parent)
, m_service(service)
, m_capturePreviewWindowOutput(nullptr)
- , m_state(QCamera::UnloadedState)
- , m_active(false)
, m_videoInput(nil)
, m_defaultCodec(0)
{
@@ -217,29 +215,20 @@ AVCaptureDevice *AVFCameraSession::videoCaptureDevice() const
return nullptr;
}
-QCamera::State AVFCameraSession::state() const
+bool AVFCameraSession::isActive() const
{
- if (m_active)
- return QCamera::ActiveState;
-
- return m_state == QCamera::ActiveState ? QCamera::LoadedState : m_state;
+ return m_active;
}
-void AVFCameraSession::setState(QCamera::State newState)
+void AVFCameraSession::setActive(bool active)
{
- if (m_state == newState)
+ if (m_active == active)
return;
- qDebugCamera() << Q_FUNC_INFO << m_state << " -> " << newState;
-
- QCamera::State oldState = m_state;
- m_state = newState;
+ qDebugCamera() << Q_FUNC_INFO << m_active << " -> " << active;
- //attach video input during Unloaded->Loaded transition
- if (oldState == QCamera::UnloadedState)
+ if (active) {
attachVideoInputDevice();
-
- if (m_state == QCamera::ActiveState) {
Q_EMIT readyToConfigureConnections();
m_defaultCodec = 0;
defaultCodec();
@@ -259,19 +248,16 @@ void AVFCameraSession::setState(QCamera::State newState)
if (activeFormatSet)
[videoCaptureDevice() unlockForConfiguration];
- }
-
- if (oldState == QCamera::ActiveState) {
+ } else {
[m_captureSession stopRunning];
[m_captureSession beginConfiguration];
}
-
- Q_EMIT stateChanged(m_state);
}
void AVFCameraSession::processRuntimeError()
{
qWarning() << tr("Runtime camera error");
+ m_active = false;
Q_EMIT error(QCamera::CameraError, tr("Runtime camera error"));
}
@@ -281,7 +267,6 @@ void AVFCameraSession::processSessionStarted()
if (!m_active) {
m_active = true;
Q_EMIT activeChanged(m_active);
- Q_EMIT stateChanged(state());
}
}
@@ -291,7 +276,6 @@ void AVFCameraSession::processSessionStopped()
if (m_active) {
m_active = false;
Q_EMIT activeChanged(m_active);
- Q_EMIT stateChanged(state());
}
}
diff --git a/src/multimedia/platform/darwin/camera/avfcamerasession_p.h b/src/multimedia/platform/darwin/camera/avfcamerasession_p.h
index b31c04bab..d8db43ea5 100644
--- a/src/multimedia/platform/darwin/camera/avfcamerasession_p.h
+++ b/src/multimedia/platform/darwin/camera/avfcamerasession_p.h
@@ -83,9 +83,7 @@ public:
AVCaptureSession *captureSession() const { return m_captureSession; }
AVCaptureDevice *videoCaptureDevice() const;
- QCamera::State state() const;
- QCamera::State requestedState() const { return m_state; }
- bool isActive() const { return m_active; }
+ bool isActive() const;
FourCharCode defaultCodec();
@@ -94,7 +92,7 @@ public:
void setVideoSurface(QAbstractVideoSurface *surface);
public Q_SLOTS:
- void setState(QCamera::State state);
+ void setActive(bool active);
void processRuntimeError();
void processSessionStarted();
@@ -102,7 +100,6 @@ public Q_SLOTS:
Q_SIGNALS:
void readyToConfigureConnections();
- void stateChanged(QCamera::State newState);
void activeChanged(bool);
void newViewfinderFrame(const QVideoFrame &frame);
void error(int error, const QString &errorString);
@@ -119,8 +116,7 @@ private:
AVFCameraRendererControl *m_videoOutput;
AVFCameraWindowControl *m_capturePreviewWindowOutput;
- QCamera::State m_state;
- bool m_active;
+ bool m_active = false;
AVCaptureSession *m_captureSession;
AVCaptureDeviceInput *m_videoInput;
diff --git a/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm b/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm
index f124dffe3..956e2cf73 100644
--- a/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm
+++ b/src/multimedia/platform/darwin/camera/avfimagecapturecontrol.mm
@@ -321,8 +321,7 @@ bool AVFImageCaptureControl::applySettings()
return false;
AVFCameraSession *session = m_service->session();
- if (!session || (session->state() != QCamera::ActiveState
- && session->state() != QCamera::LoadedState))
+ if (!session)
return false;
if (!m_service->imageCaptureControl()
diff --git a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm
index 4b178ff44..cf988783a 100644
--- a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm
+++ b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm
@@ -131,7 +131,7 @@ AVFMediaRecorderControl::AVFMediaRecorderControl(AVFCameraService *service, QObj
, m_session(service->session())
, m_connected(false)
, m_state(QMediaRecorder::StoppedState)
- , m_lastStatus(QMediaRecorder::UnloadedStatus)
+ , m_lastStatus(QMediaRecorder::StoppedStatus)
, m_recordingStarted(false)
, m_recordingFinished(false)
, m_muted(false)
@@ -144,10 +144,10 @@ AVFMediaRecorderControl::AVFMediaRecorderControl(AVFCameraService *service, QObj
m_audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
- connect(m_cameraControl, SIGNAL(stateChanged(QCamera::State)), SLOT(updateStatus()));
+ connect(m_cameraControl, SIGNAL(activeChanged(bool)), SLOT(updateStatus()));
connect(m_cameraControl, SIGNAL(statusChanged(QCamera::Status)), SLOT(updateStatus()));
connect(m_session, SIGNAL(readyToConfigureConnections()), SLOT(setupSessionForCapture()));
- connect(m_session, SIGNAL(stateChanged(QCamera::State)), SLOT(setupSessionForCapture()));
+ connect(m_session, SIGNAL(activeChanged(bool)), SLOT(setupSessionForCapture()));
}
AVFMediaRecorderControl::~AVFMediaRecorderControl()
@@ -191,16 +191,15 @@ QMediaRecorder::Status AVFMediaRecorderControl::status() const
if (m_recordingStarted && !m_recordingFinished)
status = QMediaRecorder::FinalizingStatus;
else
- status = QMediaRecorder::LoadedStatus;
+ status = QMediaRecorder::StoppedStatus;
} else {
status = m_recordingStarted ? QMediaRecorder::RecordingStatus :
QMediaRecorder::StartingStatus;
}
} else {
//camera not started yet
- status = m_cameraControl->state() == QCamera::ActiveState && m_connected ?
- QMediaRecorder::LoadingStatus:
- QMediaRecorder::UnloadedStatus;
+ status = m_cameraControl->isActive() && m_connected ?
+ QMediaRecorder::StartingStatus : QMediaRecorder::StoppedStatus;
}
return status;
@@ -463,8 +462,7 @@ NSDictionary *avfVideoSettings(QMediaEncoderSettings &encoderSettings, AVCapture
void AVFMediaRecorderControl::applySettings()
{
- if (m_state != QMediaRecorder::StoppedState
- || (m_session->state() != QCamera::ActiveState && m_session->state() != QCamera::LoadedState))
+ if (m_state != QMediaRecorder::StoppedState)
return;
QMediaEncoderSettings resolved = m_settings;
@@ -640,7 +638,7 @@ void AVFMediaRecorderControl::setupSessionForCapture()
// request on iOS, but it shoudn't do so until we actually try to record.
AVCaptureSession *captureSession = m_session->captureSession();
- if (!m_connected && m_session->state() != QCamera::UnloadedState) {
+ if (!m_connected && m_session->isActive()) {
// Lock the video capture device to make sure the active format is not reset
const AVFConfigurationLock lock(m_session->videoCaptureDevice());
@@ -672,7 +670,7 @@ void AVFMediaRecorderControl::setupSessionForCapture()
Q_EMIT error(QMediaRecorder::ResourceError, tr("Could not connect the video recorder"));
qWarning() << "Could not connect the video recorder";
}
- } else if (m_connected || m_session->state() == QCamera::UnloadedState) {
+ } else if (m_connected || !m_session->isActive()) {
// Lock the video capture device to make sure the active format is not reset
const AVFConfigurationLock lock(m_session->videoCaptureDevice());
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol.cpp
index ac9aae51a..ca03b4be2 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol.cpp
@@ -49,10 +49,7 @@
QGstreamerCameraControl::QGstreamerCameraControl(QGstreamerCaptureSession *session)
: QPlatformCamera(session),
m_session(session),
- m_state(QCamera::UnloadedState),
- m_status(QCamera::UnloadedStatus),
m_reloadPending(false)
-
{
connect(m_session, SIGNAL(stateChanged(QGstreamerCaptureSession::State)),
this, SLOT(updateStatus()));
@@ -69,18 +66,15 @@ QGstreamerCameraControl::QGstreamerCameraControl(QGstreamerCaptureSession *sessi
QGstreamerCameraControl::~QGstreamerCameraControl() = default;
-void QGstreamerCameraControl::setState(QCamera::State state)
+void QGstreamerCameraControl::setActive(bool active)
{
- if (m_state == state)
+ if (m_active == active)
return;
- m_state = state;
- switch (state) {
- case QCamera::UnloadedState:
- case QCamera::LoadedState:
+ m_active = active;
+ if (!m_active)
m_session->setState(QGstreamerCaptureSession::StoppedState);
- break;
- case QCamera::ActiveState:
+ else {
//postpone changing to Active if the session is nor ready yet
if (m_session->isReady()) {
m_session->setState(QGstreamerCaptureSession::PreviewState);
@@ -89,11 +83,10 @@ void QGstreamerCameraControl::setState(QCamera::State state)
qDebug() << "Camera session is not ready yet, postpone activating";
#endif
}
- break;
}
updateStatus();
- emit stateChanged(m_state);
+ emit activeChanged(active);
}
void QGstreamerCameraControl::setCamera(const QCameraInfo &camera)
@@ -102,28 +95,25 @@ void QGstreamerCameraControl::setCamera(const QCameraInfo &camera)
reloadLater();
}
-QCamera::State QGstreamerCameraControl::state() const
+bool QGstreamerCameraControl::isActive() const
{
- return m_state;
+ return m_active;
}
void QGstreamerCameraControl::updateStatus()
{
QCamera::Status oldStatus = m_status;
- switch (m_state) {
- case QCamera::UnloadedState:
- m_status = QCamera::UnloadedStatus;
- break;
- case QCamera::LoadedState:
- m_status = QCamera::LoadedStatus;
- break;
- case QCamera::ActiveState:
+ if (m_active) {
if (m_session->state() == QGstreamerCaptureSession::StoppedState)
m_status = QCamera::StartingStatus;
else
m_status = QCamera::ActiveStatus;
- break;
+ } else {
+ if (m_session->state() == QGstreamerCaptureSession::StoppedState)
+ m_status = QCamera::InactiveStatus;
+ else
+ m_status = QCamera::StoppingStatus;
}
if (oldStatus != m_status) {
@@ -135,7 +125,7 @@ void QGstreamerCameraControl::updateStatus()
void QGstreamerCameraControl::reloadLater()
{
//qDebug() << "reload pipeline requested";
- if (!m_reloadPending && m_state == QCamera::ActiveState) {
+ if (!m_reloadPending && m_active) {
m_reloadPending = true;
m_session->setState(QGstreamerCaptureSession::StoppedState);
QMetaObject::invokeMethod(this, "reloadPipeline", Qt::QueuedConnection);
@@ -147,7 +137,7 @@ void QGstreamerCameraControl::reloadPipeline()
//qDebug() << "reload pipeline";
if (m_reloadPending) {
m_reloadPending = false;
- if (m_state == QCamera::ActiveState && m_session->isReady()) {
+ if (m_active && m_session->isReady()) {
m_session->setState(QGstreamerCaptureSession::PreviewState);
}
}
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol_p.h
index e29da1ae1..8b0f2a038 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol_p.h
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameracontrol_p.h
@@ -67,8 +67,8 @@ public:
bool isValid() const { return true; }
- QCamera::State state() const override;
- void setState(QCamera::State state) override;
+ bool isActive() const override;
+ void setActive(bool active) override;
QCamera::Status status() const override { return m_status; }
@@ -86,8 +86,8 @@ private slots:
private:
QGstreamerCaptureSession *m_session;
- QCamera::State m_state;
- QCamera::Status m_status;
+ bool m_active = false;
+ QCamera::Status m_status = QCamera::InactiveStatus;
bool m_reloadPending;
};
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp
index 84f7ae9bf..71f7b9ac9 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp
@@ -48,7 +48,7 @@ QGstreamerRecorderControl::QGstreamerRecorderControl(QGstreamerCaptureSession *s
: QPlatformMediaRecorder(session),
m_session(session),
m_state(QMediaRecorder::StoppedState),
- m_status(QMediaRecorder::UnloadedStatus)
+ m_status(QMediaRecorder::StoppedStatus)
{
connect(m_session, SIGNAL(stateChanged(QGstreamerCaptureSession::State)), SLOT(updateStatus()));
connect(m_session, SIGNAL(error(int,QString)), SLOT(handleSessionError(int,QString)));
@@ -82,7 +82,7 @@ QMediaRecorder::Status QGstreamerRecorderControl::status() const
{
static QMediaRecorder::Status statusTable[3][3] = {
//Stopped recorder state:
- { QMediaRecorder::LoadedStatus, QMediaRecorder::FinalizingStatus, QMediaRecorder::FinalizingStatus },
+ { QMediaRecorder::StoppedStatus, QMediaRecorder::FinalizingStatus, QMediaRecorder::FinalizingStatus },
//Recording recorder state:
{ QMediaRecorder::StartingStatus, QMediaRecorder::RecordingStatus, QMediaRecorder::PausedStatus },
//Paused recorder state:
@@ -114,7 +114,7 @@ void QGstreamerRecorderControl::updateStatus()
m_status = newStatus;
emit statusChanged(m_status);
// If stop has been called and session state became stopped.
- if (m_status == QMediaRecorder::LoadedStatus)
+ if (m_status == QMediaRecorder::StoppedStatus)
emit stateChanged(m_state);
}
}
diff --git a/src/multimedia/platform/qnx/camera/bbcamerasession.cpp b/src/multimedia/platform/qnx/camera/bbcamerasession.cpp
index b58e1b0d2..8493a236e 100644
--- a/src/multimedia/platform/qnx/camera/bbcamerasession.cpp
+++ b/src/multimedia/platform/qnx/camera/bbcamerasession.cpp
@@ -126,7 +126,7 @@ BbCameraSession::BbCameraSession(QObject *parent)
, m_lastImageCaptureId(0)
, m_captureDestination(QCameraImageCapture::CaptureToFile)
, m_videoState(QMediaRecorder::StoppedState)
- , m_videoStatus(QMediaRecorder::LoadedStatus)
+ , m_videoStatus(QMediaRecorder::StoppedStatus)
, m_handle(CAMERA_HANDLE_INVALID)
, m_windowGrabber(new WindowGrabber(this))
{
@@ -1029,7 +1029,7 @@ bool BbCameraSession::startVideoRecording()
const camera_error_t result = camera_start_video(m_handle, QFile::encodeName(m_videoOutputLocation), 0, videoRecordingStatusCallback, this);
if (result != CAMERA_EOK) {
- m_videoStatus = QMediaRecorder::LoadedStatus;
+ m_videoStatus = QMediaRecorder::StoppedStatus;
emit videoStatusChanged(m_videoStatus);
emit videoError(QMediaRecorder::ResourceError, tr("Unable to start video recording"));
@@ -1049,7 +1049,7 @@ void BbCameraSession::stopVideoRecording()
emit videoError(QMediaRecorder::ResourceError, tr("Unable to stop video recording"));
}
- m_videoStatus = QMediaRecorder::LoadedStatus;
+ m_videoStatus = QMediaRecorder::StoppedStatus;
emit videoStatusChanged(m_videoStatus);
m_videoRecordingDuration.invalidate();
diff --git a/src/multimedia/platform/qplatformcamera_p.h b/src/multimedia/platform/qplatformcamera_p.h
index 98b44134d..39603278e 100644
--- a/src/multimedia/platform/qplatformcamera_p.h
+++ b/src/multimedia/platform/qplatformcamera_p.h
@@ -58,8 +58,8 @@ class Q_MULTIMEDIA_EXPORT QPlatformCamera : public QObject
Q_OBJECT
public:
- virtual QCamera::State state() const = 0;
- virtual void setState(QCamera::State state) = 0;
+ virtual bool isActive() const = 0;
+ virtual void setActive(bool active) = 0;
virtual QCamera::Status status() const = 0;
@@ -72,7 +72,7 @@ public:
virtual void setVideoSurface(QAbstractVideoSurface *surface) = 0;
Q_SIGNALS:
- void stateChanged(QCamera::State);
+ void activeChanged(bool);
void statusChanged(QCamera::Status);
void error(int error, const QString &errorString);
diff --git a/src/multimedia/recording/qmediarecorder.h b/src/multimedia/recording/qmediarecorder.h
index 67a95fe67..89bc20fcf 100644
--- a/src/multimedia/recording/qmediarecorder.h
+++ b/src/multimedia/recording/qmediarecorder.h
@@ -89,9 +89,7 @@ public:
enum Status {
UnavailableStatus,
- UnloadedStatus,
- LoadingStatus,
- LoadedStatus,
+ StoppedStatus,
StartingStatus,
RecordingStatus,
PausedStatus,