diff options
author | Tim Blechmann <tim@klingt.org> | 2024-04-02 11:35:48 +0800 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-04-04 09:27:19 +0000 |
commit | b77ad3ae3bf39d6d5b567373d57722b5a9b86061 (patch) | |
tree | 626dc01686ad64a6a232eb6af00048dba01143b1 | |
parent | f200769f1d9db045780632bbd47031076c163591 (diff) |
GStreamer: fix nativeSize handling
In `parseStreamsAndMetadata` we may not have a `QVideoSink` set, but
still use a fake video sink. So we should not propagate the native size
hint directly, but apply it to the `QGstreamerVideoOutput`.
Pick-to: 6.5
Change-Id: I9a3667185f0bf7c3a7547235f1fa61469feb1548
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
(cherry picked from commit 8de19600c9ddc9dd2a44a2031885323399b185a5)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit b2f80e7a87078ed96b344def185ed29812e4c815)
3 files changed, 16 insertions, 3 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp b/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp index a4e2036e7..9edb5b3dd 100644 --- a/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp +++ b/src/plugins/multimedia/gstreamer/common/qgstreamermediaplayer.cpp @@ -870,7 +870,7 @@ void QGstreamerMediaPlayer::parseStreamsAndMetadata() qCDebug(qLcMediaPlayer) << " tags=(null)"; QSize nativeSize = structure.nativeSize(); - gstVideoOutput->gstreamerVideoSink()->setNativeSize(nativeSize); + gstVideoOutput->setNativeSize(nativeSize); } diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput.cpp b/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput.cpp index 0cc96e7a9..ccfb08d19 100644 --- a/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput.cpp +++ b/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput.cpp @@ -85,9 +85,11 @@ void QGstreamerVideoOutput::setVideoSink(QVideoSink *sink) m_videoSink->setPipeline({}); m_videoSink = gstVideoSink; - if (m_videoSink) + if (m_videoSink) { m_videoSink->setPipeline(gstPipeline); - + if (nativeSize.isValid()) + m_videoSink->setNativeSize(nativeSize); + } QGstElement gstSink; if (m_videoSink) { gstSink = m_videoSink->gstSink(); @@ -202,6 +204,13 @@ void QGstreamerVideoOutput::flushSubtitles() } } +void QGstreamerVideoOutput::setNativeSize(QSize sz) +{ + nativeSize = sz; + if (m_videoSink) + m_videoSink->setNativeSize(nativeSize); +} + QT_END_NAMESPACE #include "moc_qgstreamervideooutput_p.cpp" diff --git a/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput_p.h b/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput_p.h index 7f6539955..62bd4b219 100644 --- a/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput_p.h +++ b/src/plugins/multimedia/gstreamer/common/qgstreamervideooutput_p.h @@ -49,6 +49,8 @@ public: void setIsPreview(); void flushSubtitles(); + void setNativeSize(QSize); + private: QGstreamerVideoOutput(QGstElement videoConvert, QGstElement videoScale, QGstElement videoSink, QObject *parent); @@ -68,6 +70,8 @@ private: QGstElement subtitleSrc; QGstElement subtitleSink; + + QSize nativeSize; }; QT_END_NAMESPACE |