MythTV  0.26-pre
channelbase.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends