diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-08-23 15:05:35 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-08-23 15:05:35 +0000 |
| commit | 3df74e7743602080ddbfa534eb6bf5e3433867f6 (patch) | |
| tree | 1d314ef81039995bee872b25b235fd0d7fddd1c7 | |
| parent | ae294cd46897a0b88b62823641a2e1b31cdd542b (diff) | |
| download | qmmp-3df74e7743602080ddbfa534eb6bf5e3433867f6.tar.gz qmmp-3df74e7743602080ddbfa534eb6bf5e3433867f6.tar.bz2 qmmp-3df74e7743602080ddbfa534eb6bf5e3433867f6.zip | |
qtmultimedia: fixed crash (#1011)
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9044 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp | 20 | ||||
| -rw-r--r-- | src/plugins/Output/qtmultimedia/outputqtmultimedia.h | 5 |
2 files changed, 19 insertions, 6 deletions
diff --git a/src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp b/src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp index b6b534051..9bd738e01 100644 --- a/src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp +++ b/src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp @@ -35,6 +35,13 @@ OutputQtMultimedia::OutputQtMultimedia() : Output(), m_buffer(nullptr), m_bytes_ OutputQtMultimedia::~OutputQtMultimedia() { + if(m_output && m_control) + QMetaObject::invokeMethod(m_control, "stop", Qt::QueuedConnection); + + if(m_output) + m_output->deleteLater(); + if(m_control) + m_control->deleteLater(); } bool OutputQtMultimedia::initialize(quint32 freq, ChannelMap map, Qmmp::AudioFormat format) @@ -103,9 +110,9 @@ bool OutputQtMultimedia::initialize(quint32 freq, ChannelMap map, Qmmp::AudioFor qDebug() << "OutputQtMultimedia: Using output device: " << device_info.deviceName(); - m_output.reset(new QAudioOutput(device_info, qformat)); + m_output = new QAudioOutput(device_info, qformat); m_buffer = m_output->start(); - m_control.reset(new OutputControl(m_output.data())); + m_control = new OutputControl(m_output); configure(freq, map, format); return true; @@ -139,12 +146,12 @@ void OutputQtMultimedia::reset() void OutputQtMultimedia::suspend() { - QMetaObject::invokeMethod(m_control.data(), "suspend", Qt::QueuedConnection); + QMetaObject::invokeMethod(m_control, "suspend", Qt::QueuedConnection); } void OutputQtMultimedia::resume() { - QMetaObject::invokeMethod(m_control.data(), "resume", Qt::QueuedConnection); + QMetaObject::invokeMethod(m_control, "resume", Qt::QueuedConnection); } OutputControl::OutputControl(QAudioOutput *o) @@ -161,3 +168,8 @@ void OutputControl::resume() { m_output->resume(); } + +void OutputControl::stop() +{ + m_output->stop(); +} diff --git a/src/plugins/Output/qtmultimedia/outputqtmultimedia.h b/src/plugins/Output/qtmultimedia/outputqtmultimedia.h index 9eebf3793..6a1a4f413 100644 --- a/src/plugins/Output/qtmultimedia/outputqtmultimedia.h +++ b/src/plugins/Output/qtmultimedia/outputqtmultimedia.h @@ -47,8 +47,8 @@ public: virtual void resume() override; private: - QScopedPointer<QAudioOutput> m_output; - QScopedPointer<OutputControl> m_control; + QAudioOutput *m_output = nullptr; + OutputControl *m_control = nullptr; QIODevice *m_buffer; qint64 m_bytes_per_second; }; @@ -63,6 +63,7 @@ public: public slots: void suspend(); void resume(); + void stop(); private: QAudioOutput *m_output; |
