00001
00002 #ifndef CHANUTIL_H
00003 #define CHANUTIL_H
00004
00005
00006 #include <stdint.h>
00007
00008
00009 #include <vector>
00010 #include <deque>
00011 using namespace std;
00012
00013
00014 #include <QString>
00015
00016
00017 #include "mythtvexp.h"
00018 #include "dtvmultiplex.h"
00019 #include "dbchannelinfo.h"
00020
00021 class NetworkInformationTable;
00022
00023 class pid_cache_item_t
00024 {
00025 public:
00026 pid_cache_item_t() : pid(0), sid_tid(0) {}
00027 pid_cache_item_t(uint _pid, uint _sid_tid) :
00028 pid(_pid), sid_tid(_sid_tid) {}
00029 uint GetPID(void) const { return pid; }
00030 uint GetStreamID(void) const
00031 { return (sid_tid&0x100) ? GetID() : 0; }
00032 uint GetTableID(void) const
00033 { return (sid_tid&0x100) ? 0 : GetID(); }
00034 uint GetID(void) const { return sid_tid & 0xff; }
00035 bool IsPCRPID(void) const { return sid_tid&0x200; }
00036 bool IsPermanent(void) const { return sid_tid&0x10000; }
00037 uint GetComposite(void) const { return sid_tid; }
00038 private:
00039 uint pid;
00040 uint sid_tid;
00041 };
00042 typedef vector<pid_cache_item_t> pid_cache_t;
00043
00047 class MTV_PUBLIC ChannelUtil
00048 {
00049 public:
00050
00051
00052 static uint CreateMultiplex(
00053 int sourceid, QString sistandard,
00054 uint64_t frequency, QString modulation,
00055 int transport_id = -1, int network_id = -1);
00056
00057 static uint CreateMultiplex(
00058 int sourceid, QString sistandard,
00059 uint64_t frequency, QString modulation,
00060
00061 int transport_id, int network_id,
00062 int symbol_rate, signed char bandwidth,
00063 signed char polarity, signed char inversion,
00064 signed char trans_mode,
00065 QString inner_FEC, QString constellation,
00066 signed char hierarchy, QString hp_code_rate,
00067 QString lp_code_rate, QString guard_interval,
00068 QString mod_sys, QString rolloff);
00069
00070 static uint CreateMultiplex(uint sourceid, const DTVMultiplex&,
00071 int transport_id, int network_id);
00072
00073 static vector<uint> CreateMultiplexes(
00074 int sourceid, const NetworkInformationTable *nit);
00075
00076 static uint GetMplexID(uint sourceid, const QString &channum);
00077 static int GetMplexID(uint sourceid, uint64_t frequency);
00078 static int GetMplexID(uint sourceid, uint64_t frequency,
00079 uint transport_id, uint network_id);
00080 static int GetMplexID(uint sourceid,
00081 uint transport_id, uint network_id);
00082 static uint GetMplexID(uint chanid);
00083 static int GetBetterMplexID(int current_mplexid,
00084 int transport_id, int network_id);
00085
00086 static bool GetTuningParams(uint mplexid,
00087 QString &modulation,
00088 uint64_t &frequency,
00089 uint &dvb_transportid,
00090 uint &dvb_networkid,
00091 QString &si_std);
00092
00093 static bool GetATSCChannel(uint sourceid, const QString &channum,
00094 uint &major, uint &minor);
00095 static bool IsATSCChannel(uint sourceid, const QString &channum)
00096 { uint m1, m2; GetATSCChannel(sourceid, channum, m1,m2); return m2; }
00097
00098
00099 static int CreateChanID(uint sourceid, const QString &chan_num);
00100
00101 static bool CreateChannel(uint db_mplexid,
00102 uint db_sourceid,
00103 uint new_channel_id,
00104 const QString &callsign,
00105 const QString &service_name,
00106 const QString &chan_num,
00107 uint service_id,
00108 uint atsc_major_channel,
00109 uint atsc_minor_channel,
00110 bool use_on_air_guide,
00111 bool hidden,
00112 bool hidden_in_guide,
00113 const QString &freqid,
00114 QString icon = QString::null,
00115 QString format = "Default",
00116 QString xmltvid = QString::null,
00117 QString default_authority = QString::null);
00118
00119 static bool UpdateChannel(uint db_mplexid,
00120 uint source_id,
00121 uint channel_id,
00122 const QString &callsign,
00123 const QString &service_name,
00124 const QString &chan_num,
00125 uint service_id,
00126 uint atsc_major_channel,
00127 uint atsc_minor_channel,
00128 bool use_on_air_guide,
00129 bool hidden,
00130 bool hidden_in_guide,
00131 QString freqid = QString::null,
00132 QString icon = QString::null,
00133 QString format = QString::null,
00134 QString xmltvid = QString::null,
00135 QString default_authority = QString::null);
00136
00137 static void UpdateInsertInfoFromDB(ChannelInsertInfo &chan);
00138
00139 static bool DeleteChannel(uint channel_id);
00140
00141 static bool SetVisible(uint channel_id, bool hidden);
00142
00143 static bool SetServiceVersion(int mplexid, int version);
00144
00145 static int GetChanID(int db_mplexid, int service_transport_id,
00146 int major_channel, int minor_channel,
00147 int program_number);
00148
00149 static int GetServiceVersion(int mplexid);
00150
00151
00152 static QString GetDefaultAuthority(uint chanid);
00153 static QString GetIcon(uint chanid);
00154 static vector<uint> GetCardIDs(uint chanid);
00155 static QString GetUnknownCallsign(void);
00156 static uint FindChannel(uint sourceid, const QString &freqid);
00157 static int GetChanID(uint sourceid, const QString &channum)
00158 { return GetChannelValueInt("chanid", sourceid, channum); }
00159 static bool GetChannelData(
00160 uint sourceid, const QString &channum,
00161 QString &tvformat, QString &modulation,
00162 QString &freqtable, QString &freqid,
00163 int &finetune, uint64_t &frequency,
00164 QString &dtv_si_std, int &mpeg_prog_num,
00165 uint &atsc_major, uint &atsc_minor,
00166 uint &dvb_transportid, uint &dvb_networkid,
00167 uint &mplexid, bool &commfree);
00168 static bool GetExtendedChannelData(
00169 uint sourceid, const QString &channum,
00170 QString &tvformat, QString &modulation,
00171 QString &freqtable, QString &freqid,
00172 int &finetune, uint64_t &frequency,
00173 QString &dtv_si_std, int &mpeg_prog_num,
00174 uint &atsc_major, uint &atsc_minor,
00175 uint &dvb_transportid, uint &dvb_networkid,
00176 uint &mplexid, bool &commfree,
00177 bool &use_on_air_guide,bool &visible,
00178 QString &xmltvid, QString &default_authority,
00179 QString &icon);
00180 static int GetProgramNumber(uint sourceid, const QString &channum)
00181 { return GetChannelValueInt("serviceid", sourceid, channum); }
00182 static QString GetVideoFilters(uint sourceid, const QString &channum)
00183 { return GetChannelValueStr("videofilters", sourceid, channum); }
00184
00185 static DBChanList GetChannels(
00186 uint sourceid, bool visible_only,
00187 const QString &group_by = QString(), uint channel_groupid = 0)
00188 {
00189 return GetChannelsInternal(sourceid, visible_only, false,
00190 group_by, channel_groupid);
00191 }
00194 static DBChanList GetAllChannels(uint sourceid)
00195 {
00196 return GetChannelsInternal(sourceid, false, true, QString(), 0);
00197 }
00198 static vector<uint> GetChanIDs(int sourceid = -1);
00199 static uint GetChannelCount(int sourceid = -1);
00200 static void SortChannels(DBChanList &list, const QString &order,
00201 bool eliminate_duplicates = false);
00202
00203 static uint GetNextChannel(const DBChanList &sorted,
00204 uint old_chanid,
00205 uint mplexid_restriction,
00206 int direction,
00207 bool skip_non_visible = true,
00208 bool skip_same_channum_and_callsign = false);
00209
00210 static QString GetChannelValueStr(const QString &channel_field,
00211 uint sourceid,
00212 const QString &channum);
00213
00214 static int GetChannelValueInt(const QString &channel_field,
00215 uint sourceid,
00216 const QString &channum);
00217
00218 static bool IsOnSameMultiplex(uint sourceid,
00219 const QString &new_channum,
00220 const QString &old_channum);
00221
00222 static QStringList GetValidRecorderList(uint chanid,
00223 const QString &channum);
00224
00225 static bool IsConflicting(const QString &channum,
00226 uint sourceid = 0, uint excluded_chanid = 0)
00227 {
00228 vector<uint> chanids = GetConflicting(channum, sourceid);
00229 return (chanids.size() > 1) ||
00230 ((1 == chanids.size()) && (chanids[0] != excluded_chanid));
00231 }
00232
00233 static vector<uint> GetConflicting(const QString &channum,
00234 uint sourceid = 0);
00235
00240 static QString GetChanNum(int chanid);
00245 static QString GetCallsign(int chanid);
00250 static QString GetServiceName(int chanid);
00255 static int GetTimeOffset(int chanid);
00256 static int GetSourceID(int mplexid);
00257 static uint GetSourceIDForChannel(uint chanid);
00258 static int GetInputID(int sourceid, int cardid);
00259
00260 static QStringList GetCardTypes(uint chandid);
00261
00262 static bool GetCachedPids(uint chanid, pid_cache_t &pid_cache);
00263
00264
00265 static bool SetChannelValue(const QString &field_name,
00266 QString value,
00267 uint sourceid,
00268 const QString &channum);
00269
00270 static bool SetChannelValue(const QString &field_name,
00271 QString value,
00272 int chanid);
00273
00274 static bool SaveCachedPids(uint chanid,
00275 const pid_cache_t &pid_cache,
00276 bool delete_all = false);
00277
00278 static const QString kATSCSeparators;
00279
00280 private:
00281 static DBChanList GetChannelsInternal(
00282 uint sourceid, bool visible_only, bool include_disconnected,
00283 const QString &group_by, uint channel_groupid);
00284 static QString GetChannelStringField(int chanid, const QString &field);
00285 static QString GetChannelValueStr(const QString &channel_field,
00286 uint cardid,
00287 const QString &input,
00288 const QString &channum);
00289
00290 static int GetChannelValueInt(const QString &channel_field,
00291 uint cardid,
00292 const QString &input,
00293 const QString &channum);
00294
00295 };
00296
00297 #endif // CHANUTIL_H