summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp2
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp14
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp17
3 files changed, 20 insertions, 13 deletions
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp
index 9e803ead5..e19a9c28e 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercameraimagecapture.cpp
@@ -360,7 +360,7 @@ void QGstreamerCameraImageCapture::link()
videoSrcPad = m_session->getVideoPad();
videoSrcPad.link(bin.staticPad("sink"));
bin.lockState(false);
- bin.setStateSync(GST_STATE_PAUSED);
+ bin.setState(GST_STATE_PAUSED);
gstPipeline.setStateSync(GST_STATE_PLAYING);
}
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp
index 4c8d04e92..6fbd56cec 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp
@@ -99,8 +99,9 @@ void QGstreamerMediaCapture::setCamera(QPlatformCamera *camera)
if (gstCamera == control)
return;
- //auto state = gstPipeline.state();
- gstPipeline.setStateSync(GST_STATE_PAUSED);
+ auto state = gstPipeline.state();
+ if (state != GST_STATE_PAUSED)
+ gstPipeline.setStateSync(GST_STATE_PAUSED);
if (gstVideoTee.isNull()) {
gstVideoTee = QGstElement("tee", "videotee");
@@ -120,13 +121,14 @@ void QGstreamerMediaCapture::setCamera(QPlatformCamera *camera)
gstCamera = control;
if (gstCamera) {
- gstPipeline.add(gstCamera->gstElement());
+ QGstElement camera = gstCamera->gstElement();
+ gstPipeline.add(camera);
gstCamera->gstElement().link(gstVideoTee);
- gstCamera->gstElement().setStateSync(gstPipeline.state());
gstCamera->setCaptureSession(this);
- //gstCamera->setPipeline(gstPipeline); // needed?
+ camera.setState(GST_STATE_PAUSED);
}
- gstPipeline.setStateSync(GST_STATE_PLAYING);
+ if (state != GST_STATE_PAUSED)
+ gstPipeline.setState(state);
emit cameraChanged();
gstPipeline.dumpGraph("camera");
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp
index 86b57139c..b73586a62 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp
@@ -110,7 +110,7 @@ void QGstreamerMediaEncoder::updateStatus()
auto newStatus = statusTable[state()][sessionState];
- qCDebug(qLcMediaEncoder) << "updateStatus" << newStatus;
+ qCDebug(qLcMediaEncoder) << "updateStatus" << state() << sessionState << newStatus;
statusChanged(newStatus);
}
@@ -287,13 +287,18 @@ void QGstreamerMediaEncoder::record()
{
if (!m_session)
return;
- if (state() == QMediaEncoder::PausedState) {
+ auto oldState = state();
+ stateChanged(QMediaEncoder::RecordingState);
+
+ if (oldState == QMediaEncoder::PausedState) {
// coming from paused state
+ stateChanged(QMediaEncoder::RecordingState);
gstEncoder.setState(GST_STATE_PLAYING);
updateStatus();
return;
}
+ updateStatus();
// create new encoder
if (m_requestedOutputLocation.isEmpty()) {
QString container = m_resolvedSettings.mimeType().preferredSuffix();
@@ -322,9 +327,9 @@ void QGstreamerMediaEncoder::record()
}
}
- gstEncoder.setStateSync(GST_STATE_PAUSED);
- gstFileSink.setStateSync(GST_STATE_PAUSED);
- gstPipeline.setStateSync(GST_STATE_PLAYING);
+ gstEncoder.setState(GST_STATE_PAUSED);
+ gstFileSink.setState(GST_STATE_PAUSED);
+ gstPipeline.setState(GST_STATE_PLAYING);
m_duration.start();
heartbeat.start();
@@ -360,7 +365,7 @@ void QGstreamerMediaEncoder::stop()
m_session->releaseVideoPad(videoSrcPad);
audioSrcPad = videoSrcPad = {};
- gstPipeline.setStateSync(GST_STATE_PLAYING);
+ gstPipeline.setState(GST_STATE_PLAYING);
//with live sources it's necessary to send EOS even to pipeline
//before going to STOPPED state
qCDebug(qLcMediaEncoder) << ">>>>>>>>>>>>> sending EOS";