tsmpegdecoder: set audio type
[enigma2.git] / lib / dvb / idvb.h
index 6b657119c4a73868e00187eb44c5a1d651bda63e..699474d3981593638e5e93b628ac287c98ff9036 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/dvb/frontend.h>
 #define FRONTENDPARAMETERS struct dvb_frontend_parameters
 #endif
+#include <lib/dvb/frontendparms.h>
 #include <lib/base/object.h>
 #include <lib/base/ebase.h>
 #include <lib/service/service.h>
@@ -21,13 +22,23 @@ struct eBouquet
        std::string m_path;
        typedef std::list<eServiceReference> list;
        list m_services;
-// the following three methods are implemented in db.cpp
+// the following four methods are implemented in db.cpp
+       RESULT flushChanges();
        RESULT addService(const eServiceReference &);
        RESULT removeService(const eServiceReference &);
        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:
@@ -196,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<int> m_ca;
        std::map<int,int> m_cache;
@@ -266,105 +279,13 @@ public:
        
        virtual RESULT addService(const eServiceReferenceDVB &service, eDVBService *service)=0;
        virtual RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service)=0;
+       virtual RESULT flush()=0;
 
        virtual RESULT getBouquet(const eServiceReference &ref,  eBouquet* &bouquet)=0;
 
        virtual RESULT startQuery(ePtr<iDVBChannelListQuery> &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:
@@ -424,12 +345,16 @@ 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<iDVBFrontendParameters> &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;
 };
 
 struct eDVBCIRouting
@@ -469,7 +394,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
 {
@@ -484,9 +410,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;