5 #if HAVE_DVB_API_VERSION < 3
6 #include <ost/frontend.h>
7 #define FRONTENDPARAMETERS FrontendParameters
9 #define FRONTENDPARAMETERS struct frontend_parameters
11 #include <lib/base/object.h>
12 #include <lib/base/ebase.h>
13 #include <lib/service/service.h>
14 #include <libsig_comp.h>
15 #include <connection.h>
17 // bitte KEINE operator int() definieren, sonst bringt das ganze nix!
18 struct eTransportStreamID
23 int get() const { return v; }
24 eTransportStreamID(int i): v(i) { }
25 eTransportStreamID(): v(-1) { }
26 bool operator == (const eTransportStreamID &c) const { return v == c.v; }
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; }
37 int get() const { return v; }
38 eServiceID(int i): v(i) { }
39 eServiceID(): v(-1) { }
40 bool operator == (const eServiceID &c) const { return v == c.v; }
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; }
46 struct eOriginalNetworkID
51 int get() const { return v; }
52 eOriginalNetworkID(int i): v(i) { }
53 eOriginalNetworkID(): v(-1) { }
54 bool operator == (const eOriginalNetworkID &c) const { return v == c.v; }
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; }
65 int get() const { return v; }
66 eDVBNamespace(int i): v(i) { }
67 eDVBNamespace(): v(-1) { }
68 bool operator == (const eDVBNamespace &c) const { return v == c.v; }
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; }
76 eDVBNamespace dvbnamespace;
77 eTransportStreamID transport_stream_id;
78 eOriginalNetworkID original_network_id;
79 bool operator<(const eDVBChannelID &c) const
81 if (dvbnamespace < c.dvbnamespace)
83 else if (dvbnamespace == c.dvbnamespace)
85 if (original_network_id < c.original_network_id)
87 else if (original_network_id == c.original_network_id)
88 if (transport_stream_id < c.transport_stream_id)
93 eDVBChannelID(eDVBNamespace dvbnamespace, eTransportStreamID tsid, eOriginalNetworkID onid):
94 dvbnamespace(dvbnamespace), transport_stream_id(tsid), original_network_id(onid)
98 dvbnamespace(-1), transport_stream_id(-1), original_network_id(-1)
101 operator bool() const
103 return (dvbnamespace != -1) && (transport_stream_id != -1) && (original_network_id != -1);
107 struct eServiceReferenceDVB: public eServiceReference
109 int getServiceType() const { return data[0]; }
110 void setServiceType(int service_type) { data[0]=service_type; }
112 eServiceID getServiceID() const { return eServiceID(data[1]); }
113 void setServiceID(eServiceID service_id) { data[1]=service_id.get(); }
115 eTransportStreamID getTransportStreamID() const { return eTransportStreamID(data[2]); }
116 void setTransportStreamID(eTransportStreamID transport_stream_id) { data[2]=transport_stream_id.get(); }
118 eOriginalNetworkID getOriginalNetworkID() const { return eOriginalNetworkID(data[3]); }
119 void setOriginalNetworkID(eOriginalNetworkID original_network_id) { data[3]=original_network_id.get(); }
121 eDVBNamespace getDVBNamespace() const { return eDVBNamespace(data[4]); }
122 void setDVBNamespace(eDVBNamespace dvbnamespace) { data[4]=dvbnamespace.get(); }
124 eServiceReferenceDVB(eDVBNamespace dvbnamespace, eTransportStreamID transport_stream_id, eOriginalNetworkID original_network_id, eServiceID service_id, int service_type)
125 :eServiceReference(eServiceReference::idDVB, 0)
127 setTransportStreamID(transport_stream_id);
128 setOriginalNetworkID(original_network_id);
129 setDVBNamespace(dvbnamespace);
130 setServiceID(service_id);
131 setServiceType(service_type);
134 void set(const eDVBChannelID &chid)
136 setDVBNamespace(chid.dvbnamespace);
137 setOriginalNetworkID(chid.original_network_id);
138 setTransportStreamID(chid.transport_stream_id);
141 void getChannelID(eDVBChannelID &chid)
143 chid = eDVBChannelID(getDVBNamespace(), getTransportStreamID(), getOriginalNetworkID());
146 eServiceReferenceDVB()
147 :eServiceReference(eServiceReference::idDVB, 0)
155 class iDVBFrontendParameters;
157 class iDVBChannelList: public iObject
160 virtual RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm)=0;
163 class iDVBResourceManager: public iObject
167 solange rumloopen bis eine resource gefunden wurde, die eine frequenz
170 wenn natuerlich sowas schon vorhanden ist, dann einfach ne ref darauf
171 geben. (zwei services auf dem gleichen transponder teilen sich einen
174 virtual RESULT setChannelList(iDVBChannelList *list)=0;
175 virtual RESULT getChannelList(ePtr<iDVBChannelList> &list)=0;
176 virtual RESULT allocateChannel(const eDVBChannelID &channel, ePtr<iDVBChannel> &channel)=0;
177 virtual RESULT allocateRawChannel(ePtr<iDVBChannel> &channel)=0;
178 virtual RESULT allocatePVRChannel(int caps)=0;
181 class SatelliteDeliverySystemDescriptor;
182 class CableDeliverySystemDescriptor;
183 class TerrestrialDeliverySystemDescriptor;
185 struct eDVBFrontendParametersSatellite
190 Horizontal, Vertical, CircularLeft, CircularRight
202 fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
205 unsigned int frequency, symbol_rate;
206 int polarisation, fec, inversion, orbital_position;
208 void set(const SatelliteDeliverySystemDescriptor &);
211 struct eDVBFrontendParametersCable
213 unsigned int frequency, symbol_rate;
214 int modulation, inversion, fec_inner;
215 void set(const CableDeliverySystemDescriptor &);
218 struct eDVBFrontendParametersTerrestrial
221 void set(const TerrestrialDeliverySystemDescriptor &);
224 class iDVBFrontendParameters: public iObject
227 virtual RESULT getSystem(int &type) const = 0;
228 virtual RESULT getDVBS(eDVBFrontendParametersSatellite &p) const = 0;
229 virtual RESULT getDVBC(eDVBFrontendParametersCable &p) const = 0;
230 virtual RESULT getDVBT(eDVBFrontendParametersTerrestrial &p) const = 0;
232 virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &diff) const = 0;
233 virtual RESULT getHash(unsigned long &hash) const = 0;
236 #define MAX_DISEQC_LENGTH 16
238 struct eDVBDiseqcCommand
241 __u8 data[MAX_DISEQC_LENGTH];
244 class iDVBSatelliteEquipmentControl;
246 class iDVBFrontend: public iObject
250 feSatellite, feCable, feTerrestrial
252 virtual RESULT getFrontendType(int &type)=0;
253 virtual RESULT tune(const iDVBFrontendParameters &where)=0;
254 virtual RESULT connectStateChange(const Slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection)=0;
261 virtual RESULT getState(int &state)=0;
265 virtual RESULT setTone(int tone)=0;
267 voltageOff, voltage13, voltage18
269 virtual RESULT setVoltage(int voltage)=0;
270 virtual RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc)=0;
271 virtual RESULT setSEC(iDVBSatelliteEquipmentControl *sec)=0;
274 class iDVBSatelliteEquipmentControl: public iObject
277 virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat)=0;
285 class iDVBChannel: public iObject
290 state_idle, /* not yet tuned */
291 state_tuning, /* currently tuning (first time) */
292 state_unavailable, /* currently unavailable, will be back without further interaction */
295 virtual RESULT connectStateChange(const Slot1<void,iDVBChannel*> &stateChange, ePtr<eConnection> &connection)=0;
296 virtual RESULT getState(int &state)=0;
302 virtual RESULT setCIRouting(const eDVBCIRouting &routing)=0;
303 virtual RESULT getDemux(ePtr<iDVBDemux> &demux)=0;
305 /* direct frontend access for raw channels and/or status inquiries. */
306 virtual RESULT getFrontend(ePtr<iDVBFrontend> &frontend)=0;
309 class iDVBSectionReader;
310 class iTSMPEGDecoder;
312 class iDVBDemux: public iObject
315 virtual RESULT createSectionReader(eMainloop *context, ePtr<iDVBSectionReader> &reader)=0;
316 virtual RESULT getMPEGDecoder(ePtr<iTSMPEGDecoder> &reader)=0;
319 class iTSMPEGDecoder: public iObject
322 enum { pidDisabled = -1 };
323 /** Set Displayed Video PID */
324 virtual RESULT setVideoPID(int vpid)=0;
326 enum { af_MPEG, af_AC3, af_DTS };
327 /** Set Displayed Audio PID and type */
328 virtual RESULT setAudioPID(int apid, int type)=0;
330 /** Set Sync mode to PCR */
331 virtual RESULT setSyncPCR(int pcrpid)=0;
332 enum { sm_Audio, sm_Video };
333 /** Set Sync mode to either audio or video master */
334 virtual RESULT setSyncMaster(int who)=0;
336 /** Apply settings */
337 virtual RESULT start()=0;
339 /** Freeze frame. Either continue decoding (without display) or halt. */
340 virtual RESULT freeze(int cont)=0;
341 /** Continue after freeze. */
342 virtual RESULT unfreeze()=0;
344 // stop on .. Picture
345 enum { spm_I, spm_Ref, spm_Any };
346 /** Stop on specific decoded picture. For I-Frame display. */
347 virtual RESULT setSinglePictureMode(int when)=0;
349 enum { pkm_B, pkm_PB };
350 /** Fast forward by skipping either B or P/B pictures */
351 virtual RESULT setPictureSkipMode(int what)=0;
353 /** Slow Motion by repeating pictures */
354 virtual RESULT setSlowMotion(int repeat)=0;
356 enum { zoom_Normal, zoom_PanScan, zoom_Letterbox, zoom_Fullscreen };
357 /** Set Zoom. mode *must* be fitting. */
358 virtual RESULT setZoom(int what)=0;