aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/dvb.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-08-17 02:16:32 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-08-17 02:16:32 +0000
commit0af11516cabc973907890f548925a66313c8d18c (patch)
treec31b0f76274fbc23d24f0b0188c54282b96442bc /lib/dvb/dvb.cpp
parent17647e30993cc20d8f94f2de4a0bc78ce6b593cb (diff)
downloadenigma2-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.cpp31
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;
}