aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2006-02-28 01:43:36 +0000
committerFelix Domke <tmbinc@elitedvb.net>2006-02-28 01:43:36 +0000
commit2c0fdda82ac02f8436816236b4649819274d1c95 (patch)
tree9933d259ae0a993e82c06936a20fea6c96a9b96c
parent7f5aa3b85debad0a5642cc5c57cc5b967093ff3e (diff)
downloadenigma2-2c0fdda82ac02f8436816236b4649819274d1c95.tar.gz
enigma2-2c0fdda82ac02f8436816236b4649819274d1c95.zip
add getNextAccessPoint
-rw-r--r--lib/dvb/pvrparse.cpp35
-rw-r--r--lib/dvb/pvrparse.h2
-rw-r--r--lib/dvb/tstools.cpp11
-rw-r--r--lib/dvb/tstools.h2
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();