m_pvr_thread = 0;
}
+ m_tstools.openFile(file);
+
/* DON'T EVEN THINK ABOUT FIXING THIS. FIX THE ATI SOURCES FIRST,
THEN DO A REAL FIX HERE! */
-
/* (this codepath needs to be improved anyway.) */
m_pvr_fd_dst = open("/dev/misc/pvr", O_WRONLY);
if (m_pvr_fd_dst < 0)
close(m_pvr_fd_dst);
return -ENOENT;
}
-
+
m_state = state_ok;
m_stateChanged(this);
m_pvr_thread = new eFilePushThread();
m_pvr_thread->start(m_pvr_fd_src, m_pvr_fd_dst);
}
+
+RESULT eDVBChannel::getLength(pts_t &len)
+{
+ return m_tstools.calcLen(len);
+}
+
+RESULT eDVBChannel::getCurrentPosition(pts_t &pos)
+{
+ 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;
+
+ return 0;
+}