From ad9f763efea36663bf17321459d44e8dd5e5e653 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Tue, 24 Jul 2018 12:53:07 +0200 Subject: Gstreamer: Emit stateChanged(StoppedState) when recording is finished When stop is requested, the state becomes QMediaRecorder::StoppedState and stateChanged() is sent immediately, also the status is changed from QMediaRecorder::RecordingStatus to QMediaRecorder::FinalizingStatus. But since stopping is asynchronous QMediaRecorder::StoppedState is sent before recording has been fully finished. When EOS is received from gstreamer and recording has been fully stopped, the status will be changed from QMediaRecorder::FinalizingStatus to QMediaRecorder::LoadedStatus and only in this case. So fixed to send stateChanged(QMediaRecorder::StoppedState) right after LoadedStatus. Task-number: QTBUG-69402 Change-Id: Ic7429a4bfea6b1f443a105a0540737072ad42de2 Reviewed-by: Christian Stromme --- src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp | 2 -- src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp | 4 +++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp index b268592c6..c83e467a6 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp @@ -107,8 +107,6 @@ QGstreamerCaptureSession::QGstreamerCaptureSession(QGstreamerCaptureSession::Cap qWarning() << QMediaRecorder::Error(e) << ":" << str.toLatin1().constData(); }); m_mediaContainerControl = new QGstreamerMediaContainerControl(this); - - setState(StoppedState); } QGstreamerCaptureSession::~QGstreamerCaptureSession() diff --git a/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp b/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp index 958204803..ba26d8df8 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp @@ -115,6 +115,9 @@ void QGstreamerRecorderControl::updateStatus() if (m_status != newStatus) { m_status = newStatus; emit statusChanged(m_status); + // If stop has been called and session state became stopped. + if (m_status == QMediaRecorder::LoadedStatus) + emit stateChanged(m_state); } } @@ -204,7 +207,6 @@ void QGstreamerRecorderControl::stop() m_session->setState(QGstreamerCaptureSession::PreviewState); } - emit stateChanged(m_state); updateStatus(); } -- cgit v1.2.3