summaryrefslogtreecommitdiffstats
path: root/src/imports/multimedia
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/imports/multimedia
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/imports/multimedia')
-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
10 files changed, 49 insertions, 143 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
-