00001
00002
00003 #ifndef CHANNELBASE_H
00004 #define CHANNELBASE_H
00005
00006
00007 #include <QWaitCondition>
00008 #include <QStringList>
00009 #include <QMutex>
00010
00011
00012 #include "channelutil.h"
00013 #include "inputinfo.h"
00014 #include "mythsystem.h"
00015 #include "tv.h"
00016
00017 class FireWireDBOptions;
00018 class GeneralDBOptions;
00019 class DVBDBOptions;
00020 class ChannelBase;
00021 class TVRec;
00022
00031 class ChannelBase
00032 {
00033 friend class SignalMonitor;
00034
00035 public:
00036 ChannelBase(TVRec *parent);
00037 virtual ~ChannelBase(void);
00038
00039 virtual bool Init(QString &inputname, QString &startchannel, bool setchan);
00040 virtual bool IsTunable(const QString &input, const QString &channum) const;
00041
00042
00044 virtual bool Open(void) = 0;
00046 virtual void Close(void) = 0;
00048 virtual bool IsOpen(void) const = 0;
00049 virtual bool SetChannelByString(const QString &chan) = 0;
00050
00051
00052 virtual void SetFormat(const QString &) {}
00053 virtual int SetFreqTable(const QString &) { return 0; }
00055 virtual void SetFd(int fd) { (void)fd; };
00057 virtual int GetFd(void) const { return -1; };
00058 virtual bool Tune(const QString &freqid, int finetune) { return true; }
00059 virtual bool IsExternalChannelChangeSupported(void) { return false; }
00060
00061
00062 virtual uint GetNextChannel(uint chanid, int direction) const;
00063 virtual uint GetNextChannel(const QString &channum, int direction) const;
00064 virtual int GetInputByName(const QString &input) const;
00065 virtual QString GetInputByNum(int capchannel) const;
00066 virtual QString GetCurrentName(void) const
00067 { return m_curchannelname; }
00068 virtual int GetChanID(void) const;
00069 virtual int GetCurrentInputNum(void) const
00070 { return m_currentInputID; }
00071 virtual QString GetCurrentInput(void) const
00072 { return m_inputs[GetCurrentInputNum()]->name; }
00073 virtual int GetNextInputNum(void) const;
00074 virtual QString GetNextInput(void) const
00075 { return m_inputs[GetNextInputNum()]->name; }
00076 virtual QString GetNextInputStartChan(void)
00077 { return m_inputs[GetNextInputNum()]->startChanNum; }
00078 virtual uint GetCurrentSourceID(void) const
00079 { return m_inputs[GetCurrentInputNum()]->sourceid; }
00080 virtual uint GetSourceID(int inputID) const
00081 { return m_inputs[inputID]->sourceid; }
00082 virtual uint GetInputCardID(int inputNum) const;
00083 virtual DBChanList GetChannels(int inputNum) const;
00084 virtual DBChanList GetChannels(const QString &inputname) const;
00085 virtual vector<InputInfo> GetFreeInputs(
00086 const vector<uint> &excluded_cards) const;
00087 virtual QStringList GetConnectedInputs(void) const;
00088
00090
00091 bool IsCommercialFree(void) const { return m_commfree; }
00093 virtual QString GetDevice(void) const { return ""; }
00094
00095
00096 virtual void Renumber(uint srcid, const QString &oldChanNum,
00097 const QString &newChanNum);
00098
00099
00100 virtual bool SwitchToInput(const QString &input);
00101 virtual bool SwitchToInput(const QString &input, const QString &chan);
00102
00103 virtual bool InitializeInputs(void);
00104
00105
00106 virtual bool Retune(void) { return false; }
00107
00109 virtual void StoreInputChannels(void)
00110 { StoreInputChannels(m_inputs); }
00111
00112
00113 virtual bool InitPictureAttributes(void) { return false; }
00114 virtual int GetPictureAttribute(PictureAttribute) const { return -1; }
00115 virtual int ChangePictureAttribute(
00116 PictureAdjustType, PictureAttribute, bool up) { return -1; }
00117
00118 bool CheckChannel(const QString &channum, QString& inputName) const;
00119
00120
00121 void SetCardID(uint _cardid) { m_cardid = _cardid; }
00122
00123 virtual int GetCardID(void) const;
00124
00125 static ChannelBase *CreateChannel(
00126 TVRec *tv_rec,
00127 const GeneralDBOptions &genOpt,
00128 const DVBDBOptions &dvbOpt,
00129 const FireWireDBOptions &fwOpt,
00130 const QString &startchannel,
00131 bool enter_power_save_mode,
00132 QString &rbFileExt);
00133
00134 protected:
00137 virtual bool SwitchToInput(int inputNum, bool setstarting);
00138 virtual bool IsInputAvailable(
00139 int inputNum, uint &mplexid_restriction) const;
00140
00141 int GetStartInput(uint cardid);
00142 void ClearInputMap(void);
00143
00144 static void StoreInputChannels(const InputMap&);
00145
00146 protected:
00147 bool KillScript(void);
00148 void HandleScript(const QString &freqid);
00149 virtual void HandleScriptEnd(bool ok);
00150 uint GetScriptStatus(bool holding_lock = false);
00151
00152 bool ChangeExternalChannel(const QString &changer,
00153 const QString &newchan);
00154 bool ChangeInternalChannel(const QString &newchan,
00155 uint cardinputid);
00156
00157 TVRec *m_pParent;
00158 QString m_curchannelname;
00159 int m_currentInputID;
00160 bool m_commfree;
00161 uint m_cardid;
00162 InputMap m_inputs;
00163 DBChanList m_allchannels;
00164
00165 QMutex m_system_lock;
00166 MythSystem *m_system;
00170 uint m_system_status;
00171 };
00172
00173
00174 #endif