1 #ifndef __lib_dvb_service_h
2 #define __lib_dvb_service_h
6 #include <libsig_comp.h>
7 #include <lib/dvb/dvb.h>
9 class eServiceReference
;
14 eServiceEvent(int type
, int param
): type(type
), param(param
)
17 eServiceEvent(int type
): type(type
), param(0)
30 evtStatus
, // have (new) status
31 evtInfoUpdated
, // updated info..
32 evtAddNewAudioStreamId
,
50 eServiceCommand(int type
): type(type
) { }
51 eServiceCommand(int type
, int parm
): type(type
), parm(parm
) { }
61 cmdSetSpeed
, // parm : ratio.. 1 normal, 0 pause, >1 fast forward, <0 reverse (if supported)
62 cmdSkip
, // parm : in ms (~)
63 cmdSeekAbsolute
, // parm : percentage ~
64 cmdSeekReal
, // parm : service specific, as given by queryRealPosition
66 cmdRecordOpenPermanentTimeshift
,
67 cmdAddPermanentTimeshiftToRecording
80 class eServiceHandler
: public Object
89 flagHaveSubservices
=2,
90 flagHaveMultipleAudioStreams
=4,
91 flagIsSeekable
=8, // supports seek commands
92 flagSupportPosition
=16, // supports position read
93 flagIsTrack
=32, // behaves like an audio track
98 statePlaying
, stateError
, stateScrambled
, stateStopped
, statePause
, stateSkipping
100 eServiceHandler(int id
);
105 virtual ~eServiceHandler();
106 virtual eService
*createService(const eServiceReference
&node
);
108 virtual int play(const eServiceReference
&service
, int workaround
=0 );
111 virtual int serviceCommand(const eServiceCommand
&cmd
);
113 // for DVB audio channels:
114 virtual PMT
*getPMT();
115 virtual void setPID(const PMTEntry
*);
117 // for DVB nvod channels:
118 virtual SDT
*getSDT();
120 // for DVB events, nvod, audio....
121 virtual EIT
*getEIT();
124 virtual void setAudioStream(unsigned int stream_id
);
126 static int getFlags();
127 virtual int getState();
130 virtual int getAspectRatio();
132 virtual int getErrorInfo();
134 virtual int stop(int workaround
=0);
138 posQueryLength
, // query length (in seconds)
139 posQueryCurrent
, // query current position
140 posQueryRealLength
, // service specific length, e.g. file length in bytes
141 posQueryRealCurrent
// service specific current position, e.g. file position in bytes
143 virtual int getPosition(int what
); // -1 means: not available
145 // simple "info" functions..
146 virtual eString
getInfo(int id
); // 0: status, 1+2 upper/lower line :)
148 Signal1
<void, const eServiceEvent
&> serviceEvent
;
150 // service list functions
151 virtual void enterDirectory(const eServiceReference
&dir
, Signal1
<void,const eServiceReference
&> &callback
);
152 virtual void leaveDirectory(const eServiceReference
&dir
);
154 virtual eService
*addRef(const eServiceReference
&service
);
155 virtual void removeRef(const eServiceReference
&service
);
160 class eServiceInterface
: public Object
162 eServiceHandler
*currentServiceHandler
;
163 std::map
<int,eServiceHandler
*> handlers
;
164 int switchServiceHandler(int id
, int workaround
=0);
166 SigC::Connection conn
;
167 void handleServiceEvent(const eServiceEvent
&event
);
169 static eServiceInterface
*instance
;
172 ~eServiceInterface();
173 static eServiceInterface
*getInstance();
175 int registerHandler(int id
, eServiceHandler
*handler
);
176 int unregisterHandler(int id
);
177 eServiceHandler
*getServiceHandler(int id
);
179 int play(const eServiceReference
&service
);
180 int play(const eServiceReference
&service
, int workaround
);
182 // service related functions
183 Signal1
<void,const eServiceEvent
&> serviceEvent
;
185 eServiceHandler
*getService()
187 return currentServiceHandler
;
190 int stop(int workaround
=0);
192 eServiceReference service
;
194 // service list functions
195 void enterDirectory(const eServiceReference
&dir
, Signal1
<void,const eServiceReference
&> &callback
);
196 void leaveDirectory(const eServiceReference
&dir
);
198 // stuff for modifiying ...
200 eService
*addRef(const eServiceReference
&service
);
201 void removeRef(const eServiceReference
&service
);