00001 #ifndef CHANUTIL_H
00002 #define CHANUTIL_H
00003
00004 #include <vector>
00005 using namespace std;
00006
00007 #include <stdint.h>
00008 #include <qstring.h>
00009 #include <qpixmap.h>
00010
00011 #include "mythexp.h"
00012 #include "dtvmultiplex.h"
00013
00014 class NetworkInformationTable;
00015
00016 class DBChannel
00017 {
00018 public:
00019 DBChannel(const DBChannel&);
00020 DBChannel(const QString &_channum, const QString &_callsign,
00021 uint _chanid, uint _major_chan, uint _minor_chan,
00022 uint _favorite, uint _mplexid, bool _visible,
00023 const QString &_name, const QString &_icon);
00024 DBChannel& operator=(const DBChannel&);
00025
00026 bool operator == (uint _chanid) const
00027 { return chanid == _chanid; }
00028
00029 public:
00030 QString channum;
00031 QString callsign;
00032 uint chanid;
00033 uint major_chan;
00034 uint minor_chan;
00035 uint favorite;
00036 uint mplexid;
00037 bool visible;
00038 QString name;
00039 QString icon;
00040 };
00041 typedef vector<DBChannel> DBChanList;
00042
00043 class PixmapChannel : public DBChannel
00044 {
00045 public:
00046 PixmapChannel(const PixmapChannel &other) :
00047 DBChannel(other),
00048 iconPixmap(other.iconPixmap),
00049 iconLoaded(other.iconLoaded) { }
00050 PixmapChannel(const DBChannel &other) :
00051 DBChannel(other),
00052 iconLoaded(false) { }
00053
00054 bool LoadChannelIcon(uint size) const;
00055 QString GetFormatted(const QString &format) const;
00056
00057 public:
00058 mutable QPixmap iconPixmap;
00059 mutable bool iconLoaded;
00060 };
00061
00062
00066 class MPUBLIC ChannelUtil
00067 {
00068 public:
00069
00070
00071 static uint CreateMultiplex(
00072 int sourceid, QString sistandard,
00073 uint freq, QString modulation,
00074 int transport_id = -1, int network_id = -1);
00075
00076 static uint CreateMultiplex(
00077 int sourceid, QString sistandard,
00078 uint freq, QString modulation,
00079
00080 int transport_id, int network_id,
00081 int symbol_rate, signed char bandwidth,
00082 signed char polarity, signed char inversion,
00083 signed char trans_mode,
00084 QString inner_FEC, QString constellation,
00085 signed char hierarchy, QString hp_code_rate,
00086 QString lp_code_rate, QString guard_interval);
00087
00088 static uint CreateMultiplex(uint sourceid, const DTVMultiplex&,
00089 int transport_id, int network_id);
00090
00091 static vector<uint> CreateMultiplexes(
00092 int sourceid, const NetworkInformationTable *nit);
00093
00094 static uint GetMplexID(uint sourceid, const QString &channum);
00095 static int GetMplexID(uint sourceid, uint frequency);
00096 static int GetMplexID(uint sourceid, uint frequency,
00097 uint transport_id, uint network_id);
00098 static int GetMplexID(uint sourceid,
00099 uint transport_id, uint network_id);
00100 static uint GetMplexID(uint chanid);
00101 static int GetBetterMplexID(int current_mplexid,
00102 int transport_id, int network_id);
00103
00104 static bool GetTuningParams(uint mplexid,
00105 QString &modulation,
00106 uint64_t &frequency,
00107 uint &dvb_transportid,
00108 uint &dvb_networkid,
00109 QString &si_std);
00110
00111 static bool GetATSCChannel(uint sourceid, const QString &channum,
00112 uint &major, uint &minor);
00113 static bool IsATSCChannel(uint sourceid, const QString &channum)
00114 { uint m1, m2; GetATSCChannel(sourceid, channum, m1,m2); return m2; }
00115
00116
00117 static int CreateChanID(uint sourceid, const QString &chan_num);
00118
00119 static bool CreateChannel(uint db_mplexid,
00120 uint db_sourceid,
00121 uint new_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 const QString &freqid,
00132 QString icon = QString::null,
00133 QString format = "Default",
00134 QString xmltvid = QString::null,
00135 QString default_authority = QString::null);
00136
00137 static bool UpdateChannel(uint db_mplexid,
00138 uint source_id,
00139 uint channel_id,
00140 const QString &callsign,
00141 const QString &service_name,
00142 const QString &chan_num,
00143 uint service_id,
00144 uint atsc_major_channel,
00145 uint atsc_minor_channel,
00146 bool use_on_air_guide,
00147 bool hidden,
00148 bool hidden_in_guide,
00149 QString freqid = QString::null,
00150 QString icon = QString::null,
00151 QString format = QString::null,
00152 QString xmltvid = QString::null,
00153 QString default_authority = QString::null);
00154
00155 static bool SetServiceVersion(int mplexid, int version);
00156
00157 static int GetChanID(int db_mplexid, int service_transport_id,
00158 int major_channel, int minor_channel,
00159 int program_number);
00160
00161 static int GetServiceVersion(int mplexid);
00162
00163
00164
00165 static vector<uint> GetCardIDs(uint chanid);
00166 static QString GetUnknownCallsign(void);
00167 static uint FindChannel(uint sourceid, const QString &freqid);
00168 static int GetChanID(uint sourceid, const QString &channum)
00169 { return GetChannelValueInt("chanid", sourceid, channum); }
00170 static bool GetChannelData(
00171 uint sourceid, const QString &channum,
00172 QString &tvformat, QString &modulation,
00173 QString &freqtable, QString &freqid,
00174 int &finetune, uint64_t &frequency,
00175 QString &dtv_si_std, int &mpeg_prog_num,
00176 uint &atsc_major, uint &atsc_minor,
00177 uint &dvb_transportid, uint &dvb_networkid,
00178 uint &mplexid, bool &commfree);
00179 static bool GetChannelSettings(int chanid, bool &useonairguide,
00180 bool &hidden);
00181 static uint GetSourceID(uint cardid, const QString &inputname);
00182 static int GetProgramNumber(uint sourceid, const QString &channum)
00183 { return GetChannelValueInt("serviceid", sourceid, channum); }
00184 static QString GetVideoFilters(uint sourceid, const QString &channum)
00185 { return GetChannelValueStr("videofilters", sourceid, channum); }
00186
00187 static DBChanList GetChannels(uint srcid, bool vis_only, QString grp="");
00188 static void SortChannels(DBChanList &list, const QString &order,
00189 bool eliminate_duplicates = false);
00190 static void EliminateDuplicateChanNum(DBChanList &list);
00191
00192 static uint GetNextChannel(const DBChanList &sorted,
00193 uint old_chanid,
00194 uint mplexid_restriction,
00195 int direction);
00196
00197 static QString GetChannelValueStr(const QString &channel_field,
00198 uint sourceid,
00199 const QString &channum);
00200
00201 static int GetChannelValueInt(const QString &channel_field,
00202 uint sourceid,
00203 const QString &channum);
00204
00205 static bool IsOnSameMultiplex(uint sourceid,
00206 const QString &new_channum,
00207 const QString &old_channum);
00208
00213 static QString GetChanNum(int chanid);
00218 static QString GetCallsign(int chanid);
00223 static QString GetServiceName(int chanid);
00224 static int GetSourceID(int mplexid);
00225 static uint GetSourceIDForChannel(uint chanid);
00226 static int GetInputID(int sourceid, int cardid);
00227
00228
00229 static bool SetChannelValue(const QString &field_name,
00230 QString value,
00231 uint sourceid,
00232 const QString &channum);
00233
00234 private:
00235 static QString GetChannelStringField(int chanid, const QString &field);
00236 static QString GetChannelValueStr(const QString &channel_field,
00237 uint cardid,
00238 const QString &input,
00239 const QString &channum);
00240
00241 static int GetChannelValueInt(const QString &channel_field,
00242 uint cardid,
00243 const QString &input,
00244 const QString &channum);
00245
00246 };
00247
00248 #endif // CHANUTIL_H