aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2009-01-12 00:31:55 +0100
committerFelix Domke <tmbinc@elitedvb.net>2009-01-12 00:31:55 +0100
commit139531c95ab1bd9ea0da563d43a3d8677b937aa9 (patch)
tree4e476c825e71f14a15a31684aa9606becb095066 /lib/dvb
parentca49e976280c61bb862d03567ddf65dbce3d568c (diff)
downloadenigma2-139531c95ab1bd9ea0da563d43a3d8677b937aa9.tar.gz
enigma2-139531c95ab1bd9ea0da563d43a3d8677b937aa9.zip
insert cutmark on EIT change
Diffstat (limited to 'lib/dvb')
-rw-r--r--lib/dvb/demux.cpp19
-rw-r--r--lib/dvb/demux.h4
-rw-r--r--lib/dvb/idemux.h2
-rw-r--r--lib/dvb/pvrparse.cpp17
-rw-r--r--lib/dvb/pvrparse.h3
5 files changed, 43 insertions, 2 deletions
diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp
index a0f1c326..810b10a5 100644
--- a/lib/dvb/demux.cpp
+++ b/lib/dvb/demux.cpp
@@ -405,12 +405,14 @@ public:
void setTimingPID(int pid);
void saveTimingInformation(const std::string &filename);
+ int getLastPTS(pts_t &pts);
protected:
int filterRecordData(const unsigned char *data, int len, size_t &current_span_remaining);
private:
eMPEGStreamParserTS m_ts_parser;
eMPEGStreamInformation m_stream_info;
off_t m_current_offset;
+ pts_t m_last_pcr; /* very approximate.. */
int m_pid;
};
@@ -430,6 +432,11 @@ void eDVBRecordFileThread::saveTimingInformation(const std::string &filename)
m_stream_info.save(filename.c_str());
}
+int eDVBRecordFileThread::getLastPTS(pts_t &pts)
+{
+ return m_ts_parser.getLastPTS(pts);
+}
+
int eDVBRecordFileThread::filterRecordData(const unsigned char *data, int len, size_t &current_span_remaining)
{
m_ts_parser.parseData(m_current_offset, data, len);
@@ -589,6 +596,18 @@ RESULT eDVBTSRecorder::stop()
return 0;
}
+RESULT eDVBTSRecorder::getCurrentPCR(pts_t &pcr)
+{
+ if (!m_running)
+ return 0;
+ if (!m_thread)
+ return 0;
+ /* XXX: we need a lock here */
+
+ /* we don't filter PCR data, so just use the last received PTS, which is not accurate, but better than nothing */
+ return m_thread->getLastPTS(pcr);
+}
+
RESULT eDVBTSRecorder::connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn)
{
conn = new eConnection(this, m_event.connect(event));
diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h
index 1a7db979..14501b98 100644
--- a/lib/dvb/demux.h
+++ b/lib/dvb/demux.h
@@ -101,7 +101,9 @@ public:
RESULT setBoundary(off_t max);
RESULT stop();
-
+
+ RESULT getCurrentPCR(pts_t &pcr);
+
RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn);
private:
RESULT startPID(int pid);
diff --git a/lib/dvb/idemux.h b/lib/dvb/idemux.h
index 2b750882..9432afb6 100644
--- a/lib/dvb/idemux.h
+++ b/lib/dvb/idemux.h
@@ -38,6 +38,8 @@ public:
virtual RESULT setBoundary(off_t max) = 0;
virtual RESULT stop() = 0;
+
+ virtual RESULT getCurrentPCR(pts_t &pcr) = 0;
enum {
eventWriteError,
diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp
index 1b6cb467..59313669 100644
--- a/lib/dvb/pvrparse.cpp
+++ b/lib/dvb/pvrparse.cpp
@@ -266,7 +266,7 @@ int eMPEGStreamInformation::getNextAccessPoint(pts_t &ts, const pts_t &start, in
return 0;
}
-eMPEGStreamParserTS::eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo): m_streaminfo(streaminfo), m_pktptr(0), m_pid(-1), m_need_next_packet(0), m_skip(0)
+eMPEGStreamParserTS::eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo): m_streaminfo(streaminfo), m_pktptr(0), m_pid(-1), m_need_next_packet(0), m_skip(0), m_last_pts_valid(0)
{
}
@@ -313,6 +313,9 @@ int eMPEGStreamParserTS::processPacket(const unsigned char *pkt, off_t offset)
pts |= ((unsigned long long)(pkt[12]&0xFF)) << 7;
pts |= ((unsigned long long)(pkt[13]&0xFE)) >> 1;
ptsvalid = 1;
+
+ m_last_pts = pts;
+ m_last_pts_valid = 1;
#if 0
int sec = pts / 90000;
@@ -503,3 +506,15 @@ void eMPEGStreamParserTS::setPid(int _pid)
m_pktptr = 0;
m_pid = _pid;
}
+
+int eMPEGStreamParserTS::getLastPTS(pts_t &last_pts)
+{
+ if (!m_last_pts_valid)
+ {
+ last_pts = 0;
+ return -1;
+ }
+ last_pts = m_last_pts;
+ return 0;
+}
+
diff --git a/lib/dvb/pvrparse.h b/lib/dvb/pvrparse.h
index 69bb9924..94f9f67f 100644
--- a/lib/dvb/pvrparse.h
+++ b/lib/dvb/pvrparse.h
@@ -55,6 +55,7 @@ public:
eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo);
void parseData(off_t offset, const void *data, unsigned int len);
void setPid(int pid);
+ int getLastPTS(pts_t &last_pts);
private:
eMPEGStreamInformation &m_streaminfo;
unsigned char m_pkt[188];
@@ -64,6 +65,8 @@ private:
int m_pid;
int m_need_next_packet;
int m_skip;
+ int m_last_pts_valid;
+ pts_t m_last_pts;
};
#endif