summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-03-07 13:02:36 +0800
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-03-09 09:31:59 +0000
commite4dd38d8b61ec343811be80b1a6abccfe4a3f718 (patch)
treea0030646c7cc2a8d420f496ebb5632eb908044b3
parentea95589efcfe2047dc5f5c617a1beae54db30a11 (diff)
GStreamer: perform rate changes immediately
When changing the playback rate, we can do this immediately by going via `GST_SEEK_FLAG_INSTANT_RATE_CHANGE` Task-number: QTBUG-87969 Pick-to: 6.5 Change-Id: I5e130b506cc0f54673faecdeb45ed92086a3d057 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> (cherry picked from commit 554a73e004c7b0159e39e14e2241e1ff614f32f1) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> (cherry picked from commit d930927d86d1fc949c23fef6f1d6255f6f505a4a)
-rw-r--r--src/plugins/multimedia/gstreamer/common/qgstpipeline.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgstpipeline.cpp b/src/plugins/multimedia/gstreamer/common/qgstpipeline.cpp
index 8c9ba918d..61974f68e 100644
--- a/src/plugins/multimedia/gstreamer/common/qgstpipeline.cpp
+++ b/src/plugins/multimedia/gstreamer/common/qgstpipeline.cpp
@@ -310,8 +310,20 @@ bool QGstPipeline::setPlaybackRate(double rate)
{
if (rate == d->m_rate)
return false;
- seek(position(), rate);
- return true;
+
+ constexpr GstSeekFlags seekFlags =
+#if GST_CHECK_VERSION(1, 18, 0)
+ GST_SEEK_FLAG_INSTANT_RATE_CHANGE;
+#else
+ GST_SEEK_FLAG_FLUSH;
+#endif
+
+ bool success = gst_element_seek(element(), rate, GST_FORMAT_TIME, seekFlags, GST_SEEK_TYPE_NONE,
+ GST_CLOCK_TIME_NONE, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
+ if (success)
+ d->m_rate = rate;
+
+ return success;
}
double QGstPipeline::playbackRate() const