aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/dvb.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2009-12-09 15:25:35 +0100
committerghost <andreas.monzner@multimedia-labs.de>2009-12-09 15:58:44 +0100
commit91a47217298bc34d42a62e70ba0e6caaef3373cb (patch)
tree7118a6e09237a72537379360e994b89b2ba102f7 /lib/dvb/dvb.cpp
parentf16e3ef9d1cf770517a6b21cc80884ea845d7ed4 (diff)
downloadenigma2-91a47217298bc34d42a62e70ba0e6caaef3373cb.tar.gz
enigma2-91a47217298bc34d42a62e70ba0e6caaef3373cb.zip
lib/dvb/dvb.cpp: allow non relative seeking even without valid decoding demux here
Diffstat (limited to 'lib/dvb/dvb.cpp')
-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 a8dfb193..656b6da0 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!");