diff options
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; |