X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/b47c326aad25626034d14ffb630628da2f0e8b97..cae001777c7b32bdb4f6f4199e9f49058946fe9f:/lib/dvb/idvb.h diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index 882e9b15..de481d7f 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -15,6 +15,13 @@ #include #include +struct eBouquet +{ + std::string m_bouquet_name; + std::string m_path; + std::list m_services; +}; + // bitte KEINE operator int() definieren, sonst bringt das ganze nix! struct eTransportStreamID { @@ -170,8 +177,18 @@ class eDVBService: public iStaticServiceInformation { DECLARE_REF(eDVBService); public: + enum cacheID + { + cVPID, cAPID, cTPID, cPCRPID, cAC3PID, cacheMax + }; + + int getCachePID(cacheID); + void setCachePID(cacheID, int); + bool cacheEmpty() { return m_cache.empty(); } + eDVBService(); - std::string m_service_name; + /* m_service_name_sort is uppercase, with special chars removed, to increase sort performance. */ + std::string m_service_name, m_service_name_sort; std::string m_provider_name; int m_flags; @@ -183,8 +200,9 @@ public: // iStaticServiceInformation RESULT getName(const eServiceReference &ref, std::string &name); + int getLength(const eServiceReference &ref); - // for filtering: + /* for filtering: */ int checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQuery &query); }; @@ -198,6 +216,7 @@ class iDVBChannelListQuery: public iObject { public: virtual RESULT getNextResult(eServiceReferenceDVB &ref)=0; + virtual int compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b)=0; }; class eDVBChannelQuery: public iObject @@ -223,6 +242,10 @@ public: int m_int; eDVBChannelID m_channelid; + /* sort is only valid in root, and must be from the enum above. */ + int m_sort; + std::string m_bouquet_name; + static RESULT compile(ePtr &res, std::string query); ePtr m_p1, m_p2; @@ -239,7 +262,9 @@ public: virtual RESULT addService(const eServiceReferenceDVB &service, eDVBService *service)=0; virtual RESULT getService(const eServiceReferenceDVB &reference, ePtr &service)=0; - virtual RESULT startQuery(ePtr &query, eDVBChannelQuery *query)=0; + virtual RESULT getBouquet(const eServiceReference &ref, const eBouquet* &bouquet)=0; + + virtual RESULT startQuery(ePtr &query, eDVBChannelQuery *query, const eServiceReference &source)=0; }; class SatelliteDeliverySystemDescriptor; @@ -376,7 +401,8 @@ public: stateIdle = 0, stateTuning = 1, stateFailed = 2, - stateLock = 3 + stateLock = 3, + stateLostLock = 4, }; virtual RESULT getState(int &state)=0; enum { @@ -413,19 +439,22 @@ public: { state_idle, /* not yet tuned */ state_tuning, /* currently tuning (first time) */ + state_failed, /* tuning failed. */ state_unavailable, /* currently unavailable, will be back without further interaction */ state_ok, /* ok */ state_release /* channel is being shut down. */ }; virtual RESULT connectStateChange(const Slot1 &stateChange, ePtr &connection)=0; virtual RESULT getState(int &state)=0; + + /* demux capabilities */ enum { - cap_decode, - cap_ci + capDecode = 1, + /* capCI = 2 */ }; virtual RESULT setCIRouting(const eDVBCIRouting &routing)=0; - virtual RESULT getDemux(ePtr &demux)=0; + virtual RESULT getDemux(ePtr &demux, int cap=0)=0; /* direct frontend access for raw channels and/or status inquiries. */ virtual RESULT getFrontend(ePtr &frontend)=0; @@ -435,6 +464,26 @@ public: virtual void ReleaseUse() = 0; }; +typedef unsigned long long pts_t; + +class iDVBPVRChannel: public iDVBChannel +{ +public: + enum + { + state_eof = state_release + 1 /* end-of-file reached. */ + }; + + /* FIXME: there are some very ugly buffer-end and ... related problems */ + /* so this is VERY UGLY. */ + virtual RESULT playFile(const char *file) = 0; + + virtual RESULT getLength(pts_t &pts) = 0; + virtual RESULT getCurrentPosition(pts_t &pos) = 0; + virtual RESULT seekTo(pts_t &pts) = 0; + virtual RESULT seekToPosition(int relative, const off_t &pts) = 0; +}; + class iDVBSectionReader; class iDVBTSRecorder; class iTSMPEGDecoder; @@ -445,6 +494,9 @@ public: virtual RESULT createSectionReader(eMainloop *context, ePtr &reader)=0; virtual RESULT createTSRecorder(ePtr &recorder)=0; virtual RESULT getMPEGDecoder(ePtr &reader)=0; + virtual RESULT getSTC(pts_t &pts)=0; + virtual RESULT getCADemuxID(uint8_t &id)=0; + virtual RESULT flush()=0; }; class iTSMPEGDecoder: public iObject