diff options
author | Tim Blechmann <tim@klingt.org> | 2024-04-09 10:07:21 +0800 |
---|---|---|
committer | Tim Blechmann <tim@klingt.org> | 2024-04-10 14:04:26 +0800 |
commit | 602fa9a5cf63d06245be99d271f7d18d5a1d0a01 (patch) | |
tree | dd7543c00c544e58c140f22a0efcee164e42e958 /src/plugins | |
parent | 89b8b20a098336c6d00ce92a9671a825e6943327 (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')
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) { |