X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d6c68fa2ec0f3c8b6248444a7414942291b571e1..cfdc155f46f816c17d098ba0bb2a3bd2037e2f1e:/lib/dvb/idvb.h diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index f18d4f34..955688b9 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -21,11 +22,12 @@ struct eBouquet std::string m_filename; // without path.. just name typedef std::list list; list m_services; -// the following four methods are implemented in db.cpp +// the following five methods are implemented in db.cpp RESULT flushChanges(); RESULT addService(const eServiceReference &); RESULT removeService(const eServiceReference &); RESULT moveService(const eServiceReference &, unsigned int); + RESULT setListName(const std::string &name); }; /* these structures have by intention no operator int() defined. @@ -356,9 +358,10 @@ public: virtual RESULT setSecSequence(const eSecCommandList &list)=0; enum { - bitErrorRate, signalPower, signalQuality + bitErrorRate, signalPower, signalQuality, Locked, Synced }; virtual int readFrontendData(int type)=0; + virtual PyObject *readTransponderData(bool original)=0; virtual RESULT getData(int num, int &data)=0; virtual RESULT setData(int num, int val)=0; @@ -370,7 +373,7 @@ public: class iDVBSatelliteEquipmentControl: public iObject { public: - virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, eDVBFrontendParametersSatellite &sat, int frontend_id)=0; + virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int frontend_id)=0; virtual int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *fe, int frontend_id)=0; virtual void setRotorMoving(bool)=0; }; @@ -390,12 +393,13 @@ public: state_failed, /* tuning failed. */ state_unavailable, /* currently unavailable, will be back without further interaction */ state_ok, /* ok */ + state_last_instance, /* just one reference to this channel is left */ state_release /* channel is being shut down. */ }; enum { - evtEOF, evtFailed + evtEOF, evtSOF, evtFailed }; virtual RESULT connectStateChange(const Slot1 &stateChange, ePtr &connection)=0; virtual RESULT connectEvent(const Slot2 &eventChange, ePtr &connection)=0; @@ -412,6 +416,7 @@ public: /* direct frontend access for raw channels and/or status inquiries. */ virtual RESULT getFrontend(ePtr &frontend)=0; + virtual RESULT getCurrentFrontendParameters(ePtr &)=0; /* use count handling */ virtual void AddUse() = 0; @@ -419,8 +424,47 @@ public: }; /* signed, so we can express deltas. */ + typedef long long pts_t; +class iFilePushScatterGather; +class iTSMPEGDecoder; + + /* note that a cue sheet describes the logical positions. thus + everything is specified in pts and not file positions */ + + /* implemented in dvb.cpp */ +class eCueSheet: public iObject, public Object +{ + DECLARE_REF(eCueSheet); +public: + eCueSheet(); + + /* frontend */ + void seekTo(int relative, const pts_t &pts); + + void clear(); + void addSourceSpan(const pts_t &begin, const pts_t &end); + void commitSpans(); + + void setSkipmode(const pts_t &ratio); /* 90000 is 1:1 */ + void setDecodingDemux(iDVBDemux *demux, iTSMPEGDecoder *decoder); + + /* frontend and backend */ + eSingleLock m_lock; + + /* backend */ + enum { evtSeek, evtSkipmode, evtSpanChanged }; + RESULT connectEvent(const Slot1 &event, ePtr &connection); + + std::list > m_spans; /* begin, end */ + std::list > m_seek_requests; /* relative, delta */ + pts_t m_skipmode_ratio; + Signal1 m_event; + ePtr m_decoding_demux; + ePtr m_decoder; +}; + class iDVBPVRChannel: public iDVBChannel { public: @@ -430,18 +474,21 @@ public: }; /* FIXME: there are some very ugly buffer-end and ... related problems */ - /* so this is VERY UGLY. */ + /* so this is VERY UGLY. + + ok, it's going to get better. but still...*/ virtual RESULT playFile(const char *file) = 0; + virtual void stopFile() = 0; + + virtual void setCueSheet(eCueSheet *cuesheet) = 0; virtual RESULT getLength(pts_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, int mode) = 0; - virtual RESULT seekTo(iDVBDemux *decoding_demux, int relative, pts_t &pts) = 0; - virtual RESULT seekToPosition(iDVBDemux *decoding_demux, const off_t &pts) = 0; + /* skipping must be done with a cue sheet */ }; class iDVBSectionReader; @@ -507,6 +554,8 @@ public: virtual RESULT setZoom(int what)=0; virtual RESULT setTrickmode(int what) = 0; + + virtual RESULT getPTS(int what, pts_t &pts) = 0; }; #endif