summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/multimedia/recording/qmediarecorder.cpp4
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol.mm10
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol_ios.mm8
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];