X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fdvb%2Fpvrparse.h;h=a15bbaf971ea53d8724c368a52c88645c90050ec;hb=46c144d3f294b74996cc9276528a9862e4d70efe;hp=b2ddd23d56139a630021d76a44ef863a4fd1790a;hpb=6c6704a6c897cef2aca87bd8d5a732ae1a2bac4a;p=vuplus_dvbapp diff --git a/lib/dvb/pvrparse.h b/lib/dvb/pvrparse.h old mode 100644 new mode 100755 index b2ddd23..a15bbaf --- a/lib/dvb/pvrparse.h +++ b/lib/dvb/pvrparse.h @@ -12,6 +12,8 @@ class eMPEGStreamInformation { public: + eMPEGStreamInformation(); + ~eMPEGStreamInformation(); /* we order by off_t here, since the timestamp may */ /* wrap around. */ /* we only record sequence start's pts values here. */ @@ -23,7 +25,8 @@ public: /* these are non-fixed up pts value (like m_access_points), just used to accelerate stuff. */ std::multimap m_pts_to_offset; - int save(const char *filename); + int startSave(const char *filename); + int stopSave(void); int load(const char *filename); /* recalculates timestampDeltas */ @@ -44,8 +47,30 @@ public: off_t getAccessPoint(pts_t ts, int marg=0); int getNextAccessPoint(pts_t &ts, const pts_t &start, int direction); + + bool hasAccessPoint() { return !m_access_points.empty(); } + + bool hasStructure() { return !m_structure_read ? false : true; } - bool empty(); + typedef unsigned long long structure_data; + /* this is usually: + sc | (other_information << 8) + but is really specific to the used video encoder. + */ + void writeStructureEntry(off_t offset, structure_data data); + + /* get a structure entry at given offset (or previous one, if no exact match was found). + optionall, return next element. Offset will be returned. this allows you to easily + get previous and next structure elements. */ + int getStructureEntry(off_t &offset, unsigned long long &data, int get_next); + int getStructureEntry_next(off_t &offset, unsigned long long &data); + int getStructureEntry_prev(off_t &offset, unsigned long long &data); + int update_structure_cache_entries(off_t offset); + + std::string m_filename; + int m_structure_cache_entries; + unsigned long long m_structure_cache[1024]; + FILE *m_structure_read, *m_structure_write; }; /* Now we define the parser's state: */ @@ -54,16 +79,21 @@ class eMPEGStreamParserTS public: eMPEGStreamParserTS(eMPEGStreamInformation &streaminfo); void parseData(off_t offset, const void *data, unsigned int len); - void setPid(int pid); + void setPid(int pid, int streamtype); + int getLastPTS(pts_t &last_pts); + void enableAccessPoints(bool enable) { m_enable_accesspoints = enable; } private: eMPEGStreamInformation &m_streaminfo; unsigned char m_pkt[188]; int m_pktptr; int processPacket(const unsigned char *pkt, off_t offset); inline int wantPacket(const unsigned char *hdr) const; - int m_pid; + int m_pid, m_streamtype; int m_need_next_packet; int m_skip; + int m_last_pts_valid; + pts_t m_last_pts; + bool m_enable_accesspoints; }; #endif