#ifndef EPGROWS_H #define EPGROWS_H #include "table.h" #include struct EventInformation { SiTableHeader header; uint16_t TransportStreamId; uint16_t OriginalNetworkId; uint8_t SegmentLastSectionNumber; uint8_t LastTableId; u_char data[]; } __attribute__((packed)); class SiEpgParser : public SiTableParser { protected: bool CheckTableId(u_char tableId) const; int SectionNumberShift() const { return 3; } uint8_t FirstTableId(const EventInformation * ei) { return (ei->header.tableid >= 0x60 ? 0x60 : 0x50); } uint8_t LastTableId(const EventInformation * ei) { return ei->LastTableId; } void ParseSiTable(const EventInformation * eit, DVBSI::EitInformationPtr); bool HandleTable(DVBSI::EitInformationPtr); virtual bool HandleTable(DVBSI::EventPtr) = 0; private: static void parseStartTimeAndDuration(DVBSI::EventPtr, const u_char * data); static void parseDescriptor_ShortEvent(DVBSI::EventPtr, const u_char * data); static void parseDescriptor_Component(DVBSI::EventPtr, const u_char * data); static void parseDescriptor_Content(DVBSI::EventPtr, const u_char * data); static void parseDescriptor_ParentalRating(DVBSI::EventPtr, const u_char * data); }; #endif