[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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.