5 #if HAVE_DVB_API_VERSION < 3
6 #include <ost/frontend.h>
8 #include <lib/base/object.h>
9 #include <lib/base/ebase.h>
10 #include <lib/service/service.h>
11 #include <libsig_comp.h>
12 #include <connection.h>
14 // bitte KEINE operator int() definieren, sonst bringt das ganze nix!
15 struct eTransportStreamID
20 int get() const { return v; }
21 eTransportStreamID(int i): v(i) { }
22 eTransportStreamID(): v(-1) { }
23 bool operator == (const eTransportStreamID &c) const { return v == c.v; }
24 bool operator != (const eTransportStreamID &c) const { return v != c.v; }
25 bool operator < (const eTransportStreamID &c) const { return v < c.v; }
26 bool operator > (const eTransportStreamID &c) const { return v > c.v; }
34 int get() const { return v; }
35 eServiceID(int i): v(i) { }
36 eServiceID(): v(-1) { }
37 bool operator == (const eServiceID &c) const { return v == c.v; }
38 bool operator != (const eServiceID &c) const { return v != c.v; }
39 bool operator < (const eServiceID &c) const { return v < c.v; }
40 bool operator > (const eServiceID &c) const { return v > c.v; }
43 struct eOriginalNetworkID
48 int get() const { return v; }
49 eOriginalNetworkID(int i): v(i) { }
50 eOriginalNetworkID(): v(-1) { }
51 bool operator == (const eOriginalNetworkID &c) const { return v == c.v; }
52 bool operator != (const eOriginalNetworkID &c) const { return v != c.v; }
53 bool operator < (const eOriginalNetworkID &c) const { return v < c.v; }
54 bool operator > (const eOriginalNetworkID &c) const { return v > c.v; }
62 int get() const { return v; }
63 eDVBNamespace(int i): v(i) { }
64 eDVBNamespace(): v(-1) { }
65 bool operator == (const eDVBNamespace &c) const { return v == c.v; }
66 bool operator != (const eDVBNamespace &c) const { return v != c.v; }
67 bool operator < (const eDVBNamespace &c) const { return v < c.v; }
68 bool operator > (const eDVBNamespace &c) const { return v > c.v; }
73 eDVBNamespace dvbnamespace;
74 eTransportStreamID transport_stream_id;
75 eOriginalNetworkID original_network_id;
76 bool operator<(const eDVBChannelID &c) const
78 if (dvbnamespace < c.dvbnamespace)
80 else if (dvbnamespace == c.dvbnamespace)
82 if (original_network_id < c.original_network_id)
84 else if (original_network_id == c.original_network_id)
85 if (transport_stream_id < c.transport_stream_id)
90 eDVBChannelID(eDVBNamespace dvbnamespace, eTransportStreamID tsid, eOriginalNetworkID onid):
91 dvbnamespace(dvbnamespace), transport_stream_id(tsid), original_network_id(onid)
95 dvbnamespace(-1), transport_stream_id(-1), original_network_id(-1)
100 return (dvbnamespace != -1) && (transport_stream_id != -1) && (original_network_id != -1);
104 struct eServiceReferenceDVB: public eServiceReference
106 int getServiceType() const { return data[0]; }
107 void setServiceType(int service_type) { data[0]=service_type; }
109 eServiceID getServiceID() const { return eServiceID(data[1]); }
110 void setServiceID(eServiceID service_id) { data[1]=service_id.get(); }
112 eTransportStreamID getTransportStreamID() const { return eTransportStreamID(data[2]); }
113 void setTransportStreamID(eTransportStreamID transport_stream_id) { data[2]=transport_stream_id.get(); }
115 eOriginalNetworkID getOriginalNetworkID() const { return eOriginalNetworkID(data[3]); }
116 void setOriginalNetworkID(eOriginalNetworkID original_network_id) { data[3]=original_network_id.get(); }
118 eDVBNamespace getDVBNamespace() const { return eDVBNamespace(data[4]); }
119 void setDVBNamespace(eDVBNamespace dvbnamespace) { data[4]=dvbnamespace.get(); }
121 eServiceReferenceDVB(eDVBNamespace dvbnamespace, eTransportStreamID transport_stream_id, eOriginalNetworkID original_network_id, eServiceID service_id, int service_type)
122 :eServiceReference(eServiceReference::idDVB, 0)
124 setTransportStreamID(transport_stream_id);
125 setOriginalNetworkID(original_network_id);
126 setDVBNamespace(dvbnamespace);
127 setServiceID(service_id);
128 setServiceType(service_type);
131 void set(const eDVBChannelID &chid)
133 setDVBNamespace(chid.dvbnamespace);
134 setOriginalNetworkID(chid.original_network_id);
135 setTransportStreamID(chid.transport_stream_id);
138 void getChannelID(eDVBChannelID &chid)
140 chid = eDVBChannelID(getDVBNamespace(), getTransportStreamID(), getOriginalNetworkID());
143 eServiceReferenceDVB()
144 :eServiceReference(eServiceReference::idDVB, 0)
152 class iDVBFrontendParameters;
154 class iDVBChannelList: public iObject
157 virtual RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm)=0;
160 class iDVBResourceManager: public iObject
164 solange rumloopen bis eine resource gefunden wurde, die eine frequenz
167 wenn natuerlich sowas schon vorhanden ist, dann einfach ne ref darauf
168 geben. (zwei services auf dem gleichen transponder teilen sich einen
171 virtual RESULT setChannelList(iDVBChannelList *list)=0;
172 virtual RESULT getChannelList(ePtr<iDVBChannelList> &list)=0;
173 virtual RESULT allocateChannel(const eDVBChannelID &channel, ePtr<iDVBChannel> &channel)=0;
174 virtual RESULT allocateRawChannel(ePtr<iDVBChannel> &channel)=0;
175 virtual RESULT allocatePVRChannel(int caps)=0;
178 class SatelliteDeliverySystemDescriptor;
179 class CableDeliverySystemDescriptor;
180 class TerrestrialDeliverySystemDescriptor;
182 struct eDVBFrontendParametersSatellite
187 Horizontal, Vertical, CircularLeft, CircularRight
199 fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
202 unsigned int frequency, symbol_rate;
203 int polarisation, fec, inversion, orbital_position;
205 void set(const SatelliteDeliverySystemDescriptor &);
208 struct eDVBFrontendParametersCable
210 unsigned int frequency, symbol_rate;
211 int modulation, inversion, fec_inner;
212 void set(const CableDeliverySystemDescriptor &);
215 struct eDVBFrontendParametersTerrestrial
218 void set(const TerrestrialDeliverySystemDescriptor &);
221 class iDVBFrontendParameters: public iObject
224 virtual RESULT getSystem(int &type) const = 0;
225 virtual RESULT getDVBS(eDVBFrontendParametersSatellite &p) const = 0;
226 virtual RESULT getDVBC(eDVBFrontendParametersCable &p) const = 0;
227 virtual RESULT getDVBT(eDVBFrontendParametersTerrestrial &p) const = 0;
229 virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &diff) const = 0;
230 virtual RESULT getHash(unsigned long &hash) const = 0;
233 #define MAX_DISEQC_LENGTH 16
235 struct eDVBDiseqcCommand
238 __u8 data[MAX_DISEQC_LENGTH];
241 class iDVBSatelliteEquipmentControl;
243 class iDVBFrontend: public iObject
247 feSatellite, feCable, feTerrestrial
249 virtual RESULT getFrontendType(int &type)=0;
250 virtual RESULT tune(const iDVBFrontendParameters &where)=0;
251 virtual RESULT connectStateChange(const Slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection)=0;
258 virtual RESULT getState(int &state)=0;
262 virtual RESULT setTone(int tone)=0;
264 voltageOff, voltage13, voltage18
266 virtual RESULT setVoltage(int voltage)=0;
267 virtual RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc)=0;
268 virtual RESULT setSEC(iDVBSatelliteEquipmentControl *sec)=0;
271 class iDVBSatelliteEquipmentControl: public iObject
274 #if HAVE_DVB_API_VERSION < 3
275 virtual RESULT prepare(iDVBFrontend &frontend, FrontendParameters &parm, eDVBFrontendParametersSatellite &sat)=0;
277 virtual RESULT prepare(iDVBFrontend &frontend, struct dvb_frontend_parameters &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;