fix spaces
[enigma2.git] / lib / dvb / idvb.h
index 518525f9e09c253755eb65594c1fcf12b1255dcb..bd528f0657a79b6496d3780d4899b560150dfe00 100644 (file)
 #include <libsig_comp.h>
 #include <connection.h>
 
+struct eBouquet
+{
+       std::string m_bouquet_name;
+       std::string m_path;
+       std::list<eServiceReference> m_services;
+};
+
                // bitte KEINE operator int() definieren, sonst bringt das ganze nix!
 struct eTransportStreamID
 {
@@ -180,7 +187,8 @@ public:
        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;
@@ -194,7 +202,7 @@ public:
        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);
 };
 
@@ -208,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
@@ -233,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<eDVBChannelQuery> &res, std::string query);
        
        ePtr<eDVBChannelQuery> m_p1, m_p2;
@@ -249,7 +262,9 @@ public:
        virtual RESULT addService(const eServiceReferenceDVB &service, eDVBService *service)=0;
        virtual RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service)=0;
 
-       virtual RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query)=0;
+       virtual RESULT getBouquet(const eServiceReference &ref, const eBouquet* &bouquet)=0;
+
+       virtual RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query, const eServiceReference &source)=0;
 };
 
 class SatelliteDeliverySystemDescriptor;
@@ -386,7 +401,8 @@ public:
                stateIdle = 0,
                stateTuning = 1,
                stateFailed = 2,
-               stateLock = 3
+               stateLock = 3,
+               stateLostLock = 4,
        };
        virtual RESULT getState(int &state)=0;
        enum {
@@ -423,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<void,iDVBChannel*> &stateChange, ePtr<eConnection> &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<iDVBDemux> &demux)=0;
+       virtual RESULT getDemux(ePtr<iDVBDemux> &demux, int cap=0)=0;
        
                /* direct frontend access for raw channels and/or status inquiries. */
        virtual RESULT getFrontend(ePtr<iDVBFrontend> &frontend)=0;
@@ -459,8 +478,9 @@ public:
                /* so this is VERY UGLY. */
        virtual RESULT playFile(const char *file) = 0;
        
-       virtual RESULT getLength(pts_t &len) = 0;
+       virtual RESULT getLength(pts_t &pts) = 0;
        virtual RESULT getCurrentPosition(pts_t &pos) = 0;
+       virtual RESULT seekTo(pts_t &pts) = 0;
        
        // seekTo ...
 };
@@ -475,6 +495,9 @@ public:
        virtual RESULT createSectionReader(eMainloop *context, ePtr<iDVBSectionReader> &reader)=0;
        virtual RESULT createTSRecorder(ePtr<iDVBTSRecorder> &recorder)=0;
        virtual RESULT getMPEGDecoder(ePtr<iTSMPEGDecoder> &reader)=0;
+       virtual RESULT getSTC(pts_t &pts)=0;
+       virtual RESULT getCADemuxID(uint8_t &id)=0;
+       virtual RESULT flush()=0;
 };
 
 class iTSMPEGDecoder: public iObject