diff options
Diffstat (limited to 'src/multimedia/platform')
22 files changed, 126 insertions, 176 deletions
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); |