X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ed40f6f85c9c07c3c1224ae20601082c0309a631..17796962c6e917a4f1e30110a87aba64dc14039a:/lib/dvb/dvb.cpp diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index ad146542..13e3a179 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -811,17 +811,17 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off eDebug("getNextSourceSpan, no decoding demux. forcing normal play"); return; } - + if (m_skipmode_n) { eDebug("skipmode %d:%d", m_skipmode_m, m_skipmode_n); max = m_skipmode_n; } - + eDebug("getNextSourceSpan, current offset is %08llx!", current_offset); - + current_offset += m_skipmode_m; - + while (!m_cue->m_seek_requests.empty()) { std::pair seek = m_cue->m_seek_requests.front(); @@ -847,6 +847,18 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off eDebug("seekTo: getCurrentPosition failed!"); continue; } + } else if (pts < 0) /* seek relative to end */ + { + pts_t len; + if (!getLength(len)) + { + eDebug("seeking relative to end. len=%lld, seek = %lld", len, pts); + pts += len; + } else + { + eWarning("getLength failed - can't seek relative to end!"); + continue; + } } if (relative == 1) /* pts relative */ @@ -877,7 +889,10 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off off_t offset = 0; if (m_tstools.getOffset(offset, pts)) + { + eDebug("get offset for pts=%lld failed!", pts); continue; + } eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx", relative, pts, offset); current_offset = offset; @@ -1098,6 +1113,7 @@ RESULT eDVBChannel::playFile(const char *file) m_pvr_thread = new eFilePushThread(); m_pvr_thread->enablePVRCommit(1); + m_pvr_thread->setStreamMode(1); m_pvr_thread->setScatterGather(this); if (m_pvr_thread->start(file, m_pvr_fd_dst))