aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2009-12-09 15:25:35 +0100
committerghost <andreas.monzner@multimedia-labs.de>2010-04-10 11:15:31 +0200
commit5dbae0741ff365ad77c631060d08e76202719726 (patch)
treec0b9623f79a5a99ef7c64d0655bba5ee1de48d7d /lib/dvb
parent0a7eeb9c5e0a2c41a1dcb1d90001b3868de35578 (diff)
downloadenigma2-5dbae0741ff365ad77c631060d08e76202719726.tar.gz
enigma2-5dbae0741ff365ad77c631060d08e76202719726.zip
lib/dvb/dvb.cpp: allow non relative seeking even without valid decoding demux here
Diffstat (limited to 'lib/dvb')
-rw-r--r--lib/dvb/dvb.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp
index 6eaadb04..17712dde 100644
--- a/lib/dvb/dvb.cpp
+++ b/lib/dvb/dvb.cpp
@@ -1324,16 +1324,6 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
return;
}
- m_cue->m_lock.RdLock();
- if (!m_cue->m_decoding_demux)
- {
- start = current_offset;
- size = max;
- eDebug("getNextSourceSpan, no decoding demux. forcing normal play");
- m_cue->m_lock.Unlock();
- return;
- }
-
if (m_skipmode_n)
{
eDebug("skipmode %d:%d (x%d)", m_skipmode_m, m_skipmode_n, m_skipmode_frames);
@@ -1341,7 +1331,6 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
}
eDebug("getNextSourceSpan, current offset is %08llx, m_skipmode_m = %d!", current_offset, m_skipmode_m);
-
int frame_skip_success = 0;
if (m_skipmode_m)
@@ -1386,6 +1375,8 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
}
}
+ m_cue->m_lock.RdLock();
+
while (!m_cue->m_seek_requests.empty())
{
std::pair<int, pts_t> seek = m_cue->m_seek_requests.front();
@@ -1410,6 +1401,13 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off
eDebug("decoder getPTS failed, can't seek relative");
continue;
}
+ if (!m_cue->m_decoding_demux)
+ {
+ eDebug("getNextSourceSpan, no decoding demux. couldn't seek to %llx... ignore request!", pts);
+ start = current_offset;
+ size = max;
+ continue;
+ }
if (getCurrentPosition(m_cue->m_decoding_demux, now, 1))
{
eDebug("seekTo: getCurrentPosition failed!");