From c3c6b7d0987b90e4a987ee84b2f31adf06568a0d Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Thu, 28 Sep 2017 13:37:13 +0200 Subject: Gstreamer: Fix memory leak in QGstreamerAudioDecoderSession The memory in the GstMapInfo should be unmapped with gst_buffer_unmap() after usage. Task-number: QTBUG-62789 Change-Id: Iee080e597abc80aa28fd068e6f582a97987677e0 Reviewed-by: Christian Stromme --- src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/plugins/gstreamer') diff --git a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.cpp b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.cpp index 779978e70..d6b8ad759 100644 --- a/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.cpp +++ b/src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.cpp @@ -478,6 +478,7 @@ QAudioBuffer QGstreamerAudioDecoderSession::read() } } #if GST_CHECK_VERSION(1,0,0) + gst_buffer_unmap(buffer, &mapInfo); gst_sample_unref(sample); #else gst_buffer_unref(buffer); -- cgit v1.2.3 From b42659eb8baa384e329e6af6afea89bb4005fb46 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Fri, 27 Oct 2017 14:20:51 +0200 Subject: Gstreamer: Fix memory leak in CameraBinSession Created GstElement objects m_cameraSrc and m_videoSrc should be unrefed. Task-number: QTBUG-53204 Change-Id: Ibbfd37d928fe87ea899549da7c12fa2386e214cc Reviewed-by: Christian Stromme --- src/plugins/gstreamer/camerabin/camerabinsession.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/plugins/gstreamer') diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp index ab0bea24a..4941c6ef6 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp @@ -212,6 +212,12 @@ CameraBinSession::~CameraBinSession() if (m_sourceFactory) gst_object_unref(GST_OBJECT(m_sourceFactory)); + + if (m_cameraSrc) + gst_object_unref(GST_OBJECT(m_cameraSrc)); + + if (m_videoSrc) + gst_object_unref(GST_OBJECT(m_videoSrc)); } #if QT_CONFIG(gstreamer_photography) @@ -538,11 +544,12 @@ GstElement *CameraBinSession::buildCameraSource() } } - if (m_cameraSrc != camSrc) + if (m_cameraSrc != camSrc) { g_object_set(G_OBJECT(m_camerabin), CAMERA_SOURCE_PROPERTY, m_cameraSrc, NULL); - - if (camSrc) - gst_object_unref(GST_OBJECT(camSrc)); + // Unref only if camSrc is not m_cameraSrc to prevent double unrefing. + if (camSrc) + gst_object_unref(GST_OBJECT(camSrc)); + } return m_cameraSrc; } -- cgit v1.2.3