00001
00002
00003 #ifndef EIT_HELPER_H
00004 #define EIT_HELPER_H
00005
00006 #include <stdint.h>
00007
00008
00009 #include <qmutex.h>
00010 #include <qobject.h>
00011 #include <qstring.h>
00012
00013
00014 #include "mythdeque.h"
00015
00016 class MSqlQuery;
00017
00018 class ATSCEvent
00019 {
00020 public:
00021 ATSCEvent() {}
00022 ATSCEvent(uint a, uint b, uint c, QString d,
00023 const unsigned char *e, uint f)
00024 : start_time(a), length(b), etm(c), desc_length(f), title(d), desc(e)
00025 {
00026 }
00027
00028 public:
00029 uint32_t start_time;
00030 uint32_t length;
00031 uint32_t etm;
00032 uint32_t desc_length;
00033 QString title;
00034 const unsigned char *desc;
00035 };
00036
00037 typedef QMap<uint,ATSCEvent> EventIDToATSCEvent;
00038 typedef QMap<uint,QString> EventIDToETT;
00039 typedef QMap<uint,EventIDToATSCEvent> ATSCSRCToEvents;
00040 typedef QMap<uint,EventIDToETT> ATSCSRCToETTs;
00041 typedef QMap<unsigned long long,int> ServiceToChanID;
00042
00043 class DBEvent;
00044 class EITFixUp;
00045 class EITCache;
00046
00047 class EventInformationTable;
00048 class ExtendedTextTable;
00049 class DVBEventInformationTable;
00050 class PremiereContentInformationTable;
00051
00052 class EITHelper
00053 {
00054 public:
00055 EITHelper();
00056 virtual ~EITHelper();
00057
00058 uint GetListSize(void) const;
00059 uint ProcessEvents(void);
00060
00061 uint GetGPSOffset(void) const { return (uint) (0 - gps_offset); }
00062
00063 void SetGPSOffset(uint _gps_offset) { gps_offset = 0 - _gps_offset; }
00064 void SetFixup(uint atsc_major, uint atsc_minor, uint eitfixup);
00065 void SetLanguagePreferences(const QStringList &langPref);
00066 void SetSourceID(uint _sourceid);
00067
00068 #ifdef USING_BACKEND
00069 void AddEIT(uint atsc_major, uint atsc_minor,
00070 const EventInformationTable *eit);
00071 void AddETT(uint atsc_major, uint atsc_minor,
00072 const ExtendedTextTable *ett);
00073 void AddEIT(const DVBEventInformationTable *eit);
00074 void AddEIT(const PremiereContentInformationTable *eit);
00075 #else // if !USING_BACKEND
00076 void AddEIT(uint, uint, const EventInformationTable*) {}
00077 void AddETT(uint, uint, const ExtendedTextTable*) {}
00078 void AddEIT(const DVBEventInformationTable*) {}
00079 void AddEIT(const PremiereContentInformationTable*) {}
00080 #endif // !USING_BACKEND
00081
00082
00083 void PruneEITCache(uint timestamp);
00084 void WriteEITCache(void);
00085
00086 private:
00087 uint GetChanID(uint atsc_major, uint atsc_minor);
00088 uint GetChanID(uint serviceid, uint networkid, uint transportid);
00089
00090 void CompleteEvent(uint atsc_major, uint atsc_minor,
00091 const ATSCEvent &event,
00092 const QString &ett);
00093
00094
00095 mutable QMutex eitList_lock;
00096 mutable ServiceToChanID srv_to_chanid;
00097
00098 EITFixUp *eitfixup;
00099 static EITCache *eitcache;
00100
00101 int gps_offset;
00102 int utc_offset;
00103 uint sourceid;
00104 QMap<uint64_t,uint> fixup;
00105 ATSCSRCToEvents incomplete_events;
00106 ATSCSRCToETTs unmatched_etts;
00107
00108 MythDeque<DBEvent*> db_events;
00109
00110 QMap<uint,uint> languagePreferences;
00111
00113 static const uint kChunkSize;
00114 };
00115
00116 #endif // EIT_HELPER_H