diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2006-02-28 01:43:36 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2006-02-28 01:43:36 +0000 |
| commit | 2c0fdda82ac02f8436816236b4649819274d1c95 (patch) | |
| tree | 9933d259ae0a993e82c06936a20fea6c96a9b96c /lib/dvb | |
| parent | 7f5aa3b85debad0a5642cc5c57cc5b967093ff3e (diff) | |
| download | enigma2-2c0fdda82ac02f8436816236b4649819274d1c95.tar.gz enigma2-2c0fdda82ac02f8436816236b4649819274d1c95.zip | |
add getNextAccessPoint
Diffstat (limited to 'lib/dvb')
| -rw-r--r-- | lib/dvb/pvrparse.cpp | 35 | ||||
| -rw-r--r-- | lib/dvb/pvrparse.h | 2 | ||||
| -rw-r--r-- | lib/dvb/tstools.cpp | 11 | ||||
| -rw-r--r-- | lib/dvb/tstools.h | 2 |
4 files changed, 50 insertions, 0 deletions
diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp index bde43765..65e599c3 100644 --- a/lib/dvb/pvrparse.cpp +++ b/lib/dvb/pvrparse.cpp @@ -217,6 +217,41 @@ off_t eMPEGStreamInformation::getAccessPoint(pts_t ts) return last; } +int eMPEGStreamInformation::getNextAccessPoint(pts_t &ts, const pts_t &start, int direction) +{ + off_t offset = getAccessPoint(start); + std::map<off_t, pts_t>::const_iterator i = m_access_points.find(offset); + if (i == m_access_points.end()) + { + eDebug("getNextAccessPoint: initial AP not found"); + return -1; + } + while (direction) + { + if (direction > 0) + { + if (i == m_access_points.end()) + return -1; + ++i; + direction--; + } + if (direction < 0) + { + if (i == m_access_points.begin()) + { + eDebug("at start"); + return -1; + } + --i; + direction++; + } + } + ts = i->second - getDelta(i->first); + eDebug("fine, at %llx - %llx = %llx", ts, i->second, getDelta(i->first)); + eDebug("fine, at %lld - %lld = %lld", ts, i->second, getDelta(i->first)); + return 0; +} + eMPEGStreamParserTS::eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo): m_streaminfo(streaminfo), m_pktptr(0), m_pid(-1), m_need_next_packet(0), m_skip(0) { } diff --git a/lib/dvb/pvrparse.h b/lib/dvb/pvrparse.h index 7b586331..9a0c3eb0 100644 --- a/lib/dvb/pvrparse.h +++ b/lib/dvb/pvrparse.h @@ -40,6 +40,8 @@ public: off_t getAccessPoint(pts_t ts); + int getNextAccessPoint(pts_t &ts, const pts_t &start, int direction); + bool empty(); }; diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index e440aeca..b6792c65 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -191,6 +191,17 @@ int eDVBTSTools::getOffset(off_t &offset, pts_t &pts) } } +int eDVBTSTools::getNextAccessPoint(pts_t &ts, const pts_t &start, int direction) +{ + if (m_use_streaminfo) + return m_streaminfo.getNextAccessPoint(ts, start, direction); + else + { + eDebug("can't get next access point without streaminfo"); + return -1; + } +} + void eDVBTSTools::calcBegin() { if (m_fd < 0) diff --git a/lib/dvb/tstools.h b/lib/dvb/tstools.h index f23d8108..76128071 100644 --- a/lib/dvb/tstools.h +++ b/lib/dvb/tstools.h @@ -41,6 +41,8 @@ public: /* get (approximate) offset corresponding to PTS */ int getOffset(off_t &offset, pts_t &pts); + int getNextAccessPoint(pts_t &ts, const pts_t &start, int direction); + void calcBegin(); void calcEnd(); |
