X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/fba15fa1e8e9dacba942dd21ad3245a4a68c3be8..36dc37e5d0c9ef8fc5f923ad38ee6cc98f316556:/lib/dvb/idvb.h diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index 5c94b009..8bbbaafa 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -18,6 +18,14 @@ #include #include +#if defined(__GNUC__) && ((__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || __GNUC__ == 4 ) // check if gcc version >= 3.1 +#include +#define CAID_LIST __gnu_cxx::slist +#else +#include +#define CAID_LIST std::slist +#endif + struct eBouquet { std::string m_bouquet_name; @@ -220,15 +228,19 @@ class eDVBChannelQuery; class eDVBService: public iStaticServiceInformation { DECLARE_REF(eDVBService); + int *m_cache; + void initCache(); + void copyCache(int *source); public: enum cacheID { - cVPID, cAPID, cTPID, cPCRPID, cAC3PID, cacheMax + cVPID, cAPID, cTPID, cPCRPID, cAC3PID, cVTYPE, cACHANNEL, cacheMax }; - int getCachePID(cacheID); - void setCachePID(cacheID, int); - bool cacheEmpty() { return m_cache.empty(); } + int getCacheEntry(cacheID); + void setCacheEntry(cacheID, int); + + bool cacheEmpty(); eDVBService(); /* m_service_name_sort is uppercase, with special chars removed, to increase sort performance. */ @@ -240,19 +252,17 @@ public: int m_flags; enum { -#if 0 // not yet implemented dxNoSDT=1, // don't get SDT - dxDontshow=2, +//nyi dxDontshow=2, + dxNoDVB=4, // dont use PMT for this service ( use cached pids ) dxHoldName=8, - dxNewFound=64, // found in prev scan -#endif - dxNoDVB=4 // dont use PMT for this service ( use cached pids ) + dxNewFound=64, }; bool usePMT() const { return !(m_flags & dxNoDVB); } - std::set m_ca; - std::map m_cache; + CAID_LIST m_ca; + virtual ~eDVBService(); eDVBService &operator=(const eDVBService &); @@ -292,7 +302,9 @@ public: tSatellitePosition, tChannelID, tAND, - tOR + tOR, + tAny, + tFlags }; int m_type; @@ -314,6 +326,13 @@ public: class iDVBChannelList: public iObject { public: + virtual RESULT removeService(const eServiceReference &service)=0; + virtual RESULT removeServices(eDVBChannelID chid=eDVBChannelID(), unsigned int orb_pos=0xFFFFFFFF)=0; + virtual RESULT removeServices(int dvb_namespace=-1, int tsid=-1, int onid=-1, unsigned int orb_pos=0xFFFFFFFF)=0; + virtual RESULT addFlag(const eServiceReference &service, unsigned int flagmask=0xFFFFFFFF)=0; + virtual RESULT removeFlag(const eServiceReference &service, unsigned int flagmask=0xFFFFFFFF)=0; + virtual RESULT removeFlags(unsigned int flagmask, eDVBChannelID chid=eDVBChannelID(), unsigned int orb_pos=0xFFFFFFFF)=0; + virtual RESULT removeFlags(unsigned int flagmask, int dvb_namespace=-1, int tsid=-1, int onid=-1, unsigned int orb_pos=0xFFFFFFFF)=0; virtual RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm)=0; virtual RESULT removeChannel(const eDVBChannelID &id)=0; @@ -402,7 +421,7 @@ public: virtual RESULT setSecSequence(const eSecCommandList &list)=0; #endif enum { - bitErrorRate, signalPower, signalQuality, Locked, Synced + bitErrorRate, signalPower, signalQuality, locked, synced, frontendNumber }; virtual int readFrontendData(int type)=0; virtual PyObject *readTransponderData(bool original)=0; @@ -545,6 +564,7 @@ public: }; class iDVBSectionReader; +class iDVBPESReader; class iDVBTSRecorder; class iTSMPEGDecoder; @@ -552,8 +572,9 @@ class iDVBDemux: public iObject { public: virtual RESULT createSectionReader(eMainloop *context, ePtr &reader)=0; + virtual RESULT createPESReader(eMainloop *context, ePtr &reader)=0; virtual RESULT createTSRecorder(ePtr &recorder)=0; - virtual RESULT getMPEGDecoder(ePtr &reader)=0; + virtual RESULT getMPEGDecoder(ePtr &reader, int primary=1)=0; virtual RESULT getSTC(pts_t &pts, int num=0)=0; virtual RESULT getCADemuxID(uint8_t &id)=0; virtual RESULT flush()=0; @@ -563,13 +584,17 @@ class iTSMPEGDecoder: public iObject { public: enum { pidDisabled = -1 }; - /** Set Displayed Video PID */ - virtual RESULT setVideoPID(int vpid)=0; + /** Set Displayed Video PID and type */ + virtual RESULT setVideoPID(int vpid, int type)=0; - enum { af_MPEG, af_AC3, af_DTS }; + enum { af_MPEG, af_AC3, af_DTS, af_AAC }; /** Set Displayed Audio PID and type */ virtual RESULT setAudioPID(int apid, int type)=0; + enum { ac_left, ac_stereo, ac_right }; + /** Set Displayed Audio Channel */ + virtual RESULT setAudioChannel(int channel)=0; + /** Set Displayed Videotext PID */ virtual RESULT setTextPID(int vpid)=0;