summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-04-09 10:07:21 +0800
committerTim Blechmann <tim@klingt.org>2024-04-10 14:04:26 +0800
commit602fa9a5cf63d06245be99d271f7d18d5a1d0a01 (patch)
treedd7543c00c544e58c140f22a0efcee164e42e958 /src/plugins
parent89b8b20a098336c6d00ce92a9671a825e6943327 (diff)
GStreamer: fix some reference counting bugs
The vararg setter functions seem to increment the reference count internally, so we need to unref the objects after using them. Pick-to: 6.5 6.6 6.7 Change-Id: I338eb1d415b7e88a00a75e9ad2cad3a560330822 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgst_handle_types_p.h1
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgstreamermetadata.cpp22
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp2
3 files changed, 15 insertions, 10 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgst_handle_types_p.h b/src/plugins/multimedia/gstreamer/common/qgst_handle_types_p.h
index af43bd4d6..9f990c8e7 100644
--- a/src/plugins/multimedia/gstreamer/common/qgst_handle_types_p.h
+++ b/src/plugins/multimedia/gstreamer/common/qgst_handle_types_p.h
@@ -239,6 +239,7 @@ using QUniqueGStringHandle = QUniqueHandle<QGstImpl::QUniqueGStringHandleTraits>
using QUniqueGErrorHandle = QUniqueHandle<QGstImpl::QUniqueGErrorHandleTraits>;
using QFileDescriptorHandle = QUniqueHandle<QGstImpl::QFileDescriptorHandleTraits>;
using QGstContextHandle = QGstImpl::QGstMiniObjectHandleHelper<GstContext>::UniqueHandle;
+using QGstGstDateTimeHandle = QGstImpl::QGstMiniObjectHandleHelper<GstDateTime>::SharedHandle;
#if QT_CONFIG(gstreamer_gl)
using QGstGLContextHandle = QGstImpl::QGstHandleHelper<GstGLContext>::UniqueHandle;
diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamermetadata.cpp b/src/plugins/multimedia/gstreamer/common/qgstreamermetadata.cpp
index 30fb14d66..a6415de50 100644
--- a/src/plugins/multimedia/gstreamer/common/qgstreamermetadata.cpp
+++ b/src/plugins/multimedia/gstreamer/common/qgstreamermetadata.cpp
@@ -2,15 +2,16 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qgstreamermetadata_p.h"
-#include <QDebug>
#include <QtMultimedia/qmediametadata.h>
+#include <QtCore/qdebug.h>
#include <QtCore/qdatetime.h>
+#include <QtCore/qlocale.h>
#include <QtCore/qtimezone.h>
#include <QtGui/qimage.h>
#include <gst/gstversion.h>
+#include <common/qgst_handle_types_p.h>
#include <common/qgstutils_p.h>
-#include <qlocale.h>
QT_BEGIN_NAMESPACE
@@ -234,13 +235,16 @@ void QGstreamerMetaData::setMetaData(GstElement *element) const
case QMetaType::QDate:
case QMetaType::QDateTime: {
QDateTime date = tagValue.toDateTime();
- gst_tag_setter_add_tags(GST_TAG_SETTER(element),
- GST_TAG_MERGE_REPLACE,
- tagName,
- gst_date_time_new(date.offsetFromUtc() / 60. / 60.,
- date.date().year(), date.date().month(), date.date().day(),
- date.time().hour(), date.time().minute(), date.time().second()),
- nullptr);
+
+ QGstGstDateTimeHandle dateTime{
+ gst_date_time_new(date.offsetFromUtc() / 60. / 60., date.date().year(),
+ date.date().month(), date.date().day(), date.time().hour(),
+ date.time().minute(), date.time().second()),
+ QGstGstDateTimeHandle::HasRef,
+ };
+
+ gst_tag_setter_add_tags(GST_TAG_SETTER(element), GST_TAG_MERGE_REPLACE, tagName,
+ dateTime.get(), nullptr);
break;
}
default: {
diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp b/src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp
index eccdaebc6..2ed2acb36 100644
--- a/src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp
+++ b/src/plugins/multimedia/gstreamer/common/qgstreamervideosink.cpp
@@ -99,7 +99,7 @@ QGstreamerVideoSink::QGstreamerVideoSink(QVideoSink *parent)
gst_caps_new_simple("video/x-raw", "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, NULL),
QGstCaps::HasRef,
};
- g_object_set(gstCapsFilter.element(), "caps", capsFilterCaps.release(), NULL);
+ g_object_set(gstCapsFilter.element(), "caps", capsFilterCaps.caps(), NULL);
}
if (gstPreprocess) {