summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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