+ /* pvr */
+ 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 = -1);
+
+ /* timeshift */
+ ePtr<iDVBTSRecorder> m_record;
+ std::set<int> m_pids_active;
+
+ void updateTimeshiftPids();
+ void switchToLive();
+ void switchToTimeshift();
+
+ void updateDecoder();
+
+ int m_skipmode;
+
+ /* cuesheet */
+
+ 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();
+
+ eSubtitleWidget *m_subtitle_widget;
+
+ /* teletext subtitles */
+ ePtr<eDVBTeletextParser> m_teletext_parser;
+ void newSubtitlePage(const eDVBTeletextSubtitlePage &p);
+ ePtr<eConnection> m_new_subtitle_page_connection;
+ std::list<eDVBTeletextSubtitlePage> m_subtitle_pages;
+
+ /* dvb subtitles */
+ ePtr<eDVBSubtitleParser> m_subtitle_parser;
+ void newDVBSubtitlePage(const eDVBSubtitlePage &p);
+ ePtr<eConnection> m_new_dvb_subtitle_page_connection;
+ std::list<eDVBSubtitlePage> m_dvb_subtitle_pages;
+
+ eTimer m_subtitle_sync_timer;
+ void checkSubtitleTiming();
+
+ /* radiotext */
+ ePtr<eDVBRdsDecoder> m_rds_decoder;
+ ePtr<eConnection> m_rds_decoder_event_connection;
+ void rdsDecoderEvent(int);
+
+ ePtr<eConnection> m_video_event_connection;
+ void video_event(struct iTSMPEGDecoder::videoEvent);
+ struct iTSMPEGDecoder::videoEvent m_videoEventData;
+};
+
+class eStaticServiceDVBBouquetInformation: public iStaticServiceInformation
+{
+ DECLARE_REF(eStaticServiceDVBBouquetInformation);
+ eServiceReference m_playable_service;
+public:
+ eServiceReference &getPlayableService() { return m_playable_service; }
+ RESULT getName(const eServiceReference &ref, std::string &name);
+ int getLength(const eServiceReference &ref);
+ int isPlayable(const eServiceReference &ref, const eServiceReference &ignore);
+ RESULT getEvent(const eServiceReference &ref, ePtr<eServiceEvent> &ptr, time_t start_time);