summaryrefslogtreecommitdiffstats
path: root/src/plugins/multimedia/gstreamer
diff options
context:
space:
mode:
authorPiotr Srebrny <piotr.srebrny@qt.io>2022-11-04 12:20:19 +0100
committerPiotr Srebrny <piotr.srebrny@qt.io>2022-11-10 11:41:49 +0100
commit7c55a711cf5153d5b0a7e2318314cbe0c1e42361 (patch)
treefa0d649c52ecc2c7c859a2252413566bfa63bb40 /src/plugins/multimedia/gstreamer
parent79267f7d3da56a4907d6ff9f2ddfdb2d296a47d1 (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')
-rw-r--r--src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink.cpp9
-rw-r--r--src/plugins/multimedia/gstreamer/audio/qgstreameraudiosink_p.h5
-rw-r--r--src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource.cpp5
-rw-r--r--src/plugins/multimedia/gstreamer/audio/qgstreameraudiosource_p.h2
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;