+#endif
+};
+TEMPLATE_TYPEDEF(eUsePtr<iDVBChannel>, iDVBChannelPtr);
+
+#ifndef SWIG
+
+ /* 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<void, int> &event, ePtr<eConnection> &connection);
+
+ std::list<std::pair<pts_t,pts_t> > m_spans; /* begin, end */
+ std::list<std::pair<int, pts_t> > m_seek_requests; /* relative, delta */
+ pts_t m_skipmode_ratio;
+ Signal1<void,int> m_event;
+ ePtr<iDVBDemux> m_decoding_demux;
+ ePtr<iTSMPEGDecoder> m_decoder;