Blob Blame History Raw
--- src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp~
+++ src/plugins/Output/qtmultimedia/outputqtmultimedia.cpp
@@ -36,6 +36,13 @@
 
 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)
@@ -104,9 +111,9 @@
 
     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;
@@ -140,12 +147,12 @@
 
 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)
@@ -162,3 +169,8 @@
 {
     m_output->resume();
 }
+
+void OutputControl::stop()
+{
+    m_output->stop();
+}

--- src/plugins/Output/qtmultimedia/outputqtmultimedia.h~
+++ src/plugins/Output/qtmultimedia/outputqtmultimedia.h
@@ -47,8 +47,8 @@
     virtual void resume();
 
 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 slots:
     void suspend();
     void resume();
+    void stop();
 
 private:
     QAudioOutput *m_output;