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