X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ca329d3e86a98aacb0597d8581f5354cc99542e4..40d11af2de7aed77c90970ba2b61dd754a225117:/lib/dvb/pvrparse.cpp diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp index 58b215ba..65e599c3 100644 --- a/lib/dvb/pvrparse.cpp +++ b/lib/dvb/pvrparse.cpp @@ -208,9 +208,7 @@ off_t eMPEGStreamInformation::getAccessPoint(pts_t ts) off_t last = 0; for (std::map::const_iterator i(m_access_points.begin()); i != m_access_points.end(); ++i) { - std::map::const_iterator d = m_timestamp_deltas.find(i->first); - if (d != m_timestamp_deltas.end()) - delta = d->second; + pts_t delta = getDelta(i->first); pts_t c = i->second - delta; if (c > ts) break; @@ -219,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::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) { }