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