diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2020-05-14 21:04:02 +0200 |
---|---|---|
committer | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2020-05-29 15:19:07 +0000 |
commit | 0fb5e86053427aa527d3780d279d7faf5b3469bf (patch) | |
tree | 4360c46704caa3293086848939d9e278b40ca44e /src/gsttools/qgstreamerplayersession.cpp | |
parent | f60c028d522ce3e4ed01cf00e6601956a1f0ed01 (diff) | |
parent | cf28371c1edd0c6d04c4518cdf3270067d0cf8a7 (diff) |
Merge "Merge remote-tracking branch 'origin/5.15' into dev"
Diffstat (limited to 'src/gsttools/qgstreamerplayersession.cpp')
-rw-r--r-- | src/gsttools/qgstreamerplayersession.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/gsttools/qgstreamerplayersession.cpp b/src/gsttools/qgstreamerplayersession.cpp index 5a00afc72..adf11b022 100644 --- a/src/gsttools/qgstreamerplayersession.cpp +++ b/src/gsttools/qgstreamerplayersession.cpp @@ -502,10 +502,12 @@ void QGstreamerPlayerSession::setPlaybackRate(qreal rate) if (!qFuzzyCompare(m_playbackRate, rate)) { m_playbackRate = rate; if (m_pipeline && m_seekable) { + qint64 from = rate > 0 ? position() : 0; + qint64 to = rate > 0 ? duration() : position(); gst_element_seek(m_pipeline, rate, GST_FORMAT_TIME, GstSeekFlags(GST_SEEK_FLAG_FLUSH), - GST_SEEK_TYPE_NONE,0, - GST_SEEK_TYPE_END, 0); + GST_SEEK_TYPE_SET, from * 1000000, + GST_SEEK_TYPE_SET, to * 1000000); } emit playbackRateChanged(m_playbackRate); } @@ -1086,15 +1088,13 @@ bool QGstreamerPlayerSession::seek(qint64 ms) //seek locks when the video output sink is changing and pad is blocked if (m_pipeline && !m_pendingVideoSink && m_state != QMediaPlayer::StoppedState && m_seekable) { ms = qMax(ms,qint64(0)); - gint64 position = ms * 1000000; - bool isSeeking = gst_element_seek(m_pipeline, - m_playbackRate, - GST_FORMAT_TIME, + qint64 from = m_playbackRate > 0 ? ms : 0; + qint64 to = m_playbackRate > 0 ? duration() : ms; + + bool isSeeking = gst_element_seek(m_pipeline, m_playbackRate, GST_FORMAT_TIME, GstSeekFlags(GST_SEEK_FLAG_FLUSH), - GST_SEEK_TYPE_SET, - position, - GST_SEEK_TYPE_NONE, - 0); + GST_SEEK_TYPE_SET, from * 1000000, + GST_SEEK_TYPE_SET, to * 1000000); if (isSeeking) m_lastPosition = ms; |