summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-04-29 10:45:18 +0800
committerTim Blechmann <tim@klingt.org>2024-04-29 19:10:07 +0800
commita6d3b1227554e5ebe2ed4e5bff527cff6c26beb1 (patch)
treea0c53307149bbef00ac54167ba4b92667d53b99a
parentb5a5a4f040cc8a60967723fbef1719506f71960b (diff)
GStreamer: QGstreamerMediaPlayer - apply rotation to nativeSize
Fix play_playsRotatedVideoOutput_whenVideoFileHasOrientationMetadata unit test. Pick-to: 6.5 6.7 Change-Id: I5826d39329a1b137090a38e10a30e2487bec968b Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp5
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgstreamervideooutput.cpp17
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgstreamervideooutput_p.h3
3 files changed, 23 insertions, 2 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp b/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp
index 4dd5695dc..c9cfdcb2c 100644
--- a/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp
+++ b/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp
@@ -309,6 +309,11 @@ bool QGstreamerMediaPlayer::processBusMessage(const QGstreamerMessage &message)
auto metaData = QGstreamerMetaData::fromGstTagList(tagList.get());
for (auto k : metaData.keys())
m_metaData.insert(k, metaData.value(k));
+
+ if (gstVideoOutput) {
+ QVariant rotation = m_metaData.value(QMediaMetaData::Orientation);
+ gstVideoOutput->setRotation(rotation.value<QtVideo::Rotation>());
+ }
break;
}
case GST_MESSAGE_DURATION_CHANGED: {
diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput.cpp b/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput.cpp
index 053dd973b..6bc65693a 100644
--- a/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput.cpp
+++ b/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput.cpp
@@ -179,6 +179,14 @@ void QGstreamerVideoOutput::doLinkSubtitleStream()
qLinkGstElements(subtitleSrc, subtitleSink);
}
+void QGstreamerVideoOutput::updateNativeSize()
+{
+ if (!m_videoSink)
+ return;
+
+ m_videoSink->setNativeSize(qRotatedFrameSize(nativeSize, rotation));
+}
+
void QGstreamerVideoOutput::setIsPreview()
{
// configures the queue to be fast and lightweight for camera preview
@@ -204,8 +212,13 @@ void QGstreamerVideoOutput::flushSubtitles()
void QGstreamerVideoOutput::setNativeSize(QSize sz)
{
nativeSize = sz;
- if (m_videoSink)
- m_videoSink->setNativeSize(nativeSize);
+ updateNativeSize();
+}
+
+void QGstreamerVideoOutput::setRotation(QtVideo::Rotation rot)
+{
+ rotation = rot;
+ updateNativeSize();
}
QT_END_NAMESPACE
diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput_p.h b/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput_p.h
index 62bd4b219..42acb18cc 100644
--- a/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput_p.h
+++ b/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput_p.h
@@ -50,12 +50,14 @@ public:
void flushSubtitles();
void setNativeSize(QSize);
+ void setRotation(QtVideo::Rotation);
private:
QGstreamerVideoOutput(QGstElement videoConvert, QGstElement videoScale, QGstElement videoSink,
QObject *parent);
void doLinkSubtitleStream();
+ void updateNativeSize();
QPointer<QGstreamerVideoSink> m_videoSink;
@@ -72,6 +74,7 @@ private:
QGstElement subtitleSink;
QSize nativeSize;
+ QtVideo::Rotation rotation{};
};
QT_END_NAMESPACE