diff options
author | Tim Blechmann <tim@klingt.org> | 2024-04-29 10:45:18 +0800 |
---|---|---|
committer | Tim Blechmann <tim@klingt.org> | 2024-04-29 19:10:07 +0800 |
commit | a6d3b1227554e5ebe2ed4e5bff527cff6c26beb1 (patch) | |
tree | a0c53307149bbef00ac54167ba4b92667d53b99a | |
parent | b5a5a4f040cc8a60967723fbef1719506f71960b (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>
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 |