enable playback of multifile (split) movies
[enigma2.git] / lib / dvb / dvb.h
index 0c652e35dd0569d84de17bd1b4722ab083cf285c..6209f281a2c0ecf217847815ee580c052115756c 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <lib/base/ebase.h>
 #include <lib/base/filepush.h>
+#include <lib/base/elock.h>
 #include <lib/dvb/idvb.h>
 #include <lib/dvb/demux.h>
 #include <lib/dvb/frontend.h>
@@ -116,13 +117,11 @@ private:
        eSmartPtrList<eDVBDemux>    m_demux;
 };
 
-class eDVBResourceManager: public iObject
+class eDVBResourceManager: public iObject, public Object
 {
        DECLARE_REF(eDVBResourceManager);
        int avail, busy;
 
-       eUsePtr<iDVBChannel> m_cached_channel;
-
        eSmartPtrList<iDVBAdapter> m_adapter;
        
        eSmartPtrList<eDVBRegisteredDemux> m_demux;
@@ -166,6 +165,12 @@ class eDVBResourceManager: public iObject
        Signal1<void,eDVBChannel*> m_channelAdded;
 
        bool canAllocateFrontend(ePtr<iDVBFrontendParameters> &feparm);
+
+       eUsePtr<iDVBChannel> m_cached_channel;
+       Connection m_cached_channel_state_changed_conn;
+       eTimer m_releaseCachedChannelTimer;
+       void DVBChannelStateChanged(iDVBChannel*);
+       void releaseCachedChannel();
 public:
        eDVBResourceManager();
        virtual ~eDVBResourceManager();
@@ -195,6 +200,7 @@ public:
 class eDVBChannel: public iDVBPVRChannel, public iFilePushScatterGather, public Object
 {
        DECLARE_REF(eDVBChannel);
+       friend class eDVBResourceManager;
 public:
        eDVBChannel(eDVBResourceManager *mgr, eDVBAllocatedFrontend *frontend);
        virtual ~eDVBChannel();
@@ -244,7 +250,7 @@ private:
        eFilePushThread *m_pvr_thread;
        void pvrEvent(int event);
        
-       int m_pvr_fd_src, m_pvr_fd_dst;
+       int m_pvr_fd_dst;
        eDVBTSTools m_tstools;
        
        ePtr<eCueSheet> m_cue;
@@ -256,6 +262,8 @@ private:
        std::list<std::pair<off_t, off_t> > m_source_span;
        void getNextSourceSpan(off_t current_offset, size_t bytes_read, off_t &start, size_t &size);
        void flushPVR(iDVBDemux *decoding_demux=0);
+       
+       eSingleLock m_cuesheet_lock;
 
        friend class eUsePtr<eDVBChannel>;
                /* use count */