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];
368 class iDVBSatelliteEquipmentControl;
370 class iDVBFrontend: public iObject
374 feSatellite, feCable, feTerrestrial
376 virtual RESULT getFrontendType(int &type)=0;
377 virtual RESULT tune(const iDVBFrontendParameters &where)=0;
378 virtual RESULT connectStateChange(const Slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection)=0;
385 virtual RESULT getState(int &state)=0;
389 virtual RESULT setTone(int tone)=0;
391 voltageOff, voltage13, voltage18
393 virtual RESULT setVoltage(int voltage)=0;
394 virtual RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc)=0;
395 virtual RESULT setSEC(iDVBSatelliteEquipmentControl *sec)=0;
398 class iDVBSatelliteEquipmentControl: public iObject
401 virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat)=0;
409 class iDVBChannel: public iObject
414 state_idle, /* not yet tuned */
415 state_tuning, /* currently tuning (first time) */
416 state_unavailable, /* currently unavailable, will be back without further interaction */
419 virtual RESULT connectStateChange(const Slot1<void,iDVBChannel*> &stateChange, ePtr<eConnection> &connection)=0;
420 virtual RESULT getState(int &state)=0;
426 virtual RESULT setCIRouting(const eDVBCIRouting &routing)=0;
427 virtual RESULT getDemux(ePtr<iDVBDemux> &demux)=0;
429 /* direct frontend access for raw channels and/or status inquiries. */
430 virtual RESULT getFrontend(ePtr<iDVBFrontend> &frontend)=0;
433 class iDVBSectionReader;
434 class iTSMPEGDecoder;
436 class iDVBDemux: public iObject
439 virtual RESULT createSectionReader(eMainloop *context, ePtr<iDVBSectionReader> &reader)=0;
440 virtual RESULT getMPEGDecoder(ePtr<iTSMPEGDecoder> &reader)=0;
443 class iTSMPEGDecoder: public iObject
446 enum { pidDisabled = -1 };
447 /** Set Displayed Video PID */
448 virtual RESULT setVideoPID(int vpid)=0;
450 enum { af_MPEG, af_AC3, af_DTS };
451 /** Set Displayed Audio PID and type */
452 virtual RESULT setAudioPID(int apid, int type)=0;
454 /** Set Sync mode to PCR */
455 virtual RESULT setSyncPCR(int pcrpid)=0;
456 enum { sm_Audio, sm_Video };
457 /** Set Sync mode to either audio or video master */
458 virtual RESULT setSyncMaster(int who)=0;
460 /** Apply settings */
461 virtual RESULT start()=0;
463 /** Freeze frame. Either continue decoding (without display) or halt. */
464 virtual RESULT freeze(int cont)=0;
465 /** Continue after freeze. */
466 virtual RESULT unfreeze()=0;
468 // stop on .. Picture
469 enum { spm_I, spm_Ref, spm_Any };
470 /** Stop on specific decoded picture. For I-Frame display. */
471 virtual RESULT setSinglePictureMode(int when)=0;
473 enum { pkm_B, pkm_PB };
474 /** Fast forward by skipping either B or P/B pictures */
475 virtual RESULT setPictureSkipMode(int what)=0;
477 /** Slow Motion by repeating pictures */
478 virtual RESULT setSlowMotion(int repeat)=0;
480 enum { zoom_Normal, zoom_PanScan, zoom_Letterbox, zoom_Fullscreen };
481 /** Set Zoom. mode *must* be fitting. */
482 virtual RESULT setZoom(int what)=0;