4 #include <lib/service/iservice.h>
5 #include <lib/dvb/idvb.h>
7 #include <lib/dvb/pmt.h>
8 #include <lib/dvb/eit.h>
10 class eServiceFactoryDVB: public iServiceHandler
12 DECLARE_REF(eServiceFactoryDVB);
15 virtual ~eServiceFactoryDVB();
19 RESULT play(const eServiceReference &, ePtr<iPlayableService> &ptr);
20 RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
21 RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
22 RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
23 RESULT offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr);
25 RESULT lookupService(ePtr<eDVBService> &ptr, const eServiceReference &ref);
30 class eDVBServiceList: public iListableService, public iMutableServiceList
32 DECLARE_REF(eDVBServiceList);
34 virtual ~eDVBServiceList();
35 RESULT getContent(std::list<eServiceReference> &list, bool sorted=false);
36 RESULT getContent(PyObject *list, bool sorted=false);
37 RESULT getNext(eServiceReference &ptr);
38 int compareLessEqual(const eServiceReference &a, const eServiceReference &b);
40 RESULT startEdit(ePtr<iMutableServiceList> &);
41 RESULT flushChanges();
42 RESULT addService(eServiceReference &ref);
43 RESULT removeService(eServiceReference &ref);
44 RESULT moveService(eServiceReference &ref, int pos);
45 RESULT setListName(const std::string &name);
48 eServiceReference m_parent;
49 friend class eServiceFactoryDVB;
50 eDVBServiceList(const eServiceReference &parent);
51 ePtr<iDVBChannelListQuery> m_query;
53 /* for editing purposes. WARNING: lifetime issue! */
57 class eDVBServicePlay: public iPlayableService, public iPauseableService,
58 public iSeekableService, public Object, public iServiceInformation,
59 public iAudioTrackSelection, public iFrontendStatusInformation,
60 public iSubserviceList, public iTimeshiftService
62 DECLARE_REF(eDVBServicePlay);
64 virtual ~eDVBServicePlay();
67 RESULT connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection);
70 RESULT seek(ePtr<iSeekableService> &ptr);
71 RESULT pause(ePtr<iPauseableService> &ptr);
72 RESULT info(ePtr<iServiceInformation> &ptr);
73 RESULT audioTracks(ePtr<iAudioTrackSelection> &ptr);
74 RESULT frontendStatusInfo(ePtr<iFrontendStatusInformation> &ptr);
75 RESULT subServices(ePtr<iSubserviceList> &ptr);
76 RESULT timeshift(ePtr<iTimeshiftService> &ptr);
81 RESULT setSlowMotion(int ratio);
82 RESULT setFastForward(int ratio);
85 RESULT getLength(pts_t &len);
86 RESULT seekTo(pts_t to);
87 RESULT seekRelative(int direction, pts_t to);
88 RESULT getPlayPosition(pts_t &pos);
89 RESULT setTrickmode(int trick=0);
91 // iServiceInformation
92 RESULT getName(std::string &name);
93 RESULT getEvent(ePtr<eServiceEvent> &evt, int nownext);
95 std::string getInfoString(int w);
97 // iAudioTrackSelection
98 int getNumberOfTracks();
99 RESULT selectTrack(unsigned int i);
100 RESULT getTrackInfo(struct iAudioTrackInfo &, unsigned int n);
102 // iFrontendStatusInformation
103 int getFrontendInfo(int w);
106 int getNumberOfSubservices();
107 RESULT getSubservice(eServiceReference &subservice, unsigned int n);
110 RESULT startTimeshift();
111 RESULT stopTimeshift();
112 int isTimeshiftActive();
113 RESULT activateTimeshift();
116 friend class eServiceFactoryDVB;
117 eServiceReference m_reference;
119 ePtr<eDVBService> m_dvb_service;
121 ePtr<iTSMPEGDecoder> m_decoder;
123 /* in timeshift mode, we essentially have two channels, and thus pmt handlers. */
124 eDVBServicePMTHandler m_service_handler, m_service_handler_timeshift;
125 eDVBServiceEITHandler m_event_handler;
127 eDVBServicePlay(const eServiceReference &ref, eDVBService *service);
131 void serviceEvent(int event);
132 void serviceEventTimeshift(int event);
133 Signal2<void,iPlayableService*,int> m_event;
135 int m_is_pvr, m_is_paused, m_timeshift_enabled, m_timeshift_active;
137 std::string m_timeshift_file;
140 ePtr<iDVBDemux> m_decode_demux;
142 int m_current_audio_stream;
143 int selectAudioStream(int n);
145 ePtr<iDVBTSRecorder> m_record;
146 std::set<int> m_pids_active;
148 void updateTimeshiftPids();
150 void switchToTimeshift();
152 void updateDecoder();