summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-04-03 12:18:26 +0800
committerTim Blechmann <tim@klingt.org>2024-04-09 21:51:40 +0800
commit626c07404fdbd20925be21416c8b0278245c3142 (patch)
tree251074b3e643e685ac092be0de120d1ad18f6dc9 /src/plugins
parent4ef4fa1aa0181adaaaa33aa86286c3c4ff7d93af (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.cpp20
-rw-r--r--src/plugins/multimedia/gstreamer/audio/qgstreameraudiodecoder_p.h13
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();