summaryrefslogtreecommitdiffstats
path: root/src/multimedia/playback
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/playback')
-rw-r--r--src/multimedia/playback/qmediaplayer.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
index b2abb6ec6..2fc4ad4df 100644
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ b/src/multimedia/playback/qmediaplayer.cpp
@@ -263,6 +263,7 @@ QMediaPlayer::~QMediaPlayer()
// Disconnect everything to prevent notifying
// when a receiver is already destroyed.
disconnect();
+ setAudioOutput(nullptr);
d->setVideoSink(nullptr);
delete d->control;
@@ -653,10 +654,17 @@ void QMediaPlayer::setSourceDevice(QIODevice *device, const QUrl &sourceUrl)
void QMediaPlayer::setAudioOutput(QAudioOutput *output)
{
Q_D(QMediaPlayer);
- if (d->audioOutput == output)
+ auto oldOutput = d->audioOutput;
+ if (oldOutput == output)
return;
d->audioOutput = output;
- d->control->setAudioOutput(output ? output->handle() : nullptr);
+ d->control->setAudioOutput(nullptr);
+ if (oldOutput)
+ oldOutput->setDisconnectFunction({});
+ if (output) {
+ output->setDisconnectFunction([this](){ setAudioOutput(nullptr); });
+ d->control->setAudioOutput(output->handle());
+ }
emit audioOutputChanged();
}