4 #include <lib/base/object.h>
5 #include <lib/base/ebase.h>
6 #include <lib/service/service.h>
7 #include <libsig_comp.h>
8 #include <connection.h>
10 // bitte KEINE operator int() definieren, sonst bringt das ganze nix!
11 struct eTransportStreamID
16 int get() const { return v; }
17 eTransportStreamID(int i): v(i) { }
18 eTransportStreamID(): v(-1) { }
19 bool operator == (const eTransportStreamID &c) const { return v == c.v; }
20 bool operator != (const eTransportStreamID &c) const { return v != c.v; }
21 bool operator < (const eTransportStreamID &c) const { return v < c.v; }
22 bool operator > (const eTransportStreamID &c) const { return v > c.v; }
30 int get() const { return v; }
31 eServiceID(int i): v(i) { }
32 eServiceID(): v(-1) { }
33 bool operator == (const eServiceID &c) const { return v == c.v; }
34 bool operator != (const eServiceID &c) const { return v != c.v; }
35 bool operator < (const eServiceID &c) const { return v < c.v; }
36 bool operator > (const eServiceID &c) const { return v > c.v; }
39 struct eOriginalNetworkID
44 int get() const { return v; }
45 eOriginalNetworkID(int i): v(i) { }
46 eOriginalNetworkID(): v(-1) { }
47 bool operator == (const eOriginalNetworkID &c) const { return v == c.v; }
48 bool operator != (const eOriginalNetworkID &c) const { return v != c.v; }
49 bool operator < (const eOriginalNetworkID &c) const { return v < c.v; }
50 bool operator > (const eOriginalNetworkID &c) const { return v > c.v; }
58 int get() const { return v; }
59 eDVBNamespace(int i): v(i) { }
60 eDVBNamespace(): v(-1) { }
61 bool operator == (const eDVBNamespace &c) const { return v == c.v; }
62 bool operator != (const eDVBNamespace &c) const { return v != c.v; }
63 bool operator < (const eDVBNamespace &c) const { return v < c.v; }
64 bool operator > (const eDVBNamespace &c) const { return v > c.v; }
69 eDVBNamespace dvbnamespace;
70 eTransportStreamID transport_stream_id;
71 eOriginalNetworkID original_network_id;
72 bool operator<(const eDVBChannelID &c) const
74 if (dvbnamespace < c.dvbnamespace)
76 else if (dvbnamespace == c.dvbnamespace)
78 if (original_network_id < c.original_network_id)
80 else if (original_network_id == c.original_network_id)
81 if (transport_stream_id < c.transport_stream_id)
86 eDVBChannelID(eDVBNamespace dvbnamespace, eTransportStreamID tsid, eOriginalNetworkID onid):
87 dvbnamespace(dvbnamespace), transport_stream_id(tsid), original_network_id(onid)
91 dvbnamespace(-1), transport_stream_id(-1), original_network_id(-1)
96 return (dvbnamespace != -1) && (transport_stream_id != -1) && (original_network_id != -1);
100 struct eServiceReferenceDVB: public eServiceReference
102 int getServiceType() const { return data[0]; }
103 void setServiceType(int service_type) { data[0]=service_type; }
105 eServiceID getServiceID() const { return eServiceID(data[1]); }
106 void setServiceID(eServiceID service_id) { data[1]=service_id.get(); }
108 eTransportStreamID getTransportStreamID() const { return eTransportStreamID(data[2]); }
109 void setTransportStreamID(eTransportStreamID transport_stream_id) { data[2]=transport_stream_id.get(); }
111 eOriginalNetworkID getOriginalNetworkID() const { return eOriginalNetworkID(data[3]); }
112 void setOriginalNetworkID(eOriginalNetworkID original_network_id) { data[3]=original_network_id.get(); }
114 eDVBNamespace getDVBNamespace() const { return eDVBNamespace(data[4]); }
115 void setDVBNamespace(eDVBNamespace dvbnamespace) { data[4]=dvbnamespace.get(); }
117 eServiceReferenceDVB(eDVBNamespace dvbnamespace, eTransportStreamID transport_stream_id, eOriginalNetworkID original_network_id, eServiceID service_id, int service_type)
118 :eServiceReference(eServiceReference::idDVB, 0)
120 setTransportStreamID(transport_stream_id);
121 setOriginalNetworkID(original_network_id);
122 setDVBNamespace(dvbnamespace);
123 setServiceID(service_id);
124 setServiceType(service_type);
127 void set(const eDVBChannelID &chid)
129 setDVBNamespace(chid.dvbnamespace);
130 setOriginalNetworkID(chid.original_network_id);
131 setTransportStreamID(chid.transport_stream_id);
134 void getChannelID(eDVBChannelID &chid)
136 chid = eDVBChannelID(getDVBNamespace(), getTransportStreamID(), getOriginalNetworkID());
139 eServiceReferenceDVB()
140 :eServiceReference(eServiceReference::idDVB, 0)
148 class iDVBFrontendParameters;
150 class iDVBChannelList: public iObject
153 virtual RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm)=0;
156 class iDVBResourceManager: public iObject
160 solange rumloopen bis eine resource gefunden wurde, die eine frequenz
163 wenn natuerlich sowas schon vorhanden ist, dann einfach ne ref darauf
164 geben. (zwei services auf dem gleichen transponder teilen sich einen
167 virtual RESULT setChannelList(iDVBChannelList *list)=0;
168 virtual RESULT getChannelList(ePtr<iDVBChannelList> &list)=0;
169 virtual RESULT allocateChannel(const eDVBChannelID &channel, ePtr<iDVBChannel> &channel)=0;
170 virtual RESULT allocateRawChannel(ePtr<iDVBChannel> &channel)=0;
171 virtual RESULT allocatePVRChannel(int caps)=0;
174 class SatelliteDeliverySystemDescriptor;
175 class CableDeliverySystemDescriptor;
176 class TerrestrialDeliverySystemDescriptor;
178 struct eDVBFrontendParametersSatellite
183 Horizontal, Vertical, CircularLeft, CircularRight
195 fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
198 unsigned int frequency, symbol_rate;
199 int polarisation, fec, inversion, orbital_position;
201 void set(const SatelliteDeliverySystemDescriptor &);
204 struct eDVBFrontendParametersCable
206 unsigned int frequency, symbol_rate;
207 int modulation, inversion, fec_inner;
208 void set(const CableDeliverySystemDescriptor &);
211 struct eDVBFrontendParametersTerrestrial
214 void set(const TerrestrialDeliverySystemDescriptor &);
217 class iDVBFrontendParameters: public iObject
220 virtual RESULT getSystem(int &type) const = 0;
221 virtual RESULT getDVBS(eDVBFrontendParametersSatellite &p) const = 0;
222 virtual RESULT getDVBC(eDVBFrontendParametersCable &p) const = 0;
223 virtual RESULT getDVBT(eDVBFrontendParametersTerrestrial &p) const = 0;
225 virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &diff) const = 0;
226 virtual RESULT getHash(unsigned long &hash) const = 0;
229 #define MAX_DISEQC_LENGTH 16
231 struct eDVBDiseqcCommand
234 __u8 data[MAX_DISEQC_LENGTH];
237 class iDVBSatelliteEquipmentControl;
239 class iDVBFrontend: public iObject
243 feSatellite, feCable, feTerrestrial
245 virtual RESULT getFrontendType(int &type)=0;
246 virtual RESULT tune(const iDVBFrontendParameters &where)=0;
247 virtual RESULT connectStateChange(const Slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection)=0;
254 virtual RESULT getState(int &state)=0;
258 virtual RESULT setTone(int tone)=0;
260 voltageOff, voltage13, voltage18
262 virtual RESULT setVoltage(int voltage)=0;
263 virtual RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc)=0;
264 virtual RESULT setSEC(iDVBSatelliteEquipmentControl *sec)=0;
267 class iDVBSatelliteEquipmentControl: public iObject
270 virtual RESULT prepare(iDVBFrontend &frontend, struct dvb_frontend_parameters &parm, eDVBFrontendParametersSatellite &sat)=0;
278 class iDVBChannel: public iObject
283 state_idle, /* not yet tuned */
284 state_tuning, /* currently tuning (first time) */
285 state_unavailable, /* currently unavailable, will be back without further interaction */
288 virtual RESULT connectStateChange(const Slot1<void,iDVBChannel*> &stateChange, ePtr<eConnection> &connection)=0;
289 virtual RESULT getState(int &state)=0;
295 virtual RESULT setCIRouting(const eDVBCIRouting &routing)=0;
296 virtual RESULT getDemux(ePtr<iDVBDemux> &demux)=0;
298 /* direct frontend access for raw channels and/or status inquiries. */
299 virtual RESULT getFrontend(ePtr<iDVBFrontend> &frontend)=0;
302 class iDVBSectionReader;
303 class iTSMPEGDecoder;
305 class iDVBDemux: public iObject
308 virtual RESULT createSectionReader(eMainloop *context, ePtr<iDVBSectionReader> &reader)=0;
309 virtual RESULT getMPEGDecoder(ePtr<iTSMPEGDecoder> &reader)=0;
312 class iTSMPEGDecoder: public iObject
315 enum { pidDisabled = -1 };
316 /** Set Displayed Video PID */
317 virtual RESULT setVideoPID(int vpid)=0;
319 enum { af_MPEG, af_AC3, af_DTS };
320 /** Set Displayed Audio PID and type */
321 virtual RESULT setAudioPID(int apid, int type)=0;
323 /** Set Sync mode to PCR */
324 virtual RESULT setSyncPCR(int pcrpid)=0;
325 enum { sm_Audio, sm_Video };
326 /** Set Sync mode to either audio or video master */
327 virtual RESULT setSyncMaster(int who)=0;
329 /** Apply settings */
330 virtual RESULT start()=0;
332 /** Freeze frame. Either continue decoding (without display) or halt. */
333 virtual RESULT freeze(int cont)=0;
334 /** Continue after freeze. */
335 virtual RESULT unfreeze()=0;
337 // stop on .. Picture
338 enum { spm_I, spm_Ref, spm_Any };
339 /** Stop on specific decoded picture. For I-Frame display. */
340 virtual RESULT setSinglePictureMode(int when)=0;
342 enum { pkm_B, pkm_PB };
343 /** Fast forward by skipping either B or P/B pictures */
344 virtual RESULT setPictureSkipMode(int what)=0;
346 /** Slow Motion by repeating pictures */
347 virtual RESULT setSlowMotion(int repeat)=0;
349 enum { zoom_Normal, zoom_PanScan, zoom_Letterbox, zoom_Fullscreen };
350 /** Set Zoom. mode *must* be fitting. */
351 virtual RESULT setZoom(int what)=0;