diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2009-01-12 00:31:55 +0100 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2009-01-12 00:31:55 +0100 |
| commit | 139531c95ab1bd9ea0da563d43a3d8677b937aa9 (patch) | |
| tree | 4e476c825e71f14a15a31684aa9606becb095066 /lib/dvb | |
| parent | ca49e976280c61bb862d03567ddf65dbce3d568c (diff) | |
| download | enigma2-139531c95ab1bd9ea0da563d43a3d8677b937aa9.tar.gz enigma2-139531c95ab1bd9ea0da563d43a3d8677b937aa9.zip | |
insert cutmark on EIT change
Diffstat (limited to 'lib/dvb')
| -rw-r--r-- | lib/dvb/demux.cpp | 19 | ||||
| -rw-r--r-- | lib/dvb/demux.h | 4 | ||||
| -rw-r--r-- | lib/dvb/idemux.h | 2 | ||||
| -rw-r--r-- | lib/dvb/pvrparse.cpp | 17 | ||||
| -rw-r--r-- | lib/dvb/pvrparse.h | 3 |
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 ¤t_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 ¤t_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 |
