+ RESULT getName(std::string &name);
+ RESULT getEvent(ePtr<eServiceEvent> &evt, int nownext);
+ int getInfo(int w);
+ std::string getInfoString(int w);
+
+ // iAudioTrackSelection
+ int getNumberOfTracks();
+ RESULT selectTrack(unsigned int i);
+ RESULT getTrackInfo(struct iAudioTrackInfo &, unsigned int n);
+
+ // iFrontendStatusInformation
+ int getFrontendInfo(int w);
+ PyObject *getFrontendData(bool);
+
+ // iSubserviceList
+ int getNumberOfSubservices();
+ RESULT getSubservice(eServiceReference &subservice, unsigned int n);
+
+ // iTimeshiftService
+ RESULT startTimeshift();
+ RESULT stopTimeshift();
+ int isTimeshiftActive();
+ RESULT activateTimeshift();
+
+ // iCueSheet
+ PyObject *getCutList();
+ void setCutList(PyObject *);
+ void setCutListEnable(int enable);
+
+private:
+ friend class eServiceFactoryDVB;
+ eServiceReference m_reference;
+
+ ePtr<eDVBService> m_dvb_service;
+
+ ePtr<iTSMPEGDecoder> m_decoder;
+
+ /* in timeshift mode, we essentially have two channels, and thus pmt handlers. */
+ eDVBServicePMTHandler m_service_handler, m_service_handler_timeshift;
+ eDVBServiceEITHandler m_event_handler;
+
+ eDVBServicePlay(const eServiceReference &ref, eDVBService *service);
+
+ void gotNewEvent();
+
+ void serviceEvent(int event);
+ void serviceEventTimeshift(int event);
+ Signal2<void,iPlayableService*,int> m_event;
+
+ int m_is_pvr, m_is_paused, m_timeshift_enabled, m_timeshift_active;
+ int m_first_program_info;
+
+ std::string m_timeshift_file;
+ int m_timeshift_fd;
+
+ ePtr<iDVBDemux> m_decode_demux;
+
+ int m_current_audio_stream;
+ int selectAudioStream(int n);
+
+ ePtr<iDVBTSRecorder> m_record;
+ std::set<int> m_pids_active;
+
+ void updateTimeshiftPids();
+ void switchToLive();
+ void switchToTimeshift();
+
+ void updateDecoder();
+
+ int m_skipmode;
+
+ ePtr<eCueSheet> m_cue;
+
+ struct cueEntry
+ {
+ pts_t where;
+ unsigned int what;
+
+ bool operator < (const struct cueEntry &o) const
+ {
+ return where < o.where;
+ }
+ cueEntry(const pts_t &where, unsigned int what) :
+ where(where), what(what)
+ {
+ }
+ };
+
+ std::multiset<cueEntry> m_cue_entries;
+ int m_cuesheet_changed, m_cutlist_enabled;
+
+ void loadCuesheet();
+ void saveCuesheet();
+
+ void cutlistToCuesheet();