summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/multimedia/alsa/qalsaaudiosink.cpp3
-rw-r--r--src/multimedia/alsa/qalsaaudiosink_p.h2
-rw-r--r--src/multimedia/alsa/qalsaaudiosource.cpp3
-rw-r--r--src/multimedia/alsa/qalsaaudiosource_p.h2
-rw-r--r--src/multimedia/alsa/qalsamediadevices.cpp10
-rw-r--r--src/multimedia/alsa/qalsamediadevices_p.h6
-rw-r--r--src/multimedia/android/qandroidaudiosink.cpp5
-rw-r--r--src/multimedia/android/qandroidaudiosink_p.h2
-rw-r--r--src/multimedia/android/qandroidaudiosource.cpp7
-rw-r--r--src/multimedia/android/qandroidaudiosource_p.h2
-rw-r--r--src/multimedia/android/qandroidmediadevices.cpp10
-rw-r--r--src/multimedia/android/qandroidmediadevices_p.h6
-rw-r--r--src/multimedia/audio/qaudiosink.cpp2
-rw-r--r--src/multimedia/audio/qaudiosource.cpp2
-rw-r--r--src/multimedia/audio/qaudiosystem_p.h2
-rw-r--r--src/multimedia/darwin/qdarwinaudiosink.mm4
-rw-r--r--src/multimedia/darwin/qdarwinaudiosink_p.h2
-rw-r--r--src/multimedia/darwin/qdarwinaudiosource.mm5
-rw-r--r--src/multimedia/darwin/qdarwinaudiosource_p.h2
-rw-r--r--src/multimedia/darwin/qdarwinmediadevices.mm10
-rw-r--r--src/multimedia/darwin/qdarwinmediadevices_p.h6
-rw-r--r--src/multimedia/platform/qplatformmediadevices.cpp12
-rw-r--r--src/multimedia/platform/qplatformmediadevices_p.h15
-rw-r--r--src/multimedia/pulseaudio/qpulseaudiomediadevices.cpp10
-rw-r--r--src/multimedia/pulseaudio/qpulseaudiomediadevices_p.h6
-rw-r--r--src/multimedia/pulseaudio/qpulseaudiosink.cpp5
-rw-r--r--src/multimedia/pulseaudio/qpulseaudiosink_p.h2
-rw-r--r--src/multimedia/pulseaudio/qpulseaudiosource.cpp5
-rw-r--r--src/multimedia/pulseaudio/qpulseaudiosource_p.h2
-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
-rw-r--r--src/multimedia/wasm/qwasmaudiosink.cpp18
-rw-r--r--src/multimedia/wasm/qwasmaudiosink_p.h4
-rw-r--r--src/multimedia/wasm/qwasmaudiosource.cpp14
-rw-r--r--src/multimedia/wasm/qwasmaudiosource_p.h4
-rw-r--r--src/multimedia/wasm/qwasmmediadevices.cpp10
-rw-r--r--src/multimedia/wasm/qwasmmediadevices_p.h6
-rw-r--r--src/multimedia/windows/qwindowsaudiosink.cpp24
-rw-r--r--src/multimedia/windows/qwindowsaudiosink_p.h4
-rw-r--r--src/multimedia/windows/qwindowsaudiosource.cpp3
-rw-r--r--src/multimedia/windows/qwindowsaudiosource_p.h2
-rw-r--r--src/multimedia/windows/qwindowsmediadevices.cpp10
-rw-r--r--src/multimedia/windows/qwindowsmediadevices_p.h6
-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
-rw-r--r--tests/auto/unit/mockbackend/qmockmediadevices.cpp8
-rw-r--r--tests/auto/unit/mockbackend/qmockmediadevices_p.h6
53 files changed, 200 insertions, 137 deletions
diff --git a/src/multimedia/alsa/qalsaaudiosink.cpp b/src/multimedia/alsa/qalsaaudiosink.cpp
index f64b03c64..138ada624 100644
--- a/src/multimedia/alsa/qalsaaudiosink.cpp
+++ b/src/multimedia/alsa/qalsaaudiosink.cpp
@@ -24,7 +24,8 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcAlsaOutput, "qt.multimedia.alsa.output")
//#define DEBUG_AUDIO 1
-QAlsaAudioSink::QAlsaAudioSink(const QByteArray &device)
+QAlsaAudioSink::QAlsaAudioSink(const QByteArray &device, QObject *parent)
+ : QPlatformAudioSink(parent)
{
bytesAvailable = 0;
handle = 0;
diff --git a/src/multimedia/alsa/qalsaaudiosink_p.h b/src/multimedia/alsa/qalsaaudiosink_p.h
index 447210d88..9df697522 100644
--- a/src/multimedia/alsa/qalsaaudiosink_p.h
+++ b/src/multimedia/alsa/qalsaaudiosink_p.h
@@ -36,7 +36,7 @@ class QAlsaAudioSink : public QPlatformAudioSink
friend class AlsaOutputPrivate;
Q_OBJECT
public:
- QAlsaAudioSink(const QByteArray &device);
+ QAlsaAudioSink(const QByteArray &device, QObject *parent);
~QAlsaAudioSink();
qint64 write( const char *data, qint64 len );
diff --git a/src/multimedia/alsa/qalsaaudiosource.cpp b/src/multimedia/alsa/qalsaaudiosource.cpp
index 6427ae80d..8e82ab7d2 100644
--- a/src/multimedia/alsa/qalsaaudiosource.cpp
+++ b/src/multimedia/alsa/qalsaaudiosource.cpp
@@ -22,7 +22,8 @@ QT_BEGIN_NAMESPACE
//#define DEBUG_AUDIO 1
-QAlsaAudioSource::QAlsaAudioSource(const QByteArray &device)
+QAlsaAudioSource::QAlsaAudioSource(const QByteArray &device, QObject *parent)
+ : QPlatformAudioSource(parent)
{
bytesAvailable = 0;
handle = 0;
diff --git a/src/multimedia/alsa/qalsaaudiosource_p.h b/src/multimedia/alsa/qalsaaudiosource_p.h
index 4ab0e9ef6..87487a6ad 100644
--- a/src/multimedia/alsa/qalsaaudiosource_p.h
+++ b/src/multimedia/alsa/qalsaaudiosource_p.h
@@ -62,7 +62,7 @@ class QAlsaAudioSource : public QPlatformAudioSource
{
Q_OBJECT
public:
- QAlsaAudioSource(const QByteArray &device);
+ QAlsaAudioSource(const QByteArray &device, QObject *parent);
~QAlsaAudioSource();
qint64 read(char* data, qint64 len);
diff --git a/src/multimedia/alsa/qalsamediadevices.cpp b/src/multimedia/alsa/qalsamediadevices.cpp
index 7df97dcb2..9f3b3d963 100644
--- a/src/multimedia/alsa/qalsamediadevices.cpp
+++ b/src/multimedia/alsa/qalsamediadevices.cpp
@@ -79,14 +79,16 @@ QList<QCameraDevice> QAlsaMediaDevices::videoInputs() const
return {};
}
-QPlatformAudioSource *QAlsaMediaDevices::createAudioSource(const QAudioDevice &deviceInfo)
+QPlatformAudioSource *QAlsaMediaDevices::createAudioSource(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
- return new QAlsaAudioSource(deviceInfo.id());
+ return new QAlsaAudioSource(deviceInfo.id(), parent);
}
-QPlatformAudioSink *QAlsaMediaDevices::createAudioSink(const QAudioDevice &deviceInfo)
+QPlatformAudioSink *QAlsaMediaDevices::createAudioSink(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
- return new QAlsaAudioSink(deviceInfo.id());
+ return new QAlsaAudioSink(deviceInfo.id(), parent);
}
QT_END_NAMESPACE
diff --git a/src/multimedia/alsa/qalsamediadevices_p.h b/src/multimedia/alsa/qalsamediadevices_p.h
index 149d964e2..612ea2119 100644
--- a/src/multimedia/alsa/qalsamediadevices_p.h
+++ b/src/multimedia/alsa/qalsamediadevices_p.h
@@ -31,8 +31,10 @@ public:
QList<QAudioDevice> audioInputs() const override;
QList<QAudioDevice> audioOutputs() const override;
QList<QCameraDevice> videoInputs() 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
diff --git a/src/multimedia/android/qandroidaudiosink.cpp b/src/multimedia/android/qandroidaudiosink.cpp
index 7a51977f5..39f3132b1 100644
--- a/src/multimedia/android/qandroidaudiosink.cpp
+++ b/src/multimedia/android/qandroidaudiosink.cpp
@@ -28,8 +28,9 @@ static inline void openSlDebugInfo()
<< "\nDefault buffer size: " << QOpenSLESEngine::getDefaultBufferSize(format);
}
-QAndroidAudioSink::QAndroidAudioSink(const QByteArray &device)
- : m_deviceName(device),
+QAndroidAudioSink::QAndroidAudioSink(const QByteArray &device, QObject *parent)
+ : QPlatformAudioSink(parent),
+ m_deviceName(device),
m_state(QAudio::StoppedState),
m_error(QAudio::NoError),
m_outputMixObject(nullptr),
diff --git a/src/multimedia/android/qandroidaudiosink_p.h b/src/multimedia/android/qandroidaudiosink_p.h
index 8293d08ab..ca86d9a24 100644
--- a/src/multimedia/android/qandroidaudiosink_p.h
+++ b/src/multimedia/android/qandroidaudiosink_p.h
@@ -29,7 +29,7 @@ class QAndroidAudioSink : public QPlatformAudioSink
Q_OBJECT
public:
- QAndroidAudioSink(const QByteArray &device);
+ QAndroidAudioSink(const QByteArray &device, QObject *parent);
~QAndroidAudioSink();
void start(QIODevice *device) override;
diff --git a/src/multimedia/android/qandroidaudiosource.cpp b/src/multimedia/android/qandroidaudiosource.cpp
index 2f0291bdc..5e1ba549d 100644
--- a/src/multimedia/android/qandroidaudiosource.cpp
+++ b/src/multimedia/android/qandroidaudiosource.cpp
@@ -48,8 +48,9 @@ static void bufferQueueCallback(SLBufferQueueItf, void *context)
QMetaObject::invokeMethod(reinterpret_cast<QAndroidAudioSource*>(context), "processBuffer");
}
-QAndroidAudioSource::QAndroidAudioSource(const QByteArray &device)
- : m_device(device)
+QAndroidAudioSource::QAndroidAudioSource(const QByteArray &device, QObject *parent)
+ : QPlatformAudioSource(parent)
+ , m_device(device)
, m_engine(QOpenSLESEngine::instance())
, m_recorderObject(0)
, m_recorder(0)
@@ -144,7 +145,7 @@ QIODevice *QAndroidAudioSource::start()
m_pullMode = false;
m_pushBuffer.clear();
- m_bufferIODevice = new QBuffer(&m_pushBuffer);
+ m_bufferIODevice = new QBuffer(&m_pushBuffer, this);
m_bufferIODevice->open(QIODevice::ReadOnly);
if (startRecording()) {
diff --git a/src/multimedia/android/qandroidaudiosource_p.h b/src/multimedia/android/qandroidaudiosource_p.h
index 6eea0d078..13578509c 100644
--- a/src/multimedia/android/qandroidaudiosource_p.h
+++ b/src/multimedia/android/qandroidaudiosource_p.h
@@ -40,7 +40,7 @@ class QAndroidAudioSource : public QPlatformAudioSource
Q_OBJECT
public:
- QAndroidAudioSource(const QByteArray &device);
+ QAndroidAudioSource(const QByteArray &device, QObject *parent);
~QAndroidAudioSource();
void start(QIODevice *device);
diff --git a/src/multimedia/android/qandroidmediadevices.cpp b/src/multimedia/android/qandroidmediadevices.cpp
index 6b4c625dc..9e45479a5 100644
--- a/src/multimedia/android/qandroidmediadevices.cpp
+++ b/src/multimedia/android/qandroidmediadevices.cpp
@@ -29,14 +29,16 @@ QList<QAudioDevice> QAndroidMediaDevices::audioOutputs() const
return QOpenSLESEngine::availableDevices(QAudioDevice::Output);
}
-QPlatformAudioSource *QAndroidMediaDevices::createAudioSource(const QAudioDevice &deviceInfo)
+QPlatformAudioSource *QAndroidMediaDevices::createAudioSource(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
- return new QAndroidAudioSource(deviceInfo.id());
+ return new QAndroidAudioSource(deviceInfo.id(), parent);
}
-QPlatformAudioSink *QAndroidMediaDevices::createAudioSink(const QAudioDevice &deviceInfo)
+QPlatformAudioSink *QAndroidMediaDevices::createAudioSink(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
- return new QAndroidAudioSink(deviceInfo.id());
+ return new QAndroidAudioSink(deviceInfo.id(), parent);
}
void QAndroidMediaDevices::forwardAudioOutputsChanged()
diff --git a/src/multimedia/android/qandroidmediadevices_p.h b/src/multimedia/android/qandroidmediadevices_p.h
index 15e740fbe..97106d6dd 100644
--- a/src/multimedia/android/qandroidmediadevices_p.h
+++ b/src/multimedia/android/qandroidmediadevices_p.h
@@ -27,8 +27,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;
void forwardAudioOutputsChanged();
void forwardAudioInputsChanged();
diff --git a/src/multimedia/audio/qaudiosink.cpp b/src/multimedia/audio/qaudiosink.cpp
index 20e1a83fc..5f38bbc98 100644
--- a/src/multimedia/audio/qaudiosink.cpp
+++ b/src/multimedia/audio/qaudiosink.cpp
@@ -86,7 +86,7 @@ QAudioSink::QAudioSink(const QAudioFormat &format, QObject *parent)
QAudioSink::QAudioSink(const QAudioDevice &audioDevice, const QAudioFormat &format, QObject *parent):
QObject(parent)
{
- d = QPlatformMediaDevices::instance()->audioOutputDevice(format, audioDevice);
+ d = QPlatformMediaDevices::instance()->audioOutputDevice(format, audioDevice, parent);
if (d)
connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
else
diff --git a/src/multimedia/audio/qaudiosource.cpp b/src/multimedia/audio/qaudiosource.cpp
index 3ed48449e..3290c12c0 100644
--- a/src/multimedia/audio/qaudiosource.cpp
+++ b/src/multimedia/audio/qaudiosource.cpp
@@ -96,7 +96,7 @@ QAudioSource::QAudioSource(const QAudioFormat &format, QObject *parent)
QAudioSource::QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format, QObject *parent):
QObject(parent)
{
- d = QPlatformMediaDevices::instance()->audioInputDevice(format, audioDevice);
+ d = QPlatformMediaDevices::instance()->audioInputDevice(format, audioDevice, parent);
if (d)
connect(d, SIGNAL(stateChanged(QAudio::State)), SIGNAL(stateChanged(QAudio::State)));
else
diff --git a/src/multimedia/audio/qaudiosystem_p.h b/src/multimedia/audio/qaudiosystem_p.h
index 1e864716d..cfb21fd22 100644
--- a/src/multimedia/audio/qaudiosystem_p.h
+++ b/src/multimedia/audio/qaudiosystem_p.h
@@ -33,6 +33,7 @@ class Q_MULTIMEDIA_EXPORT QPlatformAudioSink : public QObject
Q_OBJECT
public:
+ QPlatformAudioSink(QObject *parent) : QObject(parent) {}
virtual void start(QIODevice *device) = 0;
virtual QIODevice* start() = 0;
virtual void stop() = 0;
@@ -62,6 +63,7 @@ class Q_MULTIMEDIA_EXPORT QPlatformAudioSource : public QObject
Q_OBJECT
public:
+ QPlatformAudioSource(QObject *parent) : QObject(parent) {}
virtual void start(QIODevice *device) = 0;
virtual QIODevice* start() = 0;
virtual void stop() = 0;
diff --git a/src/multimedia/darwin/qdarwinaudiosink.mm b/src/multimedia/darwin/qdarwinaudiosink.mm
index 57036f617..340472671 100644
--- a/src/multimedia/darwin/qdarwinaudiosink.mm
+++ b/src/multimedia/darwin/qdarwinaudiosink.mm
@@ -183,8 +183,8 @@ qint64 QDarwinAudioSinkDevice::writeData(const char *data, qint64 len)
return m_audioBuffer->writeBytes(data, len);
}
-QDarwinAudioSink::QDarwinAudioSink(const QAudioDevice &device)
- : m_audioDeviceInfo(device)
+QDarwinAudioSink::QDarwinAudioSink(const QAudioDevice &device, QObject *parent)
+ : QPlatformAudioSink(parent), m_audioDeviceInfo(device)
{
QAudioDevice di = device;
if (di.isNull())
diff --git a/src/multimedia/darwin/qdarwinaudiosink_p.h b/src/multimedia/darwin/qdarwinaudiosink_p.h
index 4e9b35c78..4d528de79 100644
--- a/src/multimedia/darwin/qdarwinaudiosink_p.h
+++ b/src/multimedia/darwin/qdarwinaudiosink_p.h
@@ -89,7 +89,7 @@ class QDarwinAudioSink : public QPlatformAudioSink
Q_OBJECT
public:
- QDarwinAudioSink(const QAudioDevice &device);
+ QDarwinAudioSink(const QAudioDevice &device, QObject *parent);
~QDarwinAudioSink();
void start(QIODevice *device);
diff --git a/src/multimedia/darwin/qdarwinaudiosource.mm b/src/multimedia/darwin/qdarwinaudiosource.mm
index 989bdc9c6..6ff52faa9 100644
--- a/src/multimedia/darwin/qdarwinaudiosource.mm
+++ b/src/multimedia/darwin/qdarwinaudiosource.mm
@@ -412,8 +412,9 @@ qint64 QDarwinAudioSourceDevice::writeData(const char *data, qint64 len)
return 0;
}
-QDarwinAudioSource::QDarwinAudioSource(const QAudioDevice &device)
- : m_audioDeviceInfo(device)
+QDarwinAudioSource::QDarwinAudioSource(const QAudioDevice &device, QObject *parent)
+ : QPlatformAudioSource(parent)
+ , m_audioDeviceInfo(device)
, m_isOpen(false)
, m_internalBufferSize(DEFAULT_BUFFER_SIZE)
, m_totalFrames(0)
diff --git a/src/multimedia/darwin/qdarwinaudiosource_p.h b/src/multimedia/darwin/qdarwinaudiosource_p.h
index 48dfa6fde..cb9ab63d4 100644
--- a/src/multimedia/darwin/qdarwinaudiosource_p.h
+++ b/src/multimedia/darwin/qdarwinaudiosource_p.h
@@ -165,7 +165,7 @@ class QDarwinAudioSource : public QPlatformAudioSource
Q_OBJECT
public:
- QDarwinAudioSource(const QAudioDevice &device);
+ QDarwinAudioSource(const QAudioDevice &device, QObject *parent);
~QDarwinAudioSource();
void start(QIODevice *device);
diff --git a/src/multimedia/darwin/qdarwinmediadevices.mm b/src/multimedia/darwin/qdarwinmediadevices.mm
index 08ea21e8b..46a91a850 100644
--- a/src/multimedia/darwin/qdarwinmediadevices.mm
+++ b/src/multimedia/darwin/qdarwinmediadevices.mm
@@ -279,14 +279,16 @@ void QDarwinMediaDevices::onOutputsUpdated()
}
}
-QPlatformAudioSource *QDarwinMediaDevices::createAudioSource(const QAudioDevice &info)
+QPlatformAudioSource *QDarwinMediaDevices::createAudioSource(const QAudioDevice &info,
+ QObject *parent)
{
- return new QDarwinAudioSource(info);
+ return new QDarwinAudioSource(info, parent);
}
-QPlatformAudioSink *QDarwinMediaDevices::createAudioSink(const QAudioDevice &info)
+QPlatformAudioSink *QDarwinMediaDevices::createAudioSink(const QAudioDevice &info,
+ QObject *parent)
{
- return new QDarwinAudioSink(info);
+ return new QDarwinAudioSink(info, parent);
}
QT_END_NAMESPACE
diff --git a/src/multimedia/darwin/qdarwinmediadevices_p.h b/src/multimedia/darwin/qdarwinmediadevices_p.h
index 6134d0544..0c7a45433 100644
--- a/src/multimedia/darwin/qdarwinmediadevices_p.h
+++ b/src/multimedia/darwin/qdarwinmediadevices_p.h
@@ -31,8 +31,10 @@ public:
QList<QAudioDevice> audioInputs() const override;
QList<QAudioDevice> audioOutputs() const override;
- QPlatformAudioSource *createAudioSource(const QAudioDevice &info) override;
- QPlatformAudioSink *createAudioSink(const QAudioDevice &info) override;
+ QPlatformAudioSource *createAudioSource(const QAudioDevice &info,
+ QObject *parent) override;
+ QPlatformAudioSink *createAudioSink(const QAudioDevice &info,
+ QObject *parent) override;
void onInputsUpdated();
void onOutputsUpdated();
diff --git a/src/multimedia/platform/qplatformmediadevices.cpp b/src/multimedia/platform/qplatformmediadevices.cpp
index 26e62d64b..867edb7c7 100644
--- a/src/multimedia/platform/qplatformmediadevices.cpp
+++ b/src/multimedia/platform/qplatformmediadevices.cpp
@@ -87,25 +87,29 @@ QList<QCameraDevice> QPlatformMediaDevices::videoInputs() const
return {};
}
-QPlatformAudioSource* QPlatformMediaDevices::audioInputDevice(const QAudioFormat &format, const QAudioDevice &deviceInfo)
+QPlatformAudioSource *QPlatformMediaDevices::audioInputDevice(const QAudioFormat &format,
+ const QAudioDevice &deviceInfo,
+ QObject *parent)
{
QAudioDevice info = deviceInfo;
if (info.isNull())
info = audioInputs().value(0);
- QPlatformAudioSource* p = !info.isNull() ? createAudioSource(info) : nullptr;
+ QPlatformAudioSource* p = !info.isNull() ? createAudioSource(info, parent) : nullptr;
if (p)
p->setFormat(format);
return p;
}
-QPlatformAudioSink* QPlatformMediaDevices::audioOutputDevice(const QAudioFormat &format, const QAudioDevice &deviceInfo)
+QPlatformAudioSink *QPlatformMediaDevices::audioOutputDevice(const QAudioFormat &format,
+ const QAudioDevice &deviceInfo,
+ QObject *parent)
{
QAudioDevice info = deviceInfo;
if (info.isNull())
info = audioOutputs().value(0);
- QPlatformAudioSink* p = !info.isNull() ? createAudioSink(info) : nullptr;
+ QPlatformAudioSink* p = !info.isNull() ? createAudioSink(info, parent) : nullptr;
if (p)
p->setFormat(format);
return p;
diff --git a/src/multimedia/platform/qplatformmediadevices_p.h b/src/multimedia/platform/qplatformmediadevices_p.h
index aba9a6468..5786c28a4 100644
--- a/src/multimedia/platform/qplatformmediadevices_p.h
+++ b/src/multimedia/platform/qplatformmediadevices_p.h
@@ -20,6 +20,7 @@
QT_BEGIN_NAMESPACE
+class QObject;
class QMediaDevices;
class QAudioDevice;
class QCameraDevice;
@@ -40,11 +41,15 @@ public:
virtual QList<QAudioDevice> audioInputs() const = 0;
virtual QList<QAudioDevice> audioOutputs() const = 0;
virtual QList<QCameraDevice> videoInputs() const;
- virtual QPlatformAudioSource *createAudioSource(const QAudioDevice &deviceInfo) = 0;
- virtual QPlatformAudioSink *createAudioSink(const QAudioDevice &deviceInfo) = 0;
-
- QPlatformAudioSource *audioInputDevice(const QAudioFormat &format, const QAudioDevice &deviceInfo);
- QPlatformAudioSink *audioOutputDevice(const QAudioFormat &format, const QAudioDevice &deviceInfo);
+ virtual QPlatformAudioSource *createAudioSource(const QAudioDevice &deviceInfo,
+ QObject *parent) = 0;
+ virtual QPlatformAudioSink *createAudioSink(const QAudioDevice &deviceInfo,
+ QObject *parent) = 0;
+
+ QPlatformAudioSource *audioInputDevice(const QAudioFormat &format,
+ const QAudioDevice &deviceInfo, QObject *parent);
+ QPlatformAudioSink *audioOutputDevice(const QAudioFormat &format,
+ const QAudioDevice &deviceInfo, QObject *parent);
void addMediaDevices(QMediaDevices *m)
{
diff --git a/src/multimedia/pulseaudio/qpulseaudiomediadevices.cpp b/src/multimedia/pulseaudio/qpulseaudiomediadevices.cpp
index 772585b54..d744e0417 100644
--- a/src/multimedia/pulseaudio/qpulseaudiomediadevices.cpp
+++ b/src/multimedia/pulseaudio/qpulseaudiomediadevices.cpp
@@ -38,14 +38,16 @@ QList<QCameraDevice> QPulseAudioMediaDevices::videoInputs() const
return {};
}
-QPlatformAudioSource *QPulseAudioMediaDevices::createAudioSource(const QAudioDevice &deviceInfo)
+QPlatformAudioSource *QPulseAudioMediaDevices::createAudioSource(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
- return new QPulseAudioSource(deviceInfo.id());
+ return new QPulseAudioSource(deviceInfo.id(), parent);
}
-QPlatformAudioSink *QPulseAudioMediaDevices::createAudioSink(const QAudioDevice &deviceInfo)
+QPlatformAudioSink *QPulseAudioMediaDevices::createAudioSink(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
- return new QPulseAudioSink(deviceInfo.id());
+ return new QPulseAudioSink(deviceInfo.id(), parent);
}
QT_END_NAMESPACE
diff --git a/src/multimedia/pulseaudio/qpulseaudiomediadevices_p.h b/src/multimedia/pulseaudio/qpulseaudiomediadevices_p.h
index 14ebd78fa..36435b220 100644
--- a/src/multimedia/pulseaudio/qpulseaudiomediadevices_p.h
+++ b/src/multimedia/pulseaudio/qpulseaudiomediadevices_p.h
@@ -32,8 +32,10 @@ public:
QList<QAudioDevice> audioInputs() const override;
QList<QAudioDevice> audioOutputs() const override;
QList<QCameraDevice> videoInputs() 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;
private:
QPulseAudioEngine *pulseEngine;
diff --git a/src/multimedia/pulseaudio/qpulseaudiosink.cpp b/src/multimedia/pulseaudio/qpulseaudiosink.cpp
index 7e224f2f3..132b024d3 100644
--- a/src/multimedia/pulseaudio/qpulseaudiosink.cpp
+++ b/src/multimedia/pulseaudio/qpulseaudiosink.cpp
@@ -112,8 +112,9 @@ static void streamAdjustPrebufferCallback(pa_stream *stream, int success, void *
}
-QPulseAudioSink::QPulseAudioSink(const QByteArray &device)
- : m_device(device)
+QPulseAudioSink::QPulseAudioSink(const QByteArray &device, QObject *parent)
+ : QPlatformAudioSink(parent),
+ m_device(device)
{
}
diff --git a/src/multimedia/pulseaudio/qpulseaudiosink_p.h b/src/multimedia/pulseaudio/qpulseaudiosink_p.h
index c73c7ee8f..c2c62d109 100644
--- a/src/multimedia/pulseaudio/qpulseaudiosink_p.h
+++ b/src/multimedia/pulseaudio/qpulseaudiosink_p.h
@@ -36,7 +36,7 @@ class QPulseAudioSink : public QPlatformAudioSink
Q_OBJECT
public:
- QPulseAudioSink(const QByteArray &device);
+ QPulseAudioSink(const QByteArray &device, QObject *parent);
~QPulseAudioSink();
void start(QIODevice *device) override;
diff --git a/src/multimedia/pulseaudio/qpulseaudiosource.cpp b/src/multimedia/pulseaudio/qpulseaudiosource.cpp
index d00af3641..883720ed2 100644
--- a/src/multimedia/pulseaudio/qpulseaudiosource.cpp
+++ b/src/multimedia/pulseaudio/qpulseaudiosource.cpp
@@ -89,8 +89,9 @@ static void inputStreamSuccessCallback(pa_stream *stream, int success, void *use
pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0);
}
-QPulseAudioSource::QPulseAudioSource(const QByteArray &device)
- : m_totalTimeValue(0)
+QPulseAudioSource::QPulseAudioSource(const QByteArray &device, QObject *parent)
+ : QPlatformAudioSource(parent)
+ , m_totalTimeValue(0)
, m_audioSource(nullptr)
, m_errorState(QAudio::NoError)
, m_deviceState(QAudio::StoppedState)
diff --git a/src/multimedia/pulseaudio/qpulseaudiosource_p.h b/src/multimedia/pulseaudio/qpulseaudiosource_p.h
index b687ad5e0..e367cb006 100644
--- a/src/multimedia/pulseaudio/qpulseaudiosource_p.h
+++ b/src/multimedia/pulseaudio/qpulseaudiosource_p.h
@@ -37,7 +37,7 @@ class QPulseAudioSource : public QPlatformAudioSource
Q_OBJECT
public:
- QPulseAudioSource(const QByteArray &device);
+ QPulseAudioSource(const QByteArray &device, QObject *parent);
~QPulseAudioSource();
qint64 read(char *data, qint64 len);
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
diff --git a/src/multimedia/wasm/qwasmaudiosink.cpp b/src/multimedia/wasm/qwasmaudiosink.cpp
index 7c6a5cff1..a6a27ef9e 100644
--- a/src/multimedia/wasm/qwasmaudiosink.cpp
+++ b/src/multimedia/wasm/qwasmaudiosink.cpp
@@ -41,12 +41,14 @@ protected:
qint64 writeData(const char *data, qint64 len) override;
};
-QWasmAudioSink::QWasmAudioSink(const QByteArray &device)
- : m_name(device)
+QWasmAudioSink::QWasmAudioSink(const QByteArray &device, QObject *parent)
+ : QPlatformAudioSink(parent),
+ m_name(device),
+ m_timer(new QTimer(this))
{
- m_timer.setSingleShot(false);
+ m_timer->setSingleShot(false);
aldata = new ALData();
- connect(&m_timer, &QTimer::timeout, this, [this](){
+ connect(m_timer, &QTimer::timeout, this, [this](){
if (m_pullMode)
nextALBuffers();
else {
@@ -156,8 +158,8 @@ void QWasmAudioSink::start(bool mode)
alSourcef(aldata->source, AL_GAIN, m_volume);
if (m_pullMode)
loadALBuffers();
- m_timer.setInterval(DEFAULT_BUFFER_DURATION / 3000);
- m_timer.start();
+ m_timer->setInterval(DEFAULT_BUFFER_DURATION / 3000);
+ m_timer->start();
if (m_pullMode)
alSourcePlay(aldata->source);
m_running = true;
@@ -172,7 +174,7 @@ void QWasmAudioSink::stop()
m_elapsedTimer.invalidate();
alSourceStop(aldata->source);
alSourceRewind(aldata->source);
- m_timer.stop();
+ m_timer->stop();
m_bufferFragmentsBusyCount = 0;
alDeleteSources(1, &aldata->source);
alDeleteBuffers(m_bufferFragmentsCount, aldata->buffers);
@@ -386,7 +388,7 @@ void QWasmAudioSink::setError(QAudio::Error error)
return;
m_error = error;
if (error != QAudio::NoError) {
- m_timer.stop();
+ m_timer->stop();
alSourceRewind(aldata->source);
}
diff --git a/src/multimedia/wasm/qwasmaudiosink_p.h b/src/multimedia/wasm/qwasmaudiosink_p.h
index c165f28cb..5f8759c34 100644
--- a/src/multimedia/wasm/qwasmaudiosink_p.h
+++ b/src/multimedia/wasm/qwasmaudiosink_p.h
@@ -30,7 +30,7 @@ class QWasmAudioSink : public QPlatformAudioSink
QByteArray m_name;
ALData *aldata = nullptr;
- QTimer m_timer;
+ QTimer *m_timer = nullptr;
QIODevice *m_device = nullptr;
QAudioFormat m_format;
QAudio::Error m_error = QAudio::NoError;
@@ -58,7 +58,7 @@ private slots:
void setError(QAudio::Error);
public:
- QWasmAudioSink(const QByteArray &device);
+ QWasmAudioSink(const QByteArray &device, QObject *parent);
~QWasmAudioSink();
public:
diff --git a/src/multimedia/wasm/qwasmaudiosource.cpp b/src/multimedia/wasm/qwasmaudiosource.cpp
index bc7b34b7e..9f51d7077 100644
--- a/src/multimedia/wasm/qwasmaudiosource.cpp
+++ b/src/multimedia/wasm/qwasmaudiosource.cpp
@@ -64,11 +64,13 @@ void QWasmAudioSource::writeBuffer()
m_device->write(m_tmpData,bytes);
}
-QWasmAudioSource::QWasmAudioSource(const QByteArray &device)
- : QPlatformAudioSource(), m_name(device)
+QWasmAudioSource::QWasmAudioSource(const QByteArray &device , QObject *parent)
+ : QPlatformAudioSource(parent),
+ m_name(device),
+ m_timer(new QTimer(this))
{
aldata = new ALData();
- connect(&m_timer, &QTimer::timeout, this, [this](){
+ connect(m_timer, &QTimer::timeout, this, [this](){
Q_ASSERT(m_running);
if (m_pullMode)
writeBuffer();
@@ -146,7 +148,7 @@ void QWasmAudioSource::start(bool mode)
m_tmpData = new char[m_bufferSize];
else
m_tmpData = nullptr;
- m_timer.setInterval(m_format.durationForBytes(m_bufferSize) / 3'000);
+ m_timer->setInterval(m_format.durationForBytes(m_bufferSize) / 3'000);
aldata->device = alcCaptureOpenDevice(m_name.data(), m_format.sampleRate(), format,
m_format.framesForBytes(m_bufferSize));
@@ -165,7 +167,7 @@ void QWasmAudioSource::start(bool mode)
}
m_processed = 0;
m_running = true;
- m_timer.start();
+ m_timer->start();
}
void QWasmAudioSource::stop()
@@ -181,7 +183,7 @@ void QWasmAudioSource::stop()
}
if (!m_pullMode)
m_device->deleteLater();
- m_timer.stop();
+ m_timer->stop();
m_running = false;
}
diff --git a/src/multimedia/wasm/qwasmaudiosource_p.h b/src/multimedia/wasm/qwasmaudiosource_p.h
index 96cb94da2..41faa34fb 100644
--- a/src/multimedia/wasm/qwasmaudiosource_p.h
+++ b/src/multimedia/wasm/qwasmaudiosource_p.h
@@ -29,7 +29,7 @@ class QWasmAudioSource : public QPlatformAudioSource
QByteArray m_name;
ALData *aldata = nullptr;
- QTimer m_timer;
+ QTimer *m_timer = nullptr;
QIODevice *m_device = nullptr;
QAudioFormat m_format;
qreal m_volume = 1;
@@ -45,7 +45,7 @@ class QWasmAudioSource : public QPlatformAudioSource
void writeBuffer();
public:
- QWasmAudioSource(const QByteArray &device);
+ QWasmAudioSource(const QByteArray &device, QObject *parent);
public:
void start(QIODevice *device) override;
diff --git a/src/multimedia/wasm/qwasmmediadevices.cpp b/src/multimedia/wasm/qwasmmediadevices.cpp
index 533c874e7..5244236be 100644
--- a/src/multimedia/wasm/qwasmmediadevices.cpp
+++ b/src/multimedia/wasm/qwasmmediadevices.cpp
@@ -43,14 +43,16 @@ QList<QCameraDevice> QWasmMediaDevices::videoInputs() const
return {};
}
-QPlatformAudioSource *QWasmMediaDevices::createAudioSource(const QAudioDevice &deviceInfo)
+QPlatformAudioSource *QWasmMediaDevices::createAudioSource(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
- return new QWasmAudioSource(deviceInfo.id());
+ return new QWasmAudioSource(deviceInfo.id(), parent);
}
-QPlatformAudioSink *QWasmMediaDevices::createAudioSink(const QAudioDevice &deviceInfo)
+QPlatformAudioSink *QWasmMediaDevices::createAudioSink(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
- return new QWasmAudioSink(deviceInfo.id());
+ return new QWasmAudioSink(deviceInfo.id(), parent);
}
QT_END_NAMESPACE
diff --git a/src/multimedia/wasm/qwasmmediadevices_p.h b/src/multimedia/wasm/qwasmmediadevices_p.h
index 47bd28fbf..b19bec3a2 100644
--- a/src/multimedia/wasm/qwasmmediadevices_p.h
+++ b/src/multimedia/wasm/qwasmmediadevices_p.h
@@ -32,8 +32,10 @@ public:
QList<QAudioDevice> audioInputs() const override;
QList<QAudioDevice> audioOutputs() const override;
QList<QCameraDevice> videoInputs() 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;
private:
QList<QAudioDevice> m_outs;
diff --git a/src/multimedia/windows/qwindowsaudiosink.cpp b/src/multimedia/windows/qwindowsaudiosink.cpp
index b16b8a3b8..f38654d92 100644
--- a/src/multimedia/windows/qwindowsaudiosink.cpp
+++ b/src/multimedia/windows/qwindowsaudiosink.cpp
@@ -39,7 +39,7 @@ class OutputPrivate : public QIODevice
{
Q_OBJECT
public:
- OutputPrivate(QWindowsAudioSink& audio) : audioDevice(audio) {}
+ OutputPrivate(QWindowsAudioSink &audio) : QIODevice(&audio), audioDevice(audio) {}
~OutputPrivate() override = default;
qint64 readData(char *, qint64) override { return 0; }
@@ -77,13 +77,15 @@ std::optional<quint32> audioClientFramesAvailable(IAudioClient *client)
return {};
}
-QWindowsAudioSink::QWindowsAudioSink(QWindowsIUPointer<IMMDevice> device) :
+QWindowsAudioSink::QWindowsAudioSink(QWindowsIUPointer<IMMDevice> device, QObject *parent) :
+ QPlatformAudioSink(parent),
+ m_timer(new QTimer(this)),
m_pushSource(new OutputPrivate(*this)),
m_device(std::move(device))
{
m_pushSource->open(QIODevice::WriteOnly|QIODevice::Unbuffered);
- m_timer.setSingleShot(true);
- m_timer.setTimerType(Qt::PreciseTimer);
+ m_timer->setSingleShot(true);
+ m_timer->setTimerType(Qt::PreciseTimer);
}
QWindowsAudioSink::~QWindowsAudioSink()
@@ -105,7 +107,7 @@ void QWindowsAudioSink::deviceStateChange(QAudio::State state, QAudio::Error err
qCDebug(qLcAudioOutput) << "Audio client started";
} else if (deviceState == QAudio::ActiveState) {
- m_timer.stop();
+ m_timer->stop();
m_audioClient->Stop();
qCDebug(qLcAudioOutput) << "Audio client stopped";
}
@@ -154,7 +156,7 @@ void QWindowsAudioSink::pullSource()
deviceStateChange(QAudio::IdleState, m_pullSource->atEnd() ? QAudio::NoError : QAudio::UnderrunError);
} else {
deviceStateChange(QAudio::ActiveState, QAudio::NoError);
- m_timer.start(playTimeUs / 2000);
+ m_timer->start(playTimeUs / 2000);
}
}
@@ -176,8 +178,8 @@ void QWindowsAudioSink::start(QIODevice* device)
m_pullSource = device;
connect(device, &QIODevice::readyRead, this, &QWindowsAudioSink::pullSource);
- m_timer.disconnect();
- m_timer.callOnTimeout(this, &QWindowsAudioSink::pullSource);
+ m_timer->disconnect();
+ m_timer->callOnTimeout(this, &QWindowsAudioSink::pullSource);
pullSource();
}
@@ -189,7 +191,7 @@ qint64 QWindowsAudioSink::push(const char *data, qint64 len)
qint64 written = write(data, len);
if (written > 0) {
deviceStateChange(QAudio::ActiveState, QAudio::NoError);
- m_timer.start(remainingPlayTimeUs() /1000);
+ m_timer->start(remainingPlayTimeUs() /1000);
}
return written;
@@ -209,8 +211,8 @@ QIODevice* QWindowsAudioSink::start()
deviceStateChange(QAudio::IdleState, QAudio::NoError);
- m_timer.disconnect();
- m_timer.callOnTimeout([&](){
+ m_timer->disconnect();
+ m_timer->callOnTimeout([&](){
deviceStateChange(QAudio::IdleState, QAudio::UnderrunError);
});
diff --git a/src/multimedia/windows/qwindowsaudiosink_p.h b/src/multimedia/windows/qwindowsaudiosink_p.h
index 0920719f4..f04a144f9 100644
--- a/src/multimedia/windows/qwindowsaudiosink_p.h
+++ b/src/multimedia/windows/qwindowsaudiosink_p.h
@@ -55,7 +55,7 @@ class QWindowsAudioSink : public QPlatformAudioSink
{
Q_OBJECT
public:
- QWindowsAudioSink(QWindowsIUPointer<IMMDevice> device);
+ QWindowsAudioSink(QWindowsIUPointer<IMMDevice> device, QObject *parent);
~QWindowsAudioSink();
void setFormat(const QAudioFormat& fmt) override;
@@ -94,7 +94,7 @@ private:
qsizetype m_bufferSize = 0;
qreal m_volume = 1.0;
- QTimer m_timer;
+ QTimer *m_timer = nullptr;
QScopedPointer<QIODevice> m_pushSource;
QIODevice *m_pullSource = nullptr;
QWindowsIUPointer<IMMDevice> m_device;
diff --git a/src/multimedia/windows/qwindowsaudiosource.cpp b/src/multimedia/windows/qwindowsaudiosource.cpp
index c4699a36f..23fc18828 100644
--- a/src/multimedia/windows/qwindowsaudiosource.cpp
+++ b/src/multimedia/windows/qwindowsaudiosource.cpp
@@ -22,7 +22,8 @@ QT_BEGIN_NAMESPACE
//#define DEBUG_AUDIO 1
-QWindowsAudioSource::QWindowsAudioSource(int deviceId)
+QWindowsAudioSource::QWindowsAudioSource(int deviceId, QObject *parent)
+ : QPlatformAudioSource(parent)
{
bytesAvailable = 0;
buffer_size = 0;
diff --git a/src/multimedia/windows/qwindowsaudiosource_p.h b/src/multimedia/windows/qwindowsaudiosource_p.h
index 99b04510b..74ce440cd 100644
--- a/src/multimedia/windows/qwindowsaudiosource_p.h
+++ b/src/multimedia/windows/qwindowsaudiosource_p.h
@@ -46,7 +46,7 @@ class QWindowsAudioSource : public QPlatformAudioSource
{
Q_OBJECT
public:
- QWindowsAudioSource(int deviceId);
+ QWindowsAudioSource(int deviceId, QObject *parent);
~QWindowsAudioSource();
qint64 read(char* data, qint64 len);
diff --git a/src/multimedia/windows/qwindowsmediadevices.cpp b/src/multimedia/windows/qwindowsmediadevices.cpp
index c91597102..b01ac5fa5 100644
--- a/src/multimedia/windows/qwindowsmediadevices.cpp
+++ b/src/multimedia/windows/qwindowsmediadevices.cpp
@@ -270,16 +270,18 @@ QList<QAudioDevice> QWindowsMediaDevices::audioOutputs() const
return availableDevices(QAudioDevice::Output);
}
-QPlatformAudioSource *QWindowsMediaDevices::createAudioSource(const QAudioDevice &deviceInfo)
+QPlatformAudioSource *QWindowsMediaDevices::createAudioSource(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
const auto *devInfo = static_cast<const QWindowsAudioDeviceInfo *>(deviceInfo.handle());
- return new QWindowsAudioSource(devInfo->waveId());
+ return new QWindowsAudioSource(devInfo->waveId(), parent);
}
-QPlatformAudioSink *QWindowsMediaDevices::createAudioSink(const QAudioDevice &deviceInfo)
+QPlatformAudioSink *QWindowsMediaDevices::createAudioSink(const QAudioDevice &deviceInfo,
+ QObject *parent)
{
const auto *devInfo = static_cast<const QWindowsAudioDeviceInfo *>(deviceInfo.handle());
- return new QWindowsAudioSink(devInfo->immDev());
+ return new QWindowsAudioSink(devInfo->immDev(), parent);
}
QT_END_NAMESPACE
diff --git a/src/multimedia/windows/qwindowsmediadevices_p.h b/src/multimedia/windows/qwindowsmediadevices_p.h
index b3d6c0ea2..f32577535 100644
--- a/src/multimedia/windows/qwindowsmediadevices_p.h
+++ b/src/multimedia/windows/qwindowsmediadevices_p.h
@@ -35,8 +35,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;
private:
QList<QAudioDevice> availableDevices(QAudioDevice::Mode mode) const;
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;
diff --git a/tests/auto/unit/mockbackend/qmockmediadevices.cpp b/tests/auto/unit/mockbackend/qmockmediadevices.cpp
index 0a17dfa57..5259b1327 100644
--- a/tests/auto/unit/mockbackend/qmockmediadevices.cpp
+++ b/tests/auto/unit/mockbackend/qmockmediadevices.cpp
@@ -24,15 +24,19 @@ QList<QAudioDevice> QMockMediaDevices::audioOutputs() const
return m_outputDevices;
}
-QPlatformAudioSource *QMockMediaDevices::createAudioSource(const QAudioDevice &info)
+QPlatformAudioSource *QMockMediaDevices::createAudioSource(const QAudioDevice &info,
+ QObject *parent)
{
Q_UNUSED(info);
+ Q_UNUSED(parent);
return nullptr;// ###
}
-QPlatformAudioSink *QMockMediaDevices::createAudioSink(const QAudioDevice &info)
+QPlatformAudioSink *QMockMediaDevices::createAudioSink(const QAudioDevice &info,
+ QObject *parent)
{
Q_UNUSED(info);
+ Q_UNUSED(parent);
return nullptr; //###
}
diff --git a/tests/auto/unit/mockbackend/qmockmediadevices_p.h b/tests/auto/unit/mockbackend/qmockmediadevices_p.h
index 2483f5e10..f9b8c1272 100644
--- a/tests/auto/unit/mockbackend/qmockmediadevices_p.h
+++ b/tests/auto/unit/mockbackend/qmockmediadevices_p.h
@@ -32,8 +32,10 @@ public:
QList<QAudioDevice> audioInputs() const override;
QList<QAudioDevice> audioOutputs() const override;
- QPlatformAudioSource *createAudioSource(const QAudioDevice &info) override;
- QPlatformAudioSink *createAudioSink(const QAudioDevice &info) override;
+ QPlatformAudioSource *createAudioSource(const QAudioDevice &info,
+ QObject *parent) override;
+ QPlatformAudioSink *createAudioSink(const QAudioDevice &info,
+ QObject *parent) override;
private:
QList<QAudioDevice> m_inputDevices;