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 SatelliteDeliverySystemDescriptor;
238 class CableDeliverySystemDescriptor;
239 class TerrestrialDeliverySystemDescriptor;
241 struct eDVBFrontendParametersSatellite
246 Horizontal, Vertical, CircularLeft, CircularRight
258 fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
261 unsigned int frequency, symbol_rate;
262 int polarisation, fec, inversion, orbital_position;
264 void set(const SatelliteDeliverySystemDescriptor &);
267 struct eDVBFrontendParametersCable
269 unsigned int frequency, symbol_rate;
270 int modulation, inversion, fec_inner;
271 void set(const CableDeliverySystemDescriptor &);
274 struct eDVBFrontendParametersTerrestrial
276 unsigned int frequency;
278 enum { Bw8MHz, Bw7MHz, Bw6MHz, BwAuto };
284 fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto
288 struct TransmissionMode {
294 struct GuardInterval {
296 GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto
302 HNone, H1, H2, H4, HAuto
320 int code_rate_HP, code_rate_LP;
322 int transmission_mode;
327 void set(const TerrestrialDeliverySystemDescriptor &);
330 class iDVBFrontendParameters: public iObject
333 virtual RESULT getSystem(int &type) const = 0;
334 virtual RESULT getDVBS(eDVBFrontendParametersSatellite &p) const = 0;
335 virtual RESULT getDVBC(eDVBFrontendParametersCable &p) const = 0;
336 virtual RESULT getDVBT(eDVBFrontendParametersTerrestrial &p) const = 0;
338 virtual RESULT calculateDifference(const iDVBFrontendParameters *parm, int &diff) const = 0;
339 virtual RESULT getHash(unsigned long &hash) const = 0;
342 #define MAX_DISEQC_LENGTH 16
344 struct eDVBDiseqcCommand
347 __u8 data[MAX_DISEQC_LENGTH];
348 #if HAVE_DVB_API_VERSION < 3
354 class iDVBSatelliteEquipmentControl;
356 class iDVBFrontend: public iObject
360 feSatellite, feCable, feTerrestrial
362 virtual RESULT getFrontendType(int &type)=0;
363 virtual RESULT tune(const iDVBFrontendParameters &where)=0;
364 virtual RESULT connectStateChange(const Slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection)=0;
371 virtual RESULT getState(int &state)=0;
375 virtual RESULT setTone(int tone)=0;
377 voltageOff, voltage13, voltage18
379 virtual RESULT setVoltage(int voltage)=0;
380 virtual RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc)=0;
381 virtual RESULT setSEC(iDVBSatelliteEquipmentControl *sec)=0;
384 class iDVBSatelliteEquipmentControl: public iObject
387 virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat)=0;
395 class iDVBChannel: public iObject
400 state_idle, /* not yet tuned */
401 state_tuning, /* currently tuning (first time) */
402 state_unavailable, /* currently unavailable, will be back without further interaction */
405 virtual RESULT connectStateChange(const Slot1<void,iDVBChannel*> &stateChange, ePtr<eConnection> &connection)=0;
406 virtual RESULT getState(int &state)=0;
412 virtual RESULT setCIRouting(const eDVBCIRouting &routing)=0;
413 virtual RESULT getDemux(ePtr<iDVBDemux> &demux)=0;
415 /* direct frontend access for raw channels and/or status inquiries. */
416 virtual RESULT getFrontend(ePtr<iDVBFrontend> &frontend)=0;
419 class iDVBSectionReader;
420 class iTSMPEGDecoder;
422 class iDVBDemux: public iObject
425 virtual RESULT createSectionReader(eMainloop *context, ePtr<iDVBSectionReader> &reader)=0;
426 virtual RESULT getMPEGDecoder(ePtr<iTSMPEGDecoder> &reader)=0;
429 class iTSMPEGDecoder: public iObject
432 enum { pidDisabled = -1 };
433 /** Set Displayed Video PID */
434 virtual RESULT setVideoPID(int vpid)=0;
436 enum { af_MPEG, af_AC3, af_DTS };
437 /** Set Displayed Audio PID and type */
438 virtual RESULT setAudioPID(int apid, int type)=0;
440 /** Set Sync mode to PCR */
441 virtual RESULT setSyncPCR(int pcrpid)=0;
442 enum { sm_Audio, sm_Video };
443 /** Set Sync mode to either audio or video master */
444 virtual RESULT setSyncMaster(int who)=0;
446 /** Apply settings */
447 virtual RESULT start()=0;
449 /** Freeze frame. Either continue decoding (without display) or halt. */
450 virtual RESULT freeze(int cont)=0;
451 /** Continue after freeze. */
452 virtual RESULT unfreeze()=0;
454 // stop on .. Picture
455 enum { spm_I, spm_Ref, spm_Any };
456 /** Stop on specific decoded picture. For I-Frame display. */
457 virtual RESULT setSinglePictureMode(int when)=0;
459 enum { pkm_B, pkm_PB };
460 /** Fast forward by skipping either B or P/B pictures */
461 virtual RESULT setPictureSkipMode(int what)=0;
463 /** Slow Motion by repeating pictures */
464 virtual RESULT setSlowMotion(int repeat)=0;
466 enum { zoom_Normal, zoom_PanScan, zoom_Letterbox, zoom_Fullscreen };
467 /** Set Zoom. mode *must* be fitting. */
468 virtual RESULT setZoom(int what)=0;