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) const
144 chid = eDVBChannelID(getDVBNamespace(), getTransportStreamID(), getOriginalNetworkID());
147 eServiceReferenceDVB()
148 :eServiceReference(eServiceReference::idDVB, 0)
154 ////////////////// TODO: we need an interface here, but what exactly?
157 // btw, still implemented in db.cpp. FIX THIS, TOO.
159 class eDVBChannelQuery;
161 class eDVBService: public iStaticServiceInformation
163 DECLARE_REF(eDVBService);
166 std::string m_service_name;
167 std::string m_provider_name;
171 std::map<int,int> m_cache;
172 virtual ~eDVBService();
174 eDVBService &operator=(const eDVBService &);
176 // iStaticServiceInformation
177 RESULT getName(const eServiceReference &ref, std::string &name);
180 int checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQuery &query);
187 class iDVBFrontendParameters;
189 class iDVBChannelListQuery: public iObject
192 virtual RESULT getNextResult(eServiceReferenceDVB &ref)=0;
195 class eDVBChannelQuery: public iObject
197 DECLARE_REF(eDVBChannelQuery);
214 std::string m_string;
216 eDVBChannelID m_channelid;
218 static RESULT compile(ePtr<eDVBChannelQuery> &res, std::string query);
220 ePtr<eDVBChannelQuery> m_p1, m_p2;
223 class iDVBChannelList: public iObject
226 virtual RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm)=0;
227 virtual RESULT removeChannel(const eDVBChannelID &id)=0;
229 virtual RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm)=0;
231 virtual RESULT addService(const eServiceReferenceDVB &service, eDVBService *service)=0;
232 virtual RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service)=0;
234 virtual RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query)=0;
237 class iDVBResourceManager: public iObject
241 solange rumloopen bis eine resource gefunden wurde, die eine frequenz
244 wenn natuerlich sowas schon vorhanden ist, dann einfach ne ref darauf
245 geben. (zwei services auf dem gleichen transponder teilen sich einen
248 virtual RESULT setChannelList(iDVBChannelList *list)=0;
249 virtual RESULT getChannelList(ePtr<iDVBChannelList> &list)=0;
250 virtual RESULT allocateChannel(const eDVBChannelID &channel, ePtr<iDVBChannel> &channel)=0;
251 virtual RESULT allocateRawChannel(ePtr<iDVBChannel> &channel)=0;
252 virtual RESULT allocatePVRChannel(int caps)=0;
255 class SatelliteDeliverySystemDescriptor;
256 class CableDeliverySystemDescriptor;
257 class TerrestrialDeliverySystemDescriptor;
259 struct eDVBFrontendParametersSatellite
264 Horizontal, Vertical, CircularLeft, CircularRight
276 fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
279 unsigned int frequency, symbol_rate;
280 int polarisation, fec, inversion, orbital_position;
282 void set(const SatelliteDeliverySystemDescriptor &);
285 struct eDVBFrontendParametersCable
287 unsigned int frequency, symbol_rate;
288 int modulation, inversion, fec_inner;
289 void set(const CableDeliverySystemDescriptor &);
292 struct eDVBFrontendParametersTerrestrial
294 unsigned int frequency;
296 enum { Bw8MHz, Bw7MHz, Bw6MHz, BwAuto };
302 fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
306 struct TransmissionMode {
312 struct GuardInterval {
314 GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto
320 HNone, H1, H2, H4, HAuto
338 int code_rate_HP, code_rate_LP;
340 int transmission_mode;
345 void set(const TerrestrialDeliverySystemDescriptor &);
348 class iDVBFrontendParameters: public iObject
351 virtual RESULT getSystem(int &type) const = 0;
352 virtual RESULT getDVBS(eDVBFrontendParametersSatellite &p) const = 0;
353 virtual RESULT getDVBC(eDVBFrontendParametersCable &p) const = 0;
354 virtual RESULT getDVBT(eDVBFrontendParametersTerrestrial &p) const = 0;
356 virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &diff) const = 0;
357 virtual RESULT getHash(unsigned long &hash) const = 0;
360 #define MAX_DISEQC_LENGTH 16
362 struct eDVBDiseqcCommand
365 __u8 data[MAX_DISEQC_LENGTH];
366 #if HAVE_DVB_API_VERSION < 3
372 class iDVBSatelliteEquipmentControl;
374 class iDVBFrontend: public iObject
378 feSatellite, feCable, feTerrestrial
380 virtual RESULT getFrontendType(int &type)=0;
381 virtual RESULT tune(const iDVBFrontendParameters &where)=0;
382 virtual RESULT connectStateChange(const Slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection)=0;
389 virtual RESULT getState(int &state)=0;
393 virtual RESULT setTone(int tone)=0;
395 voltageOff, voltage13, voltage18
397 virtual RESULT setVoltage(int voltage)=0;
398 virtual RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc)=0;
399 virtual RESULT setSEC(iDVBSatelliteEquipmentControl *sec)=0;
402 class iDVBSatelliteEquipmentControl: public iObject
405 virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat)=0;
413 class iDVBChannel: public iObject
418 state_idle, /* not yet tuned */
419 state_tuning, /* currently tuning (first time) */
420 state_unavailable, /* currently unavailable, will be back without further interaction */
423 virtual RESULT connectStateChange(const Slot1<void,iDVBChannel*> &stateChange, ePtr<eConnection> &connection)=0;
424 virtual RESULT getState(int &state)=0;
430 virtual RESULT setCIRouting(const eDVBCIRouting &routing)=0;
431 virtual RESULT getDemux(ePtr<iDVBDemux> &demux)=0;
433 /* direct frontend access for raw channels and/or status inquiries. */
434 virtual RESULT getFrontend(ePtr<iDVBFrontend> &frontend)=0;
437 class iDVBSectionReader;
438 class iTSMPEGDecoder;
440 class iDVBDemux: public iObject
443 virtual RESULT createSectionReader(eMainloop *context, ePtr<iDVBSectionReader> &reader)=0;
444 virtual RESULT getMPEGDecoder(ePtr<iTSMPEGDecoder> &reader)=0;
447 class iTSMPEGDecoder: public iObject
450 enum { pidDisabled = -1 };
451 /** Set Displayed Video PID */
452 virtual RESULT setVideoPID(int vpid)=0;
454 enum { af_MPEG, af_AC3, af_DTS };
455 /** Set Displayed Audio PID and type */
456 virtual RESULT setAudioPID(int apid, int type)=0;
458 /** Set Sync mode to PCR */
459 virtual RESULT setSyncPCR(int pcrpid)=0;
460 enum { sm_Audio, sm_Video };
461 /** Set Sync mode to either audio or video master */
462 virtual RESULT setSyncMaster(int who)=0;
464 /** Apply settings */
465 virtual RESULT start()=0;
467 /** Freeze frame. Either continue decoding (without display) or halt. */
468 virtual RESULT freeze(int cont)=0;
469 /** Continue after freeze. */
470 virtual RESULT unfreeze()=0;
472 // stop on .. Picture
473 enum { spm_I, spm_Ref, spm_Any };
474 /** Stop on specific decoded picture. For I-Frame display. */
475 virtual RESULT setSinglePictureMode(int when)=0;
477 enum { pkm_B, pkm_PB };
478 /** Fast forward by skipping either B or P/B pictures */
479 virtual RESULT setPictureSkipMode(int what)=0;
481 /** Slow Motion by repeating pictures */
482 virtual RESULT setSlowMotion(int repeat)=0;
484 enum { zoom_Normal, zoom_PanScan, zoom_Letterbox, zoom_Fullscreen };
485 /** Set Zoom. mode *must* be fitting. */
486 virtual RESULT setZoom(int what)=0;