X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/059982cc102de394ac316abc3ee0806673d003d5..184706abfa809e8d8b6452a599313fe0e341c980:/lib/dvb/idvb.h diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index a23960af..119b6e37 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -9,6 +9,7 @@ #include #define FRONTENDPARAMETERS struct dvb_frontend_parameters #endif +#include #include #include #include @@ -28,7 +29,16 @@ struct eBouquet RESULT moveService(const eServiceReference &, unsigned int); }; - // bitte KEINE operator int() definieren, sonst bringt das ganze nix! + /* these structures have by intention no operator int() defined. + the reason of these structures is to avoid mixing for example + a onid and a tsid (as there's no general order for them). + + defining an operator int() would implicitely convert values + between them over the constructor with the int argument. + + 'explicit' doesn't here - eTransportStreamID(eOriginalNetworkID(n)) + would still work. */ + struct eTransportStreamID { private: @@ -197,6 +207,8 @@ public: std::string m_service_name, m_service_name_sort; std::string m_provider_name; + void genSortName(); + int m_flags; std::set m_ca; std::map m_cache; @@ -267,105 +279,13 @@ public: virtual RESULT addService(const eServiceReferenceDVB &service, eDVBService *service)=0; virtual RESULT getService(const eServiceReferenceDVB &reference, ePtr &service)=0; + virtual RESULT flush()=0; virtual RESULT getBouquet(const eServiceReference &ref, eBouquet* &bouquet)=0; virtual RESULT startQuery(ePtr &query, eDVBChannelQuery *query, const eServiceReference &source)=0; }; -class SatelliteDeliverySystemDescriptor; -class CableDeliverySystemDescriptor; -class TerrestrialDeliverySystemDescriptor; - -struct eDVBFrontendParametersSatellite -{ - struct Polarisation - { - enum { - Horizontal, Vertical, CircularLeft, CircularRight - }; - }; - struct Inversion - { - enum { - On, Off, Unknown - }; - }; - struct FEC - { - enum { - fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto - }; - }; - unsigned int frequency, symbol_rate; - int polarisation, fec, inversion, orbital_position; - - void set(const SatelliteDeliverySystemDescriptor &); -}; - -struct eDVBFrontendParametersCable -{ - unsigned int frequency, symbol_rate; - int modulation, inversion, fec_inner; - void set(const CableDeliverySystemDescriptor &); -}; - -struct eDVBFrontendParametersTerrestrial -{ - unsigned int frequency; - struct Bandwidth { - enum { Bw8MHz, Bw7MHz, Bw6MHz, BwAuto }; - }; - - struct FEC - { - enum { - fNone, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto - }; - }; - - struct TransmissionMode { - enum { - TM2k, TM8k, TMAuto - }; - }; - - struct GuardInterval { - enum { - GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto - }; - }; - - struct Hierarchy { - enum { - HNone, H1, H2, H4, HAuto - }; - }; - - struct Modulation { - enum { - QPSK, QAM16, Auto - }; - }; - - struct Inversion - { - enum { - On, Off, Unknown - }; - }; - - int bandwidth; - int code_rate_HP, code_rate_LP; - int modulation; - int transmission_mode; - int guard_interval; - int hierarchy; - int inversion; - - void set(const TerrestrialDeliverySystemDescriptor &); -}; - class iDVBFrontendParameters: public iObject { public: @@ -425,12 +345,17 @@ public: virtual RESULT setSecSequence(const eSecCommandList &list)=0; virtual RESULT getData(int num, int &data)=0; virtual RESULT setData(int num, int val)=0; + + /* 0 means: not compatible. other values are a priority. */ + virtual int isCompatibleWith(ePtr &feparm)=0; }; class iDVBSatelliteEquipmentControl: public iObject { public: - virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat)=0; + virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat, int frontend_id)=0; + virtual int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *fe, int frontend_id)=0; + virtual void setRotorMoving(bool)=0; }; struct eDVBCIRouting @@ -470,7 +395,8 @@ public: virtual void ReleaseUse() = 0; }; -typedef unsigned long long pts_t; + /* signed, so we can express deltas. */ +typedef long long pts_t; class iDVBPVRChannel: public iDVBChannel { @@ -485,9 +411,14 @@ public: virtual RESULT playFile(const char *file) = 0; virtual RESULT getLength(pts_t &pts) = 0; - virtual RESULT getCurrentPosition(pts_t &pos) = 0; - virtual RESULT seekTo(pts_t &pts) = 0; - virtual RESULT seekToPosition(int relative, const off_t &pts) = 0; + + /* we explicitely ask for the decoding demux here because a channel + can be shared between multiple decoders. + Of couse skipping doesn't make much sense + then, but getCurrentPosition does. */ + virtual RESULT getCurrentPosition(iDVBDemux *decoding_demux, pts_t &pos) = 0; + virtual RESULT seekTo(iDVBDemux *decoding_demux, int relative, pts_t &pts) = 0; + virtual RESULT seekToPosition(iDVBDemux *decoding_demux, const off_t &pts) = 0; }; class iDVBSectionReader;