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/multimedia/qnx | |
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/multimedia/qnx')
-rw-r--r-- | src/multimedia/qnx/qqnxaudiosink.cpp | 20 | ||||
-rw-r--r-- | src/multimedia/qnx/qqnxaudiosink_p.h | 4 | ||||
-rw-r--r-- | src/multimedia/qnx/qqnxaudiosource.cpp | 5 | ||||
-rw-r--r-- | src/multimedia/qnx/qqnxaudiosource_p.h | 2 | ||||
-rw-r--r-- | src/multimedia/qnx/qqnxmediadevices.cpp | 10 | ||||
-rw-r--r-- | src/multimedia/qnx/qqnxmediadevices_p.h | 6 |
6 files changed, 27 insertions, 20 deletions
diff --git a/src/multimedia/qnx/qqnxaudiosink.cpp b/src/multimedia/qnx/qqnxaudiosink.cpp index 0a4c073c5..f78371b02 100644 --- a/src/multimedia/qnx/qqnxaudiosink.cpp +++ b/src/multimedia/qnx/qqnxaudiosink.cpp @@ -14,9 +14,11 @@ QT_BEGIN_NAMESPACE -QQnxAudioSink::QQnxAudioSink(const QAudioDevice &deviceInfo) - : m_source(0) +QQnxAudioSink::QQnxAudioSink(const QAudioDevice &deviceInfo, QObject *parent) + : QPlatformAudioSink(parent) + , m_source(0) , m_pushSource(false) + , m_timer(new QTimer(this)) , m_error(QAudio::NoError) , m_state(QAudio::StoppedState) , m_volume(1.0) @@ -26,9 +28,9 @@ QQnxAudioSink::QQnxAudioSink(const QAudioDevice &deviceInfo) , m_deviceInfo(deviceInfo) , m_pcmNotifier(0) { - m_timer.setSingleShot(false); - m_timer.setInterval(20); - connect(&m_timer, &QTimer::timeout, this, &QQnxAudioSink::pullData); + m_timer->setSingleShot(false); + m_timer->setInterval(20); + connect(m_timer, &QTimer::timeout, this, &QQnxAudioSink::pullData); const std::optional<snd_pcm_channel_info_t> info = QnxAudioUtils::pcmChannelInfo( m_deviceInfo.id(), QAudioDevice::Output); @@ -52,7 +54,7 @@ void QQnxAudioSink::start(QIODevice *source) if (open()) { changeState(QAudio::ActiveState, QAudio::NoError); - m_timer.start(); + m_timer->start(); } else { changeState(QAudio::StoppedState, QAudio::OpenError); } @@ -308,7 +310,7 @@ bool QQnxAudioSink::open() void QQnxAudioSink::close() { if (!m_pushSource) - m_timer.stop(); + m_timer->stop(); destroyPcmNotifiers(); @@ -412,7 +414,7 @@ qint64 QQnxAudioSink::write(const char *data, qint64 len) void QQnxAudioSink::suspendInternal(QAudio::State suspendState) { if (!m_pushSource) - m_timer.stop(); + m_timer->stop(); changeState(suspendState, QAudio::NoError); } @@ -423,7 +425,7 @@ void QQnxAudioSink::resumeInternal() changeState(state, QAudio::NoError); - m_timer.start(); + m_timer->start(); } QAudio::State suspendState(const snd_pcm_event_t &event) diff --git a/src/multimedia/qnx/qqnxaudiosink_p.h b/src/multimedia/qnx/qqnxaudiosink_p.h index aed42d07f..94669ecb7 100644 --- a/src/multimedia/qnx/qqnxaudiosink_p.h +++ b/src/multimedia/qnx/qqnxaudiosink_p.h @@ -36,7 +36,7 @@ class QQnxAudioSink : public QPlatformAudioSink Q_OBJECT public: - explicit QQnxAudioSink(const QAudioDevice &deviceInfo); + explicit QQnxAudioSink(const QAudioDevice &deviceInfo, QObject *parent); ~QQnxAudioSink(); void start(QIODevice *source) override; @@ -79,7 +79,7 @@ private: QIODevice *m_source; bool m_pushSource; - QTimer m_timer; + QTimer *m_timer; QAudio::Error m_error; QAudio::State m_state; diff --git a/src/multimedia/qnx/qqnxaudiosource.cpp b/src/multimedia/qnx/qqnxaudiosource.cpp index 214427da3..1726a82d8 100644 --- a/src/multimedia/qnx/qqnxaudiosource.cpp +++ b/src/multimedia/qnx/qqnxaudiosource.cpp @@ -9,8 +9,9 @@ QT_BEGIN_NAMESPACE -QQnxAudioSource::QQnxAudioSource(const QAudioDevice &deviceInfo) - : m_audioSource(0) +QQnxAudioSource::QQnxAudioSource(const QAudioDevice &deviceInfo, QObject *parent) + : QPlatformAudioSource(parent) + , m_audioSource(0) , m_pcmNotifier(0) , m_error(QAudio::NoError) , m_state(QAudio::StoppedState) diff --git a/src/multimedia/qnx/qqnxaudiosource_p.h b/src/multimedia/qnx/qqnxaudiosource_p.h index 5b923502c..6b9cf61ac 100644 --- a/src/multimedia/qnx/qqnxaudiosource_p.h +++ b/src/multimedia/qnx/qqnxaudiosource_p.h @@ -33,7 +33,7 @@ class QQnxAudioSource : public QPlatformAudioSource Q_OBJECT public: - explicit QQnxAudioSource(const QAudioDevice &deviceInfo); + explicit QQnxAudioSource(const QAudioDevice &deviceInfo, QObject *parent); ~QQnxAudioSource(); void start(QIODevice*) override; diff --git a/src/multimedia/qnx/qqnxmediadevices.cpp b/src/multimedia/qnx/qqnxmediadevices.cpp index 899c8bb15..d9e33fcdc 100644 --- a/src/multimedia/qnx/qqnxmediadevices.cpp +++ b/src/multimedia/qnx/qqnxmediadevices.cpp @@ -55,14 +55,16 @@ QList<QAudioDevice> QQnxMediaDevices::audioOutputs() const return ::enumeratePcmDevices(QAudioDevice::Output); } -QPlatformAudioSource *QQnxMediaDevices::createAudioSource(const QAudioDevice &deviceInfo) +QPlatformAudioSource *QQnxMediaDevices::createAudioSource(const QAudioDevice &deviceInfo, + QObject *parent) { - return new QQnxAudioSource(deviceInfo); + return new QQnxAudioSource(deviceInfo, parent); } -QPlatformAudioSink *QQnxMediaDevices::createAudioSink(const QAudioDevice &deviceInfo) +QPlatformAudioSink *QQnxMediaDevices::createAudioSink(const QAudioDevice &deviceInfo, + QObject *parent) { - return new QQnxAudioSink(deviceInfo); + return new QQnxAudioSink(deviceInfo, parent); } QT_END_NAMESPACE diff --git a/src/multimedia/qnx/qqnxmediadevices_p.h b/src/multimedia/qnx/qqnxmediadevices_p.h index 55aa759b3..b8ccf5807 100644 --- a/src/multimedia/qnx/qqnxmediadevices_p.h +++ b/src/multimedia/qnx/qqnxmediadevices_p.h @@ -28,8 +28,10 @@ public: QList<QAudioDevice> audioInputs() const override; QList<QAudioDevice> audioOutputs() const override; - QPlatformAudioSource *createAudioSource(const QAudioDevice &deviceInfo) override; - QPlatformAudioSink *createAudioSink(const QAudioDevice &deviceInfo) override; + QPlatformAudioSource *createAudioSource(const QAudioDevice &deviceInfo, + QObject *parent) override; + QPlatformAudioSink *createAudioSink(const QAudioDevice &deviceInfo, + QObject *parent) override; }; QT_END_NAMESPACE |