From 3df74e7743602080ddbfa534eb6bf5e3433867f6 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Fri, 23 Aug 2019 15:05:35 +0000 Subject: qtmultimedia: fixed crash (#1011) git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9044 90c681e8-e032-0410-971d-27865f9a5e38 --- .../Output/qtmultimedia/outputqtmultimedia.cpp | 20 ++++++++++++++++---- 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 m_output; - QScopedPointer 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; -- cgit v1.2.3-13-gbd6f