summaryrefslogtreecommitdiffstats
path: root/src/multimedia/qnx
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/multimedia/qnx
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/multimedia/qnx')
-rw-r--r--src/multimedia/qnx/qqnxaudiosink.cpp20
-rw-r--r--src/multimedia/qnx/qqnxaudiosink_p.h4
-rw-r--r--src/multimedia/qnx/qqnxaudiosource.cpp5
-rw-r--r--src/multimedia/qnx/qqnxaudiosource_p.h2
-rw-r--r--src/multimedia/qnx/qqnxmediadevices.cpp10
-rw-r--r--src/multimedia/qnx/qqnxmediadevices_p.h6
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