diff options
author | Piotr Srebrny <piotr.srebrny@qt.io> | 2022-11-04 12:20:19 +0100 |
---|---|---|
committer | Piotr Srebrny <piotr.srebrny@qt.io> | 2022-11-10 11:41:49 +0100 |
commit | 7c55a711cf5153d5b0a7e2318314cbe0c1e42361 (patch) | |
tree | fa0d649c52ecc2c7c859a2252413566bfa63bb40 /src/plugins/multimedia/gstreamer | |
parent | 79267f7d3da56a4907d6ff9f2ddfdb2d296a47d1 (diff) |
Add parent-child relationship on audio sources and sinks
QAudioSink and QAudioSource must propagate their parents to
the platform specific implementation to enable correct operation
of the moveToThread function. Furthermore, all QObject elements
that are owned by audio sink/source must also establish
the parent-child relationship. This mainly affects QTimer's used
by the audio sink/sources.
Pick-to: 6.4
Fixes: QTBUG-108187
Change-Id: I476a97300a6fb1e0022b2a5570a3803be8fd0a88
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Diffstat (limited to 'src/plugins/multimedia/gstreamer')
4 files changed, 11 insertions, 10 deletions
diff --git a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink.cpp b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink.cpp index cf339d7d7..86a10da66 100644 --- a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink.cpp +++ b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink.cpp @@ -21,7 +21,7 @@ QT_BEGIN_NAMESPACE -QMaybe<QPlatformAudioSink *> QGStreamerAudioSink::create(const QAudioDevice &device) +QMaybe<QPlatformAudioSink *> QGStreamerAudioSink::create(const QAudioDevice &device, QObject *parent) { auto maybeAppSrc = QGstAppSrc::create(); if (!maybeAppSrc) @@ -35,12 +35,13 @@ QMaybe<QPlatformAudioSink *> QGStreamerAudioSink::create(const QAudioDevice &dev if (!volume) return errorMessageCannotFindElement("volume"); - return new QGStreamerAudioSink(device, maybeAppSrc.value(), audioconvert, volume); + return new QGStreamerAudioSink(device, maybeAppSrc.value(), audioconvert, volume, parent); } QGStreamerAudioSink::QGStreamerAudioSink(const QAudioDevice &device, QGstAppSrc *appsrc, - QGstElement audioconvert, QGstElement volume) - : m_device(device.id()), + QGstElement audioconvert, QGstElement volume, QObject *parent) + : QPlatformAudioSink(parent), + m_device(device.id()), gstPipeline("pipeline"), gstVolume(std::move(volume)), m_appSrc(appsrc) diff --git a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink_p.h b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink_p.h index 26d2c9b28..07286a3b5 100644 --- a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink_p.h +++ b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink_p.h @@ -43,7 +43,7 @@ class QGStreamerAudioSink Q_OBJECT public: - static QMaybe<QPlatformAudioSink *> create(const QAudioDevice &device); + static QMaybe<QPlatformAudioSink *> create(const QAudioDevice &device, QObject *parent); ~QGStreamerAudioSink(); void start(QIODevice *device) override; @@ -70,7 +70,7 @@ private Q_SLOTS: private: QGStreamerAudioSink(const QAudioDevice &device, QGstAppSrc *appsrc, QGstElement audioconvert, - QGstElement volume); + QGstElement volume, QObject *parent); void setState(QAudio::State state); void setError(QAudio::Error error); @@ -89,7 +89,6 @@ private: bool m_pullMode = true; bool m_opened = false; QIODevice *m_audioSource = nullptr; - QTimer m_periodTimer; int m_bufferSize = 0; qint64 m_bytesProcessed = 0; QElapsedTimer m_timeStamp; diff --git a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource.cpp b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource.cpp index 77d09be49..8d018f859 100644 --- a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource.cpp +++ b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource.cpp @@ -18,8 +18,9 @@ Q_DECLARE_METATYPE(GstSample *); QT_BEGIN_NAMESPACE -QGStreamerAudioSource::QGStreamerAudioSource(const QAudioDevice &device) - : m_info(device), +QGStreamerAudioSource::QGStreamerAudioSource(const QAudioDevice &device, QObject *parent) + : QPlatformAudioSource(parent), + m_info(device), m_device(device.id()) { qRegisterMetaType<GstSample *>(); diff --git a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource_p.h b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource_p.h index 24c84fe56..9a6860a68 100644 --- a/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource_p.h +++ b/src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource_p.h @@ -43,7 +43,7 @@ class QGStreamerAudioSource Q_OBJECT friend class GStreamerInputPrivate; public: - QGStreamerAudioSource(const QAudioDevice &device); + QGStreamerAudioSource(const QAudioDevice &device, QObject *parent); ~QGStreamerAudioSource(); void start(QIODevice *device) override; |