5 #if HAVE_DVB_API_VERSION < 3
6 #include <ost/frontend.h>
7 #define FRONTENDPARAMETERS FrontendParameters
9 #include <linux/dvb/frontend.h>
10 #define FRONTENDPARAMETERS struct dvb_frontend_parameters
12 #include <lib/base/object.h>
13 #include <lib/base/ebase.h>
14 #include <lib/service/service.h>
15 #include <libsig_comp.h>
16 #include <connection.h>
18 // bitte KEINE operator int() definieren, sonst bringt das ganze nix!
19 struct eTransportStreamID
24 int get() const { return v; }
25 eTransportStreamID(int i): v(i) { }
26 eTransportStreamID(): v(-1) { }
27 bool operator == (const eTransportStreamID &c) const { return v == c.v; }
28 bool operator != (const eTransportStreamID &c) const { return v != c.v; }
29 bool operator < (const eTransportStreamID &c) const { return v < c.v; }
30 bool operator > (const eTransportStreamID &c) const { return v > c.v; }
38 int get() const { return v; }
39 eServiceID(int i): v(i) { }
40 eServiceID(): v(-1) { }
41 bool operator == (const eServiceID &c) const { return v == c.v; }
42 bool operator != (const eServiceID &c) const { return v != c.v; }
43 bool operator < (const eServiceID &c) const { return v < c.v; }
44 bool operator > (const eServiceID &c) const { return v > c.v; }
47 struct eOriginalNetworkID
52 int get() const { return v; }
53 eOriginalNetworkID(int i): v(i) { }
54 eOriginalNetworkID(): v(-1) { }
55 bool operator == (const eOriginalNetworkID &c) const { return v == c.v; }
56 bool operator != (const eOriginalNetworkID &c) const { return v != c.v; }
57 bool operator < (const eOriginalNetworkID &c) const { return v < c.v; }
58 bool operator > (const eOriginalNetworkID &c) const { return v > c.v; }
66 int get() const { return v; }
67 eDVBNamespace(int i): v(i) { }
68 eDVBNamespace(): v(-1) { }
69 bool operator == (const eDVBNamespace &c) const { return v == c.v; }
70 bool operator != (const eDVBNamespace &c) const { return v != c.v; }
71 bool operator < (const eDVBNamespace &c) const { return v < c.v; }
72 bool operator > (const eDVBNamespace &c) const { return v > c.v; }
77 eDVBNamespace dvbnamespace;
78 eTransportStreamID transport_stream_id;
79 eOriginalNetworkID original_network_id;
80 bool operator<(const eDVBChannelID &c) const
82 if (dvbnamespace < c.dvbnamespace)
84 else if (dvbnamespace == c.dvbnamespace)
86 if (original_network_id < c.original_network_id)
88 else if (original_network_id == c.original_network_id)
89 if (transport_stream_id < c.transport_stream_id)
94 eDVBChannelID(eDVBNamespace dvbnamespace, eTransportStreamID tsid, eOriginalNetworkID onid):
95 dvbnamespace(dvbnamespace), transport_stream_id(tsid), original_network_id(onid)
99 dvbnamespace(-1), transport_stream_id(-1), original_network_id(-1)
102 operator bool() const
104 return (dvbnamespace != -1) && (transport_stream_id != -1) && (original_network_id != -1);
108 struct eServiceReferenceDVB: public eServiceReference
110 int getServiceType() const { return data[0]; }
111 void setServiceType(int service_type) { data[0]=service_type; }
113 eServiceID getServiceID() const { return eServiceID(data[1]); }
114 void setServiceID(eServiceID service_id) { data[1]=service_id.get(); }
116 eTransportStreamID getTransportStreamID() const { return eTransportStreamID(data[2]); }
117 void setTransportStreamID(eTransportStreamID transport_stream_id) { data[2]=transport_stream_id.get(); }
119 eOriginalNetworkID getOriginalNetworkID() const { return eOriginalNetworkID(data[3]); }
120 void setOriginalNetworkID(eOriginalNetworkID original_network_id) { data[3]=original_network_id.get(); }
122 eDVBNamespace getDVBNamespace() const { return eDVBNamespace(data[4]); }
123 void setDVBNamespace(eDVBNamespace dvbnamespace) { data[4]=dvbnamespace.get(); }
125 eServiceReferenceDVB(eDVBNamespace dvbnamespace, eTransportStreamID transport_stream_id, eOriginalNetworkID original_network_id, eServiceID service_id, int service_type)
126 :eServiceReference(eServiceReference::idDVB, 0)
128 setTransportStreamID(transport_stream_id);
129 setOriginalNetworkID(original_network_id);
130 setDVBNamespace(dvbnamespace);
131 setServiceID(service_id);
132 setServiceType(service_type);
135 void set(const eDVBChannelID &chid)
137 setDVBNamespace(chid.dvbnamespace);
138 setOriginalNetworkID(chid.original_network_id);
139 setTransportStreamID(chid.transport_stream_id);
142 void getChannelID(eDVBChannelID &chid)
144 chid = eDVBChannelID(getDVBNamespace(), getTransportStreamID(), getOriginalNetworkID());
147 eServiceReferenceDVB()
148 :eServiceReference(eServiceReference::idDVB, 0)
156 class iDVBFrontendParameters;
158 class iDVBChannelList: public iObject
161 virtual RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm)=0;
164 class iDVBResourceManager: public iObject
168 solange rumloopen bis eine resource gefunden wurde, die eine frequenz
171 wenn natuerlich sowas schon vorhanden ist, dann einfach ne ref darauf
172 geben. (zwei services auf dem gleichen transponder teilen sich einen
175 virtual RESULT setChannelList(iDVBChannelList *list)=0;
176 virtual RESULT getChannelList(ePtr<iDVBChannelList> &list)=0;
177 virtual RESULT allocateChannel(const eDVBChannelID &channel, ePtr<iDVBChannel> &channel)=0;
178 virtual RESULT allocateRawChannel(ePtr<iDVBChannel> &channel)=0;
179 virtual RESULT allocatePVRChannel(int caps)=0;
182 class SatelliteDeliverySystemDescriptor;
183 class CableDeliverySystemDescriptor;
184 class TerrestrialDeliverySystemDescriptor;
186 struct eDVBFrontendParametersSatellite
191 Horizontal, Vertical, CircularLeft, CircularRight
203 fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
206 unsigned int frequency, symbol_rate;
207 int polarisation, fec, inversion, orbital_position;
209 void set(const SatelliteDeliverySystemDescriptor &);
212 struct eDVBFrontendParametersCable
214 unsigned int frequency, symbol_rate;
215 int modulation, inversion, fec_inner;
216 void set(const CableDeliverySystemDescriptor &);
219 struct eDVBFrontendParametersTerrestrial
222 void set(const TerrestrialDeliverySystemDescriptor &);
225 class iDVBFrontendParameters: public iObject
228 virtual RESULT getSystem(int &type) const = 0;
229 virtual RESULT getDVBS(eDVBFrontendParametersSatellite &p) const = 0;
230 virtual RESULT getDVBC(eDVBFrontendParametersCable &p) const = 0;
231 virtual RESULT getDVBT(eDVBFrontendParametersTerrestrial &p) const = 0;
233 virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &diff) const = 0;
234 virtual RESULT getHash(unsigned long &hash) const = 0;
237 #define MAX_DISEQC_LENGTH 16
239 struct eDVBDiseqcCommand
242 __u8 data[MAX_DISEQC_LENGTH];
245 class iDVBSatelliteEquipmentControl;
247 class iDVBFrontend: public iObject
251 feSatellite, feCable, feTerrestrial
253 virtual RESULT getFrontendType(int &type)=0;
254 virtual RESULT tune(const iDVBFrontendParameters &where)=0;
255 virtual RESULT connectStateChange(const Slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection)=0;
262 virtual RESULT getState(int &state)=0;
266 virtual RESULT setTone(int tone)=0;
268 voltageOff, voltage13, voltage18
270 virtual RESULT setVoltage(int voltage)=0;
271 virtual RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc)=0;
272 virtual RESULT setSEC(iDVBSatelliteEquipmentControl *sec)=0;
275 class iDVBSatelliteEquipmentControl: public iObject
278 virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat)=0;
286 class iDVBChannel: public iObject
291 state_idle, /* not yet tuned */
292 state_tuning, /* currently tuning (first time) */
293 state_unavailable, /* currently unavailable, will be back without further interaction */
296 virtual RESULT connectStateChange(const Slot1<void,iDVBChannel*> &stateChange, ePtr<eConnection> &connection)=0;
297 virtual RESULT getState(int &state)=0;
303 virtual RESULT setCIRouting(const eDVBCIRouting &routing)=0;
304 virtual RESULT getDemux(ePtr<iDVBDemux> &demux)=0;
306 /* direct frontend access for raw channels and/or status inquiries. */
307 virtual RESULT getFrontend(ePtr<iDVBFrontend> &frontend)=0;
310 class iDVBSectionReader;
311 class iTSMPEGDecoder;
313 class iDVBDemux: public iObject
316 virtual RESULT createSectionReader(eMainloop *context, ePtr<iDVBSectionReader> &reader)=0;
317 virtual RESULT getMPEGDecoder(ePtr<iTSMPEGDecoder> &reader)=0;
320 class iTSMPEGDecoder: public iObject
323 enum { pidDisabled = -1 };
324 /** Set Displayed Video PID */
325 virtual RESULT setVideoPID(int vpid)=0;
327 enum { af_MPEG, af_AC3, af_DTS };
328 /** Set Displayed Audio PID and type */
329 virtual RESULT setAudioPID(int apid, int type)=0;
331 /** Set Sync mode to PCR */
332 virtual RESULT setSyncPCR(int pcrpid)=0;
333 enum { sm_Audio, sm_Video };
334 /** Set Sync mode to either audio or video master */
335 virtual RESULT setSyncMaster(int who)=0;
337 /** Apply settings */
338 virtual RESULT start()=0;
340 /** Freeze frame. Either continue decoding (without display) or halt. */
341 virtual RESULT freeze(int cont)=0;
342 /** Continue after freeze. */
343 virtual RESULT unfreeze()=0;
345 // stop on .. Picture
346 enum { spm_I, spm_Ref, spm_Any };
347 /** Stop on specific decoded picture. For I-Frame display. */
348 virtual RESULT setSinglePictureMode(int when)=0;
350 enum { pkm_B, pkm_PB };
351 /** Fast forward by skipping either B or P/B pictures */
352 virtual RESULT setPictureSkipMode(int what)=0;
354 /** Slow Motion by repeating pictures */
355 virtual RESULT setSlowMotion(int repeat)=0;
357 enum { zoom_Normal, zoom_PanScan, zoom_Letterbox, zoom_Fullscreen };
358 /** Set Zoom. mode *must* be fitting. */
359 virtual RESULT setZoom(int what)=0;