diff options
author | Tim Blechmann <tim@klingt.org> | 2024-03-07 13:02:36 +0800 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-03-09 09:31:59 +0000 |
commit | e4dd38d8b61ec343811be80b1a6abccfe4a3f718 (patch) | |
tree | a0030646c7cc2a8d420f496ebb5632eb908044b3 | |
parent | ea95589efcfe2047dc5f5c617a1beae54db30a11 (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.cpp | 16 |
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 |