|
MythTV
0.26-pre
|
00001 // -*- Mode: c++ -*- 00002 00003 #ifndef CHANNELBASE_H 00004 #define CHANNELBASE_H 00005 00006 // Qt headers 00007 #include <QWaitCondition> 00008 #include <QStringList> 00009 #include <QMutex> 00010 00011 // MythTV headers 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 // Methods that must be implemented. 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 // Methods that one might want to specialize 00052 virtual void SetFormat(const QString &/*format*/) {} 00053 virtual int SetFreqTable(const QString &/*tablename*/) { 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 // Gets 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 // on current channel, for BBC, CBC, etc. 00091 bool IsCommercialFree(void) const { return m_commfree; } 00093 virtual QString GetDevice(void) const { return ""; } 00094 00095 // Sets 00096 virtual void Renumber(uint srcid, const QString &oldChanNum, 00097 const QString &newChanNum); 00098 00099 // Input toggling convenience methods 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 // Misc. Commands 00106 virtual bool Retune(void) { return false; } 00107 00109 virtual void StoreInputChannels(void) 00110 { StoreInputChannels(m_inputs); } 00111 00112 // Picture attribute settings 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 // \brief Set cardid for scanning 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
1.7.6.1