summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-02-14 22:15:21 +0800
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-03-01 02:09:47 +0000
commit61411ea81c0d286d8fd75c43a8aa22cda200cc87 (patch)
tree1995029c2c362c80fb1f96547a15dcffd2e39067
parent1b8861d4862ce3d41d024c1eb7abac25bbdd0502 (diff)
GStreamer: QGstStructure - add APIs for pixelAspectRatio and nativeSize
Pick-to: 6.6 6.5 Change-Id: If14ea149367a34a59dc6de1c2e119fb2b8f9e302 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Lars Sutterud <lars.sutterud@qt.io> (cherry picked from commit 055d84815253b723b6c2361dd6c7ee1d6e6c2101) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgst_p.h3
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp3
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgstutils.cpp28
3 files changed, 34 insertions, 0 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgst_p.h b/src/plugins/multimedia/gstreamer/common/qgst_p.h
index e1f5b92fc..a5ab3cfc4 100644
--- a/src/plugins/multimedia/gstreamer/common/qgst_p.h
+++ b/src/plugins/multimedia/gstreamer/common/qgst_p.h
@@ -16,6 +16,7 @@
//
#include <private/qtmultimediaglobal_p.h>
+#include <private/qmultimediautils_p.h>
#include <QtCore/qsemaphore.h>
#include <QtCore/qlist.h>
@@ -237,6 +238,8 @@ public:
Q_MULTIMEDIA_EXPORT QVideoFrameFormat::PixelFormat pixelFormat() const;
Q_MULTIMEDIA_EXPORT QGRange<float> frameRateRange() const;
Q_MULTIMEDIA_EXPORT QGstreamerMessage getMessage();
+ Q_MULTIMEDIA_EXPORT std::optional<Fraction> pixelAspectRatio() const;
+ Q_MULTIMEDIA_EXPORT QSize nativeSize() const;
QGstStructure copy() const { return gst_structure_copy(structure); }
};
diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp b/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp
index 873418ddf..bdd6ef921 100644
--- a/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp
+++ b/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp
@@ -869,6 +869,9 @@ void QGstreamerMediaPlayer::parseStreamsAndMetadata()
qCDebug(qLcMediaPlayer) << " tags=" << tagList.get();
else
qCDebug(qLcMediaPlayer) << " tags=(null)";
+
+ QSize nativeSize = structure.nativeSize();
+ gstVideoOutput->gstreamerVideoSink()->setNativeSize(nativeSize);
}
diff --git a/src/plugins/multimedia/gstreamer/common/qgstutils.cpp b/src/plugins/multimedia/gstreamer/common/qgstutils.cpp
index 524b162ec..dfbe241d4 100644
--- a/src/plugins/multimedia/gstreamer/common/qgstutils.cpp
+++ b/src/plugins/multimedia/gstreamer/common/qgstutils.cpp
@@ -468,6 +468,34 @@ QGstreamerMessage QGstStructure::getMessage()
return QGstreamerMessage(message, QGstreamerMessage::HasRef);
}
+std::optional<Fraction> QGstStructure::pixelAspectRatio() const
+{
+ gint numerator;
+ gint denominator;
+ if (gst_structure_get_fraction(structure, "pixel-aspect-ratio", &numerator, &denominator)) {
+ return Fraction{
+ numerator,
+ denominator,
+ };
+ }
+
+ return std::nullopt;
+}
+
+QSize QGstStructure::nativeSize() const
+{
+ QSize size = resolution();
+ if (!size.isValid()) {
+ qWarning() << Q_FUNC_INFO << "invalid resolution when querying nativeSize";
+ return size;
+ }
+
+ std::optional<Fraction> par = pixelAspectRatio();
+ if (par)
+ size = qCalculateFrameSize(size, *par);
+ return size;
+}
+
GList *qt_gst_video_sinks()
{
return gst_element_factory_list_get_elements(GST_ELEMENT_FACTORY_TYPE_SINK