Skip to content

Commit 088335b

Browse files
author
Mark Kendall
committed
Fix DVD and Blu Ray seeking.
The main problem here was that when paused, the seek position would fallback to the current speed (i.e. 0) and playback would resume from the beginning of the title. With DVD playback, we were also asking the dvdnav object to seek to the nearest cell - which led to some sizeable search discrepancies depending where playback was relative to the nearest cell. We now ask for a more accurate search. Backported from master 4b0803b Fixes #9305
1 parent 31e9528 commit 088335b

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

mythtv/libs/libmythtv/DVDRingBuffer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ long long DVDRingBufferPriv::Seek(long long time)
111111
if (m_parent)
112112
ffrewSkip = m_parent->GetFFRewSkip();
113113

114-
if (ffrewSkip != 1 && time != 0)
114+
if (ffrewSkip != 1 && ffrewSkip != 0 && time != 0)
115115
{
116116
QMap<uint, uint>::const_iterator it = m_seekSpeedMap.lowerBound(labs(time));
117117
if (it == m_seekSpeedMap.end())
@@ -125,7 +125,7 @@ long long DVDRingBufferPriv::Seek(long long time)
125125
else
126126
{
127127
m_seektime = (uint64_t)time;
128-
dvdRet = dvdnav_absolute_time_search(m_dvdnav, m_seektime, 1);
128+
dvdRet = dvdnav_absolute_time_search(m_dvdnav, m_seektime, 0);
129129
}
130130

131131
VERBOSE(VB_PLAYBACK+VB_EXTRA,

mythtv/libs/libmythtv/decoderbase.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ long long DecoderBase::DVDFindPosition(long long desiredFrame)
865865
current_speed = (int)m_parent->GetNextPlaySpeed();
866866
}
867867

868-
if (ffrewSkip == 1)
868+
if (ffrewSkip == 1 || ffrewSkip == 0)
869869
{
870870
diffTime = (int)ceil((desiredFrame - framesPlayed) / fps);
871871
desiredTimePos = ringBuffer->DVD()->GetCurrentTime() +
@@ -896,7 +896,7 @@ long long DecoderBase::BDFindPosition(long long desiredFrame)
896896
current_speed = (int)m_parent->GetNextPlaySpeed();
897897
}
898898

899-
if (ffrewSkip == 1)
899+
if (ffrewSkip == 1 || ffrewSkip == 0)
900900
{
901901
diffTime = (int)ceil((desiredFrame - framesPlayed) / fps);
902902
desiredTimePos = ringBuffer->BD()->GetCurrentTime() +

0 commit comments

Comments
 (0)