summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-03-05 11:49:43 +0800
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-03-05 14:27:09 +0000
commitae3190d9fbd33f166f92443de5755c69c707fd3f (patch)
treed4ce542e7bc3e18e2998d8976f9dcf9b87cbafa3
parentf17aff8edeb52e4169a24596d2bdde4881d1a52d (diff)
GStreamer: QGstreamerMediaCapture - make element state more robust
avoid setting elements to PLAYING, when the pipeline isn't playing Pick-to: 6.6 6.5 Change-Id: I133e4f3fc0a32805c2394cbf96c9f84dca4c972c Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> (cherry picked from commit c2e50467eee5a01efaadf3b0ea9cd893a3f2b784) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediacapture.cpp15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediacapture.cpp b/src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediacapture.cpp
index 6520272a6..86acfd07c 100644
--- a/src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediacapture.cpp
+++ b/src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediacapture.cpp
@@ -116,9 +116,7 @@ void QGstreamerMediaCapture::setCamera(QPlatformCamera *camera)
qLinkGstElements(camera, gstVideoTee);
- gstVideoOutput->gstElement().setState(GST_STATE_PLAYING);
- gstVideoTee.setState(GST_STATE_PLAYING);
- camera.setState(GST_STATE_PLAYING);
+ gstPipeline.syncChildrenState();
}
});
@@ -150,7 +148,7 @@ void QGstreamerMediaCapture::setImageCapture(QPlatformImageCapture *imageCapture
if (m_imageCapture) {
imageCaptureSink = m_imageCapture->gstElement().staticPad("sink");
gstPipeline.add(m_imageCapture->gstElement());
- m_imageCapture->gstElement().setState(GST_STATE_PLAYING);
+ m_imageCapture->gstElement().syncStateWithParent();
linkTeeToPad(gstVideoTee, imageCaptureSink);
m_imageCapture->setCaptureSession(this);
}
@@ -197,7 +195,7 @@ void QGstreamerMediaCapture::linkEncoder(QGstPad audioSink, QGstPad videoSink)
encoderVideoCapsFilter.src().link(videoSink);
linkTeeToPad(gstVideoTee, encoderVideoCapsFilter.sink());
- encoderVideoCapsFilter.setState(GST_STATE_PLAYING);
+ encoderVideoCapsFilter.syncStateWithParent();
encoderVideoSink = encoderVideoCapsFilter.sink();
}
@@ -213,7 +211,7 @@ void QGstreamerMediaCapture::linkEncoder(QGstPad audioSink, QGstPad videoSink)
encoderAudioCapsFilter.src().link(audioSink);
linkTeeToPad(gstAudioTee, encoderAudioCapsFilter.sink());
- encoderAudioCapsFilter.setState(GST_STATE_PLAYING);
+ encoderAudioCapsFilter.syncStateWithParent();
encoderAudioSink = encoderAudioCapsFilter.sink();
}
});
@@ -274,8 +272,7 @@ void QGstreamerMediaCapture::setAudioInput(QPlatformAudioInput *input)
linkTeeToPad(gstAudioTee, gstAudioOutput->gstElement().staticPad("sink"));
}
- gstAudioTee.setState(GST_STATE_PLAYING);
- gstAudioInput->gstElement().setStateSync(GST_STATE_PLAYING);
+ gstPipeline.syncChildrenState();
linkTeeToPad(gstAudioTee, encoderAudioSink);
}
@@ -302,7 +299,7 @@ void QGstreamerMediaCapture::setAudioOutput(QPlatformAudioOutput *output)
gstAudioOutput = static_cast<QGstreamerAudioOutput *>(output);
if (gstAudioOutput && gstAudioInput) {
gstPipeline.add(gstAudioOutput->gstElement());
- gstAudioOutput->gstElement().setState(GST_STATE_PLAYING);
+ gstPipeline.syncChildrenState();
linkTeeToPad(gstAudioTee, gstAudioOutput->gstElement().staticPad("sink"));
}
});