diff options
-rw-r--r-- | src/multimedia/recording/qmediarecorder.cpp | 4 | ||||
-rw-r--r-- | src/plugins/avfoundation/camera/avfmediarecordercontrol.mm | 10 | ||||
-rw-r--r-- | src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm | 8 |
3 files changed, 16 insertions, 6 deletions
diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp index d3962b78f..3bab3dada 100644 --- a/src/multimedia/recording/qmediarecorder.cpp +++ b/src/multimedia/recording/qmediarecorder.cpp @@ -909,6 +909,10 @@ void QMediaRecorder::stop() \enum QMediaRecorder::State \value StoppedState The recorder is not active. + If this is the state after recording then the actual created recording has + finished being written to the final location and is ready on all platforms + except on Android. On Android, due to platform limitations, there is no way + to be certain that the recording has finished writing to the final location. \value RecordingState The recording is requested. \value PausedState The recorder is paused. */ diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm b/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm index 79bf2e932..02261027d 100644 --- a/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm +++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm @@ -306,14 +306,16 @@ void AVFMediaRecorderControl::setState(QMediaRecorder::State state) } break; case QMediaRecorder::StoppedState: { - m_state = QMediaRecorder::StoppedState; + m_lastStatus = QMediaRecorder::FinalizingStatus; + Q_EMIT statusChanged(m_lastStatus); [m_movieOutput stopRecording]; unapplySettings(); } } updateStatus(); - Q_EMIT stateChanged(m_state); + if (state != m_state) + Q_EMIT stateChanged(m_state); } void AVFMediaRecorderControl::setMuted(bool muted) @@ -341,6 +343,10 @@ void AVFMediaRecorderControl::handleRecordingStarted() void AVFMediaRecorderControl::handleRecordingFinished() { m_recordingFinished = true; + if (m_state != QMediaRecorder::StoppedState) { + m_state = QMediaRecorder::StoppedState; + Q_EMIT stateChanged(m_state); + } updateStatus(); } diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm index 5f604e9a0..d657dc17d 100644 --- a/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm +++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm @@ -340,7 +340,7 @@ void AVFMediaRecorderControlIOS::assetWriterFinished() Q_ASSERT(cameraControl); const QMediaRecorder::Status lastStatus = m_lastStatus; - + const QMediaRecorder::State lastState = m_state; if (cameraControl->captureMode() & QCamera::CaptureVideo) m_lastStatus = QMediaRecorder::LoadedStatus; else @@ -350,9 +350,11 @@ void AVFMediaRecorderControlIOS::assetWriterFinished() m_service->videoOutput()->resetCaptureDelegate(); [m_service->session()->captureSession() startRunning]; - + m_state = QMediaRecorder::StoppedState; if (m_lastStatus != lastStatus) Q_EMIT statusChanged(m_lastStatus); + if (m_state != lastState) + Q_EMIT stateChanged(m_state); } void AVFMediaRecorderControlIOS::captureModeChanged(QCamera::CaptureModes newMode) @@ -403,10 +405,8 @@ void AVFMediaRecorderControlIOS::cameraStatusChanged(QCamera::Status newStatus) void AVFMediaRecorderControlIOS::stopWriter() { if (m_lastStatus == QMediaRecorder::RecordingStatus) { - m_state = QMediaRecorder::StoppedState; m_lastStatus = QMediaRecorder::FinalizingStatus; - Q_EMIT stateChanged(m_state); Q_EMIT statusChanged(m_lastStatus); [m_writer stop]; |