diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2005-08-17 02:16:32 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2005-08-17 02:16:32 +0000 |
| commit | 0af11516cabc973907890f548925a66313c8d18c (patch) | |
| tree | c31b0f76274fbc23d24f0b0188c54282b96442bc /lib/dvb/dvb.cpp | |
| parent | 17647e30993cc20d8f94f2de4a0bc78ce6b593cb (diff) | |
| download | enigma2-0af11516cabc973907890f548925a66313c8d18c.tar.gz enigma2-0af11516cabc973907890f548925a66313c8d18c.zip | |
- add iSeekableService, implement it for serviceDvb
Diffstat (limited to 'lib/dvb/dvb.cpp')
| -rw-r--r-- | lib/dvb/dvb.cpp | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index cfb32d09..3e4c7bdc 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -552,14 +552,39 @@ RESULT eDVBChannel::getLength(pts_t &len) RESULT eDVBChannel::getCurrentPosition(pts_t &pos) { -#if 0 off_t begin = 0; /* getPTS for offset 0 is cached, so it doesn't harm. */ int r = m_tstools.getPTS(begin, pos); if (r) + { + eDebug("tstools getpts(0) failed!"); return r; + } + + pts_t now; + + r = m_demux->get().getSTC(now); + + if (r) + { + eDebug("demux getSTC failed"); + return -1; + } + + eDebug("STC: %08llx PTS: %08llx, diff %lld", now, pos, now - pos); + + /* when we are less than 10 seconds before the start, return 0. */ + /* (we're just waiting for the timespam to start) */ + if ((now < pos) && ((pos - now) < 90000 * 10)) + { + pos = 0; + return 0; + } + + if (now < pos) /* wrap around */ + pos = now + ((pts_t)1)<<33 - pos; + else + pos = now - pos; - // DMX_GET_STC -#endif return 0; } |
