diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2006-02-15 02:08:00 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2006-02-15 02:08:00 +0000 |
| commit | 95039ba3e50f5df85e6e1e2d4108486fd28f2264 (patch) | |
| tree | 957bdcf3e3014f14acd82c78f06b278637f6a16b | |
| parent | ca329d3e86a98aacb0597d8581f5354cc99542e4 (diff) | |
| download | enigma2-95039ba3e50f5df85e6e1e2d4108486fd28f2264.tar.gz enigma2-95039ba3e50f5df85e6e1e2d4108486fd28f2264.zip | |
some fixes
| -rw-r--r-- | lib/dvb/tstools.cpp | 40 | ||||
| -rw-r--r-- | lib/dvb/tstools.h | 2 |
2 files changed, 22 insertions, 20 deletions
diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index 72a5f16f..51cc994c 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -31,7 +31,10 @@ int eDVBTSTools::openFile(const char *filename) if (!m_streaminfo.empty()) m_use_streaminfo = 1; else + { + eDebug("no recorded stream information available"); m_use_streaminfo = 0; + } m_fd = ::open(filename, O_RDONLY); if (m_fd < 0) @@ -56,15 +59,10 @@ void eDVBTSTools::setSearchRange(int maxrange) } /* getPTS extracts a pts value from any PID at a given offset. */ -int eDVBTSTools::getPTS(off_t &offset, pts_t &pts) +int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed) { if (m_use_streaminfo) - { - off_t off = offset; - pts_t p = pts; - int r = m_streaminfo.getPTS(off, p); - eDebug("streaminfo result: %d, %08llx, %08llx", r, off, p); - } + return m_streaminfo.getPTS(offset, pts); if (m_fd < 0) return -1; @@ -81,7 +79,10 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts) { unsigned char block[188]; if (read(m_fd, block, 188) != 188) + { + eDebug("read error"); break; + } left -= 188; offset += 188; @@ -132,8 +133,8 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts) offset -= 188; /* convert to zero-based */ - fixupPTS(offset, pts); - eDebug("tstools result: %08llx, %08llx", offset, pts); + if (fixed) + fixupPTS(offset, pts); return 0; } } @@ -145,27 +146,28 @@ int eDVBTSTools::fixupPTS(const off_t &offset, pts_t &now) { if (m_use_streaminfo) { - eDebug("streaminfo fixup, before %08llx", now); - int r = m_streaminfo.fixupPTS(offset, now); - eDebug("streaminfo fixup, after %08llx", now); - return r; + return m_streaminfo.fixupPTS(offset, now); } else { /* for the simple case, we assume one epoch, with up to one wrap around in the middle. */ calcBegin(); - off_t begin = 0; - pts_t pos; - if (getPTS(begin, pos)) + if (!m_begin_valid) + { + eDebug("begin not valid, can't fixup"); return -1; + } + + pts_t pos = m_pts_begin; if ((now < pos) && ((pos - now) < 90000 * 10)) - { + { pos = 0; return 0; } + if (now < pos) /* wrap around */ - pos = now + 0x200000000LL - pos; + now = now + 0x200000000LL - pos; else - pos = now - pos; + now -= pos; return 0; } } diff --git a/lib/dvb/tstools.h b/lib/dvb/tstools.h index 55f86fbe..723207d3 100644 --- a/lib/dvb/tstools.h +++ b/lib/dvb/tstools.h @@ -25,7 +25,7 @@ public: /* get first PTS *after* the given offset. */ /* pts values are zero-based. */ - int getPTS(off_t &offset, pts_t &pts); + int getPTS(off_t &offset, pts_t &pts, int fixed=0); /* this fixes up PTS to end up in a [0..len) range. discontinuities etc. are handled here. |
