X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/4008892983b7a8348b24dccea5f6f98826adc2d6..36dc37e5d0c9ef8fc5f923ad38ee6cc98f316556:/lib/dvb/idvb.h diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index 6bfbc216..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; @@ -162,6 +170,20 @@ struct eServiceReferenceDVB: public eServiceReference eTransportStreamID getParentTransportStreamID() const { return eTransportStreamID(data[6]); } void setParentTransportStreamID( eTransportStreamID tsid ) { data[6]=tsid.get(); } + eServiceReferenceDVB getParentServiceReference() const + { + eServiceReferenceDVB tmp(*this); + if (data[5] && data[6]) + { + tmp.data[1] = data[5]; + tmp.data[2] = data[6]; + tmp.data[5] = tmp.data[6] = 0; + } + else + tmp.type = idInvalid; + return tmp; + } + eServiceReferenceDVB(eDVBNamespace dvbnamespace, eTransportStreamID transport_stream_id, eOriginalNetworkID original_network_id, eServiceID service_id, int service_type) :eServiceReference(eServiceReference::idDVB, 0) { @@ -206,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. */ @@ -222,10 +248,21 @@ public: std::string m_provider_name; void genSortName(); - + int m_flags; - std::set m_ca; - std::map m_cache; + enum + { + dxNoSDT=1, // don't get SDT +//nyi dxDontshow=2, + dxNoDVB=4, // dont use PMT for this service ( use cached pids ) + dxHoldName=8, + dxNewFound=64, + }; + + bool usePMT() const { return !(m_flags & dxNoDVB); } + + CAID_LIST m_ca; + virtual ~eDVBService(); eDVBService &operator=(const eDVBService &); @@ -265,7 +302,9 @@ public: tSatellitePosition, tChannelID, tAND, - tOR + tOR, + tAny, + tFlags }; int m_type; @@ -287,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; @@ -347,7 +393,7 @@ public: enum { feSatellite, feCable, feTerrestrial }; - virtual RESULT getFrontendType(int &type)=0; + virtual RESULT getFrontendType(int &SWIG_OUTPUT)=0; virtual RESULT tune(const iDVBFrontendParameters &where)=0; #ifndef SWIG virtual RESULT connectStateChange(const Slot1 &stateChange, ePtr &connection)=0; @@ -359,7 +405,7 @@ public: stateLock = 3, stateLostLock = 4, }; - virtual RESULT getState(int &state)=0; + virtual RESULT getState(int &SWIG_OUTPUT)=0; enum { toneOff, toneOn }; @@ -375,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; @@ -417,10 +463,10 @@ public: state_last_instance, /* just one reference to this channel is left */ state_release /* channel is being shut down. */ }; - virtual RESULT getState(int &state)=0; + virtual RESULT getState(int &SWIG_OUTPUT)=0; /* direct frontend access for raw channels and/or status inquiries. */ - virtual RESULT getFrontend(ePtr &SWIG_OUTPUT)=0; + virtual RESULT getFrontend(ePtr &)=0; #ifndef SWIG virtual RESULT getCurrentFrontendParameters(ePtr &)=0; @@ -518,6 +564,7 @@ public: }; class iDVBSectionReader; +class iDVBPESReader; class iDVBTSRecorder; class iTSMPEGDecoder; @@ -525,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; @@ -536,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;