diff options
author | Tim Blechmann <tim@klingt.org> | 2024-03-05 11:49:43 +0800 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-03-05 14:27:09 +0000 |
commit | ae3190d9fbd33f166f92443de5755c69c707fd3f (patch) | |
tree | d4ce542e7bc3e18e2998d8976f9dcf9b87cbafa3 | |
parent | f17aff8edeb52e4169a24596d2bdde4881d1a52d (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.cpp | 15 |
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")); } }); |