[graphics/digikam] core: Parent QAudioOutput objects to avoid leaks in Qt6 player paths
Mark Cockram <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 79b4433a56ce98139edc3b1b9d87fbcd77396f64 by Mark Cockram.
Committed on 28/07/2026 at 01:16.
Pushed by cgilles into branch 'master'.
Parent QAudioOutput objects to avoid leaks in Qt6 player paths
QMediaPlayer::setAudioOutput() does not take ownership of the audio
output it is given. Three construction sites allocated a QAudioOutput
on the heap without a parent and never deleted it, leaking one audio
output (and its backend stream) per widget construction.
Parent each QAudioOutput to the enclosing widget, matching the existing
correct pattern in core/libs/video/player/qtmm/mediaplayerview.cpp.
M +1 -1 core/dplugins/generic/view/presentation/audio/presentationaudiowidget.cpp
M +1 -1 core/libs/video/player/audplayerwdg.cpp
M +1 -1 core/libs/video/player/qtmm/slidevideo.cpp
https://invent.kde.org/graphics/digikam/-/commit/79b4433a56ce98139edc3b1b9d87fbcd77396f64
diff --git a/core/dplugins/generic/view/presentation/audio/presentationaudiowidget.cpp b/core/dplugins/generic/view/presentation/audio/presentationaudiowidget.cpp
index a6f6bda4f7..45a242aa40 100644
--- a/core/dplugins/generic/view/presentation/audio/presentationaudiowidget.cpp
+++ b/core/dplugins/generic/view/presentation/audio/presentationaudiowidget.cpp
@@ -111,7 +111,7 @@ PresentationAudioWidget::PresentationAudioWidget(QWidget* const parent, const QL
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) && defined HAVE_QTMULTIMEDIA
d->mediaObject = new QMediaPlayer(this);
- d->mediaObject->setAudioOutput(new QAudioOutput);
+ d->mediaObject->setAudioOutput(new QAudioOutput(this));
connect(d->mediaObject, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
this, SLOT(slotMediaStateChanged(QMediaPlayer::MediaStatus)));
diff --git a/core/libs/video/player/audplayerwdg.cpp b/core/libs/video/player/audplayerwdg.cpp
index fdbe5118b1..7c10f94264 100644
--- a/core/libs/video/player/audplayerwdg.cpp
+++ b/core/libs/video/player/audplayerwdg.cpp
@@ -82,7 +82,7 @@ AudPlayerWdg::AudPlayerWdg(QWidget* const parent)
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
d->mediaObject = new QMediaPlayer(this);
- d->mediaObject->setAudioOutput(new QAudioOutput);
+ d->mediaObject->setAudioOutput(new QAudioOutput(this));
connect(d->mediaObject, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState)),
this, SLOT(slotPlayerStateChanged(QMediaPlayer::PlaybackState)));
diff --git a/core/libs/video/player/qtmm/slidevideo.cpp b/core/libs/video/player/qtmm/slidevideo.cpp
index a714fa6b78..5da2bafc86 100644
--- a/core/libs/video/player/qtmm/slidevideo.cpp
+++ b/core/libs/video/player/qtmm/slidevideo.cpp
@@ -151,7 +151,7 @@ SlideVideo::SlideVideo(QWidget* const parent)
d->videoView->setFrameShape(QFrame::NoFrame);
d->videoItem = new QGraphicsVideoItem();
d->player = new QMediaPlayer(this);
- d->audio = new QAudioOutput;
+ d->audio = new QAudioOutput(this);
d->player->setAudioOutput(d->audio);
d->player->setVideoOutput(d->videoItem);
d->videoScene->addItem(d->videoItem);