+ virtual RESULT getLength(pts_t &SWIG_OUTPUT)=0;
+ virtual RESULT seekTo(pts_t to)=0;
+ virtual RESULT seekRelative(int direction, pts_t to)=0;
+ virtual RESULT getPlayPosition(pts_t &SWIG_OUTPUT)=0;
+ /* if you want to do several seeks in a row, you can enable the trickmode.
+ audio will be switched off, sync will be disabled etc. */
+ virtual RESULT setTrickmode(int trick=0)=0;
+ virtual RESULT isCurrentlySeekable()=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iSeekableService>, iSeekableServicePtr);
+
+struct iAudioTrackInfo
+{
+#ifndef SWIG
+ std::string m_description;
+ std::string m_language; /* iso639 */
+ int m_pid; /* for association with the stream. */
+#endif
+ std::string getDescription() { return m_description; }
+ std::string getLanguage() { return m_language; }
+ int getPID() { return m_pid; }
+};
+SWIG_ALLOW_OUTPUT_SIMPLE(iAudioTrackInfo);
+
+SWIG_IGNORE(iAudioTrackSelection);
+class iAudioTrackSelection: public iObject
+{
+#ifdef SWIG
+ iAudioTrackSelection();
+ ~iAudioTrackSelection();
+#endif
+public:
+ virtual int getNumberOfTracks()=0;
+ virtual RESULT selectTrack(unsigned int i)=0;
+ virtual SWIG_VOID(RESULT) getTrackInfo(struct iAudioTrackInfo &SWIG_OUTPUT, unsigned int n)=0;
+ virtual int getCurrentTrack()=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iAudioTrackSelection>, iAudioTrackSelectionPtr);
+
+class iAudioChannelSelection_ENUMS
+{
+#ifdef SWIG
+ iAudioChannelSelection_ENUMS();
+ ~iAudioChannelSelection_ENUMS();
+#endif
+public:
+ enum { LEFT, STEREO, RIGHT };
+};
+
+SWIG_IGNORE(iAudioChannelSelection);
+class iAudioChannelSelection: public iAudioChannelSelection_ENUMS, public iObject
+{
+#ifdef SWIG
+ iAudioChannelSelection();
+ ~iAudioChannelSelection();
+#endif
+public:
+ virtual int getCurrentChannel()=0;
+ virtual RESULT selectChannel(int i)=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iAudioChannelSelection>, iAudioChannelSelectionPtr);
+
+SWIG_IGNORE(iAudioDelay);
+class iAudioDelay: public iObject
+{
+#ifdef SWIG
+ iAudioDelay();
+ ~iAudioDelay();
+#endif
+public:
+ virtual int getAC3Delay()=0;
+ virtual int getPCMDelay()=0;
+ virtual void setAC3Delay(int)=0;
+ virtual void setPCMDelay(int)=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iAudioDelay>, iAudioDelayPtr);
+
+class iRdsDecoder_ENUMS
+{
+#ifdef SWIG
+ iRdsDecoder_ENUMS();
+ ~iRdsDecoder_ENUMS();
+#endif
+public:
+ enum { RadioText, RtpText };
+};
+
+SWIG_IGNORE(iRdsDecoder);
+class iRdsDecoder: public iObject, public iRdsDecoder_ENUMS
+{
+#ifdef SWIG
+ iRdsDecoder();
+ ~iRdsDecoder();
+#endif
+public:
+ virtual std::string getText(int x=RadioText)=0;
+ virtual void showRassSlidePicture()=0;
+ virtual void showRassInteractivePic(int page, int subpage)=0;
+ virtual SWIG_PYOBJECT(ePyObject) getRassInteractiveMask()=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iRdsDecoder>, iRdsDecoderPtr);
+
+SWIG_IGNORE(iSubserviceList);
+class iSubserviceList: public iObject
+{
+#ifdef SWIG
+ iSubserviceList();
+ ~iSubserviceList();
+#endif
+public:
+ virtual int getNumberOfSubservices()=0;
+ virtual SWIG_VOID(RESULT) getSubservice(eServiceReference &SWIG_OUTPUT, unsigned int n)=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iSubserviceList>, iSubserviceListPtr);
+
+SWIG_IGNORE(iTimeshiftService);
+class iTimeshiftService: public iObject
+{
+#ifdef SWIG
+ iTimeshiftService();
+ ~iTimeshiftService();
+#endif
+public:
+ virtual RESULT startTimeshift()=0;
+ virtual RESULT stopTimeshift()=0;
+
+ virtual int isTimeshiftActive()=0;
+ /* this essentially seeks to the relative end of the timeshift buffer */
+ virtual RESULT activateTimeshift()=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iTimeshiftService>, iTimeshiftServicePtr);
+
+ /* not related to eCueSheet */
+
+class iCueSheet_ENUMS
+{
+#ifdef SWIG
+ iCueSheet_ENUMS();
+ ~iCueSheet_ENUMS();
+#endif
+public:
+ enum { cutIn = 0, cutOut = 1, cutMark = 2 };
+};
+
+SWIG_IGNORE(iCueSheet);
+class iCueSheet: public iCueSheet_ENUMS, public iObject
+{
+#ifdef SWIG
+ iCueSheet();
+ ~iCueSheet();
+#endif
+public:
+ /* returns a list of (pts, what)-tuples */
+ virtual PyObject *getCutList() = 0;
+ virtual void setCutList(SWIG_PYOBJECT(ePyObject) list) = 0;
+ virtual void setCutListEnable(int enable) = 0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iCueSheet>, iCueSheetPtr);
+
+class eWidget;
+class PyList;
+
+SWIG_IGNORE(iSubtitleOutput);
+class iSubtitleOutput: public iObject
+{
+public:
+ virtual RESULT enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) entry)=0;
+ virtual RESULT disableSubtitles(eWidget *parent)=0;
+ virtual PyObject *getSubtitleList()=0;
+ virtual PyObject *getCachedSubtitle()=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iSubtitleOutput>, iSubtitleOutputPtr);
+
+SWIG_IGNORE(iMutableServiceList);
+class iMutableServiceList: public iObject
+{
+#ifdef SWIG
+ iMutableServiceList();
+ ~iMutableServiceList();
+#endif
+public:
+ /* flush changes */
+ virtual RESULT flushChanges()=0;
+ /* adds a service to a list */
+ virtual RESULT addService(eServiceReference &ref, eServiceReference before=eServiceReference())=0;
+ /* removes a service from a list */
+ virtual RESULT removeService(eServiceReference &ref)=0;
+ /* moves a service in a list, only if list suppports a specific sort method. */
+ /* pos is the new, absolute position from 0..size-1 */
+ virtual RESULT moveService(eServiceReference &ref, int pos)=0;
+ /* set name of list, for bouquets this is the visible bouquet name */
+ virtual RESULT setListName(const std::string &name)=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iMutableServiceList>, iMutableServiceListPtr);
+
+SWIG_IGNORE(iListableService);
+class iListableService: public iObject
+{
+#ifdef SWIG
+ iListableService();
+ ~iListableService();
+#endif
+public:
+#ifndef SWIG
+ /* legacy interface: get a list */
+ virtual RESULT getContent(std::list<eServiceReference> &list, bool sorted=false)=0;
+#endif
+ virtual PyObject *getContent(const char* format, bool sorted=false)=0;
+
+ /* new, shiny interface: streaming. */
+ virtual SWIG_VOID(RESULT) getNext(eServiceReference &SWIG_OUTPUT)=0;
+
+ /* use this for sorting. output is not sorted because of either
+ - performance reasons: the whole list must be buffered or
+ - the interface would be restricted to a list. streaming
+ (as well as a future "active" extension) won't be possible.
+ */
+ virtual int compareLessEqual(const eServiceReference &, const eServiceReference &)=0;
+
+ virtual SWIG_VOID(RESULT) startEdit(ePtr<iMutableServiceList> &SWIG_OUTPUT)=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iListableService>, iListableServicePtr);
+
+#ifndef SWIG
+ /* a helper class which can be used as argument to stl's sort(). */
+class iListableServiceCompare
+{
+ ePtr<iListableService> m_list;
+public:
+ iListableServiceCompare(iListableService *list): m_list(list) { }
+ bool operator()(const eServiceReference &a, const eServiceReference &b)