diff options
author | Tim Blechmann <tim@klingt.org> | 2024-04-03 12:18:26 +0800 |
---|---|---|
committer | Tim Blechmann <tim@klingt.org> | 2024-04-09 21:51:40 +0800 |
commit | 626c07404fdbd20925be21416c8b0278245c3142 (patch) | |
tree | 251074b3e643e685ac092be0de120d1ad18f6dc9 /src/plugins | |
parent | 4ef4fa1aa0181adaaaa33aa86286c3c4ff7d93af (diff) |
GStreamer: QGstreamerAudioDecoder - trivial cleanups
* move arguments
* clean up public class interface
* only modify pipeline while not playing
Task-number: QTBUG-123904
Pick-to: 6.5 6.6 6.7
Change-Id: I05f60f83aae3b7b781ec07b9cc3b2d3d95bc3702
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder.cpp | 20 | ||||
-rw-r--r-- | src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder_p.h | 13 |
2 files changed, 19 insertions, 14 deletions
diff --git a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder.cpp b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder.cpp index d4f434b1a..c0ba743fb 100644 --- a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder.cpp +++ b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder.cpp @@ -53,7 +53,9 @@ QMaybe<QPlatformAudioDecoder *> QGstreamerAudioDecoder::create(QAudioDecoder *pa QGstreamerAudioDecoder::QGstreamerAudioDecoder(QGstPipeline playbin, QGstElement audioconvert, QAudioDecoder *parent) - : QPlatformAudioDecoder(parent), m_playbin(playbin), m_audioConvert(audioconvert) + : QPlatformAudioDecoder(parent), + m_playbin(std::move(playbin)), + m_audioConvert(std::move(audioconvert)) { // Sort out messages m_playbin.installMessageFilter(this); @@ -94,13 +96,13 @@ void QGstreamerAudioDecoder::configureAppSrcElement(GObject* object, GObject *or Q_UNUSED(pspec); // In case we switch from appsrc to not - if (!self->appsrc()) + if (!self->m_appSrc) return; QGstElementHandle appsrc; g_object_get(orig, "source", &appsrc, NULL); - auto *qAppSrc = self->appsrc(); + auto *qAppSrc = self->m_appSrc; qAppSrc->setExternalAppSrc( QGstElement(appsrc.get(), QGstElement::NeedsRef)); // CHECK: can we `release()`? qAppSrc->setup(self->mDevice); @@ -468,8 +470,10 @@ void QGstreamerAudioDecoder::addAppSink() gst_app_sink_set_max_buffers(m_appSink.appSink(), MAX_BUFFERS_IN_QUEUE); gst_base_sink_set_sync(m_appSink.baseSink(), FALSE); - m_outputBin.add(m_appSink); - qLinkGstElements(m_audioConvert, m_appSink); + QGstPipeline::modifyPipelineWhileNotRunning(m_playbin.getPipeline(), [&] { + m_outputBin.add(m_appSink); + qLinkGstElements(m_audioConvert, m_appSink); + }); } void QGstreamerAudioDecoder::removeAppSink() @@ -477,8 +481,10 @@ void QGstreamerAudioDecoder::removeAppSink() if (!m_appSink) return; - qUnlinkGstElements(m_audioConvert, m_appSink); - m_outputBin.stopAndRemoveElements(m_appSink); + QGstPipeline::modifyPipelineWhileNotRunning(m_playbin.getPipeline(), [&] { + qUnlinkGstElements(m_audioConvert, m_appSink); + m_outputBin.stopAndRemoveElements(m_appSink); + }); m_appSink = {}; } diff --git a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder_p.h b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder_p.h index 2778d594f..ac19cc417 100644 --- a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder_p.h +++ b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder_p.h @@ -65,19 +65,18 @@ public: // GStreamerBusMessageFilter interface bool processBusMessage(const QGstreamerMessage &message) override; -#if QT_CONFIG(gstreamer_app) - QGstAppSrc *appsrc() const { return m_appSrc; } - static void configureAppSrcElement(GObject*, GObject*, GParamSpec*, QGstreamerAudioDecoder *_this); -#endif - - static GstFlowReturn new_sample(GstAppSink *sink, gpointer user_data); - private slots: void updateDuration(); private: QGstreamerAudioDecoder(QGstPipeline playbin, QGstElement audioconvert, QAudioDecoder *parent); +#if QT_CONFIG(gstreamer_app) + static GstFlowReturn new_sample(GstAppSink *sink, gpointer user_data); + static void configureAppSrcElement(GObject *, GObject *, GParamSpec *, + QGstreamerAudioDecoder *_this); +#endif + void setAudioFlags(bool wantNativeAudio); void addAppSink(); void removeAppSink(); |