X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/5a00da9dd62f3f51c50287d218374ad18e49761a..0b5125e1eb81ed8aa17f056f7f46f75efc4d0964:/lib/service/iservice.h diff --git a/lib/service/iservice.h b/lib/service/iservice.h index 5a5a6cee..c477f11d 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -2,6 +2,7 @@ #define __lib_dvb_iservice_h #include +#include #include #include #include @@ -37,7 +38,9 @@ public: flagDirectory=isDirectory|mustDescent|canDescent, shouldSort=8, // should be ASCII-sorted according to service_name. great for directories. hasSortKey=16, // has a sort key in data[3]. not having a sort key implies 0. - sort1=32 // sort key is 1 instead of 0 + sort1=32, // sort key is 1 instead of 0 + isMarker=64, // Marker + isGroup=128 // is a group of services }; int flags; // flags will NOT be compared. @@ -50,6 +53,13 @@ public: std::string getPath() { return path; } void setPath( const std::string &n ) { path=n; } + unsigned int getUnsignedData(unsigned int num) const + { + if ( num < sizeof(data)/sizeof(int) ) + return data[num]; + return 0; + } + int getData(unsigned int num) const { if ( num < sizeof(data)/sizeof(int) ) @@ -57,6 +67,12 @@ public: return 0; } + void setUnsignedData(unsigned int num, unsigned int val) + { + if ( num < sizeof(data)/sizeof(int) ) + data[num] = val; + } + void setData(unsigned int num, int val) { if ( num < sizeof(data)/sizeof(int) ) @@ -68,7 +84,7 @@ public: #ifndef SWIG std::string name; #endif - std::string getName() { return name; } + std::string getName() const { return name; } void setName( const std::string &n ) { name=n; } eServiceReference() @@ -122,14 +138,19 @@ public: data[3]=data3; data[4]=data4; } + operator bool() const + { + return valid(); + } +#endif eServiceReference(int type, int flags, const std::string &path) : type(type), flags(flags), path(path) { memset(data, 0, sizeof(data)); } -#endif eServiceReference(const std::string &string); std::string toString() const; + std::string toCompareString() const; bool operator==(const eServiceReference &c) const { if (type != c.type) @@ -153,10 +174,6 @@ public: return r < 0; return path < c.path; } - operator bool() const - { - return valid(); - } int valid() const { @@ -166,6 +183,24 @@ public: SWIG_ALLOW_OUTPUT_SIMPLE(eServiceReference); +extern PyObject *New_eServiceReference(const eServiceReference &ref); // defined in enigma_python.i + +#ifndef SWIG +#ifdef PYTHON_REFCOUNT_DEBUG +inline ePyObject Impl_New_eServiceReference(const char* file, int line, const eServiceReference &ref) +{ + return ePyObject(New_eServiceReference(ref), file, line); +} +#define NEW_eServiceReference(ref) Impl_New_eServiceReference(__FILE__, __LINE__, ref) +#else +inline ePyObject Impl_New_eServiceReference(const eServiceReference &ref) +{ + return New_eServiceReference(ref); +} +#define NEW_eServiceReference(ref) Impl_New_eServiceReference(ref) +#endif +#endif // SWIG + typedef long long pts_t; /* the reason we have the servicereference as additional argument is @@ -189,6 +224,9 @@ typedef long long pts_t; Hide the result only if there is another way to check for failure! */ +class eServiceEvent; + +SWIG_IGNORE(iStaticServiceInformation); class iStaticServiceInformation: public iObject { #ifdef SWIG @@ -197,84 +235,202 @@ class iStaticServiceInformation: public iObject #endif public: virtual SWIG_VOID(RESULT) getName(const eServiceReference &ref, std::string &SWIG_OUTPUT)=0; - + // doesn't need to be implemented, should return -1 then. virtual int getLength(const eServiceReference &ref); virtual SWIG_VOID(RESULT) getEvent(const eServiceReference &ref, ePtr &SWIG_OUTPUT, time_t start_time=-1); // returns true when not implemented - virtual bool isPlayable(const eServiceReference &ref, const eServiceReference &ignore); + virtual int isPlayable(const eServiceReference &ref, const eServiceReference &ignore, bool simulate=false); virtual int getInfo(const eServiceReference &ref, int w); virtual std::string getInfoString(const eServiceReference &ref,int w); -}; + virtual PyObject *getInfoObject(const eServiceReference &ref, int w); -TEMPLATE_TYPEDEF(ePtr, iStaticServiceInformationPtr); - -TEMPLATE_TYPEDEF(ePtr, eServiceEventPtr); + virtual int setInfo(const eServiceReference &ref, int w, int v); + virtual int setInfoString(const eServiceReference &ref, int w, const char *v); +}; +SWIG_TEMPLATE_TYPEDEF(ePtr, iStaticServiceInformationPtr); -class iServiceInformation: public iObject +class iServiceInformation_ENUMS { #ifdef SWIG - iServiceInformation(); - ~iServiceInformation(); + iServiceInformation_ENUMS(); + ~iServiceInformation_ENUMS(); #endif public: - virtual SWIG_VOID(RESULT) getName(std::string &SWIG_OUTPUT)=0; - virtual SWIG_VOID(RESULT) getEvent(ePtr &SWIG_OUTPUT, int nownext); + enum { + sIsCrypted, /* is encrypted (no indication if decrypt was possible) */ + sAspect, /* aspect ratio: 0=4:3, 1=16:9, 2=whatever we need */ + sFrameRate, /* frame rate */ + sProgressive, /* 0 = interlaced, 1 = progressive */ + sIsMultichannel, /* multichannel *available* (probably not selected) */ - enum { - sIsCrypted, /* is encrypted (no indication if decrypt was possible) */ - sAspect, /* aspect ratio: 0=4:3, 1=16:9, 2=whatever we need */ - sIsMultichannel, /* multichannel *available* (probably not selected) */ - /* "user serviceable info" - they are not reliable. Don't use them for anything except the service menu! - that's also the reason why they are so globally defined. - - + that's also the reason why they are so globally defined. again - if somebody EVER tries to use this information for anything else than simply displaying it, i will change this to return a user-readable text like "zero x zero three three" (and change the - exact spelling in every version) to stop that! - */ + exact spelling in every version) to stop that! */ + sVideoPID, sAudioPID, sPCRPID, sPMTPID, sTXTPID, - + sSID, sONID, sTSID, sNamespace, sProvider, - + sDescription, - sTimeCreate, // unix time or string + sServiceref, + sTimeCreate, /* unix time or string */ + sFileSize, + + sCAIDs, + sVideoType, /* MPEG2 MPEG4 */ + + sTags, /* space seperated list of tags */ + + sDVBState, /* states as defined in pmt handler (as events there) */ + + sVideoHeight, + sVideoWidth, + + sTransponderData, /* transponderdata as python dict */ + + sCurrentChapter, + sCurrentTitle, + sTotalChapters, + sTotalTitles, + + sTagTitle, + sTagTitleSortname, + sTagArtist, + sTagArtistSortname, + sTagAlbum, + sTagAlbumSortname, + sTagComposer, + sTagDate, + sTagGenre, + sTagComment, + sTagExtendedComment, + sTagTrackNumber, + sTagTrackCount, + sTagAlbumVolumeNumber, + sTagAlbumVolumeCount, + sTagLocation, + sTagHomepage, + sTagDescription, + sTagVersion, + sTagISRC, + sTagOrganization, + sTagCopyright, + sTagCopyrightURI, + sTagContact, + sTagLicense, + sTagLicenseURI, + sTagPerformer, + sTagCodec, + sTagVideoCodec, + sTagAudioCodec, + sTagBitrate, + sTagNominalBitrate, + sTagMinimumBitrate, + sTagMaximumBitrate, + sTagSerial, + sTagEncoder, + sTagEncoderVersion, + sTagTrackGain, + sTagTrackPeak, + sTagAlbumGain, + sTagAlbumPeak, + sTagReferenceLevel, + sTagLanguageCode, + sTagImage, + sTagPreviewImage, + sTagAttachment, + sTagBeatsPerMinute, + sTagKeywords, + sTagCRC, + sTagChannelMode, + + sUser = 0x100 + }; + enum { + resNA = -1, + resIsString = -2, + resIsPyObject = -3 }; - enum { resNA = -1, resIsString = -2 }; +}; + +/* some words to structs like struct iServiceInformation_ENUMS +For some classes we need in python just the SmartPointer Variants. +So we prevent building wrapper classes for the non smart pointer classes with the SWIG_IGNORE makro. +But now we have the problem that swig do not export enums for smart pointer classes (i dont know why). +So we move all enum's to own classes (with _ENUMS as name ending) and let our real +class inherit from the *_ENUMS class. This *_ENUMS classes are normally exportet via swig to python. +But in the python code we doesn't like to write iServiceInformation_ENUMS.sVideoType.... +we like to write iServiceInformation.sVideoType. +So until swig have no Solution for this Problem we call in lib/python/Makefile.am a python script named +enigma_py_patcher.py to remove the "_ENUMS" strings in enigma.py at all needed locations. */ + +SWIG_IGNORE(iServiceInformation); +class iServiceInformation: public iServiceInformation_ENUMS, public iObject +{ +#ifdef SWIG + iServiceInformation(); + ~iServiceInformation(); +#endif +public: + virtual SWIG_VOID(RESULT) getName(std::string &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) getEvent(ePtr &SWIG_OUTPUT, int nownext); virtual int getInfo(int w); virtual std::string getInfoString(int w); -}; + virtual PyObject *getInfoObject(int w); -TEMPLATE_TYPEDEF(ePtr, iServiceInformationPtr); + virtual int setInfo(int w, int v); + virtual int setInfoString(int w, const char *v); +}; +SWIG_TEMPLATE_TYPEDEF(ePtr, iServiceInformationPtr); -class iFrontendStatusInformation: public iObject +class iFrontendInformation_ENUMS { #ifdef SWIG - iFrontendStatusInformation(); - ~iFrontendStatusInformation(); + iFrontendInformation_ENUMS(); + ~iFrontendInformation_ENUMS(); #endif public: enum { bitErrorRate, signalPower, - signalQuality + signalQuality, + lockState, + syncState, + frontendNumber, + signalQualitydB, }; - virtual int getFrontendInfo(int w)=0; }; -TEMPLATE_TYPEDEF(ePtr, iFrontendStatusInformationPtr); +SWIG_IGNORE(iFrontendInformation); +class iFrontendInformation: public iFrontendInformation_ENUMS, public iObject +{ +#ifdef SWIG + iFrontendInformation(); + ~iFrontendInformation(); +#endif +public: + virtual int getFrontendInfo(int w)=0; + virtual PyObject *getFrontendData()=0; + virtual PyObject *getFrontendStatus()=0; + virtual PyObject *getTransponderData(bool original)=0; + virtual PyObject *getAll(bool original)=0; // a sum of getFrontendData/Status/TransponderData +}; +SWIG_TEMPLATE_TYPEDEF(ePtr, iFrontendInformationPtr); +SWIG_IGNORE(iPauseableService); class iPauseableService: public iObject { #ifdef SWIG @@ -282,17 +438,29 @@ class iPauseableService: public iObject ~iPausableService(); #endif public: + + /* this will set the *state* directly. So just call a SINGLE function of those at a time. */ virtual RESULT pause()=0; virtual RESULT unpause()=0; - + /* hm. */ virtual RESULT setSlowMotion(int ratio=0)=0; virtual RESULT setFastForward(int ratio=0)=0; }; +SWIG_TEMPLATE_TYPEDEF(ePtr, iPauseableServicePtr); -TEMPLATE_TYPEDEF(ePtr, iPauseableServicePtr); +class iSeekableService_ENUMS +{ +#ifdef SWIG + iSeekableService_ENUMS(); + ~iSeekableService_ENUMS(); +#endif +public: + enum { dirForward = +1, dirBackward = -1 }; +}; -class iSeekableService: public iObject +SWIG_IGNORE(iSeekableService); +class iSeekableService: public iSeekableService_ENUMS, public iObject { #ifdef SWIG iSeekableService(); @@ -301,34 +469,31 @@ class iSeekableService: public iObject public: virtual RESULT getLength(pts_t &SWIG_OUTPUT)=0; virtual RESULT seekTo(pts_t to)=0; - enum { dirForward = +1, dirBackward = -1 }; 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. + /* 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; + virtual RESULT seekChapter(int) { return -1; } + virtual RESULT seekTitle(int) { return -1; } }; - -TEMPLATE_TYPEDEF(ePtr, iSeekableServicePtr); +SWIG_TEMPLATE_TYPEDEF(ePtr, iSeekableServicePtr); struct iAudioTrackInfo { -#ifdef SWIG -private: - iAudioTrackInfo(); - ~iAudioTrackInfo(); -public: -#endif #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 @@ -339,10 +504,74 @@ 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, 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, iAudioChannelSelectionPtr); -TEMPLATE_TYPEDEF(ePtr, iAudioTrackSelectionPtr); +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, 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, iRdsDecoderPtr); + +SWIG_IGNORE(iSubserviceList); class iSubserviceList: public iObject { #ifdef SWIG @@ -353,9 +582,9 @@ public: virtual int getNumberOfSubservices()=0; virtual SWIG_VOID(RESULT) getSubservice(eServiceReference &SWIG_OUTPUT, unsigned int n)=0; }; +SWIG_TEMPLATE_TYPEDEF(ePtr, iSubserviceListPtr); -TEMPLATE_TYPEDEF(ePtr, iSubserviceListPtr); - +SWIG_IGNORE(iTimeshiftService); class iTimeshiftService: public iObject { #ifdef SWIG @@ -365,60 +594,55 @@ class iTimeshiftService: public iObject 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, iTimeshiftServicePtr); -TEMPLATE_TYPEDEF(ePtr, iTimeshiftServicePtr); + /* not related to eCueSheet */ -class iPlayableService: public iObject +class iCueSheet_ENUMS { #ifdef SWIG - iPlayableService(); - ~iPlaybleService(); + iCueSheet_ENUMS(); + ~iCueSheet_ENUMS(); #endif - friend class iServiceHandler; public: - enum - { - evStart, - evEnd, - - evTuneFailed, - // when iServiceInformation is implemented: - evUpdatedEventInfo, - evUpdatedInfo, - - evEOF - }; - virtual RESULT connectEvent(const Slot2 &event, ePtr &connection)=0; - virtual RESULT start()=0; - virtual RESULT stop()=0; - virtual SWIG_VOID(RESULT) seek(ePtr &SWIG_OUTPUT)=0; - virtual SWIG_VOID(RESULT) pause(ePtr &SWIG_OUTPUT)=0; - virtual SWIG_VOID(RESULT) info(ePtr &SWIG_OUTPUT)=0; - virtual SWIG_VOID(RESULT) audioTracks(ePtr &SWIG_OUTPUT)=0; - virtual SWIG_VOID(RESULT) subServices(ePtr &SWIG_OUTPUT)=0; - virtual SWIG_VOID(RESULT) frontendStatusInfo(ePtr &SWIG_OUTPUT)=0; - virtual SWIG_VOID(RESULT) timeshift(ePtr &SWIG_OUTPUT)=0; + enum { cutIn = 0, cutOut = 1, cutMark = 2 }; }; -TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr); - -class iRecordableService: public iObject +SWIG_IGNORE(iCueSheet); +class iCueSheet: public iCueSheet_ENUMS, public iObject { #ifdef SWIG - iRecordableService(); - ~iRecordableService(); + iCueSheet(); + ~iCueSheet(); #endif public: - virtual RESULT prepare(const char *filename)=0; - virtual RESULT start()=0; - virtual RESULT stop()=0; + /* 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, iCueSheetPtr); -TEMPLATE_TYPEDEF(ePtr, iRecordableServicePtr); +class eWidget; +class PyList; -// TEMPLATE_TYPEDEF(std::list, eServiceReferenceList); +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, iSubtitleOutputPtr); +SWIG_IGNORE(iMutableServiceList); class iMutableServiceList: public iObject { #ifdef SWIG @@ -429,16 +653,18 @@ public: /* flush changes */ virtual RESULT flushChanges()=0; /* adds a service to a list */ - virtual RESULT addService(eServiceReference &ref)=0; + 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, iMutableServiceListPtr); -TEMPLATE_TYPEDEF(ePtr, iMutableServiceListPtr); - +SWIG_IGNORE(iListableService); class iListableService: public iObject { #ifdef SWIG @@ -446,23 +672,25 @@ class iListableService: public iObject ~iListableService(); #endif public: +#ifndef SWIG /* legacy interface: get a list */ - virtual RESULT getContent(std::list &list)=0; - + virtual RESULT getContent(std::list &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 &SWIG_OUTPUT)=0; }; - -TEMPLATE_TYPEDEF(ePtr, iListableServicePtr); +SWIG_TEMPLATE_TYPEDEF(ePtr, iListableServicePtr); #ifndef SWIG /* a helper class which can be used as argument to stl's sort(). */ @@ -478,6 +706,7 @@ public: }; #endif +SWIG_IGNORE(iServiceOfflineOperations); class iServiceOfflineOperations: public iObject { #ifdef SWIG @@ -487,15 +716,238 @@ class iServiceOfflineOperations: public iObject public: /* to delete a service, forever. */ virtual RESULT deleteFromDisk(int simulate=1)=0; - + /* for transferring a service... */ virtual SWIG_VOID(RESULT) getListOfFilenames(std::list &SWIG_OUTPUT)=0; + /* a blocking call to reindex a file */ + virtual int reindex() = 0; + // TODO: additional stuff, like a conversion interface? }; +SWIG_TEMPLATE_TYPEDEF(ePtr, iServiceOfflineOperationsPtr); + +SWIG_IGNORE(iStreamableService); +class iStreamableService: public iObject +{ +#ifdef SWIG + iStreamableService(); + ~iStreamableService(); +#endif +public: + /* returns a dict: + { "demux": , + "pids": [(x,type),(y,type),(z,type),..], + ... + } + with type being "video", "audio", "pmt", "pat"... + */ + virtual PyObject *getStreamingData()=0; +}; +SWIG_TEMPLATE_TYPEDEF(ePtr, iStreamableServicePtr); + +SWIG_IGNORE(iStreamedService); +class iStreamedService: public iObject +{ +#ifdef SWIG + iStreamedService(); + ~iStreamedService(); +#endif +public: + virtual PyObject *getBufferCharge()=0; + virtual int setBufferSize(int size)=0; +}; +SWIG_TEMPLATE_TYPEDEF(ePtr, iStreamedServicePtr); + +class iServiceKeys_ENUMS +{ +#ifdef SWIG + iServiceKeys_ENUMS(); + ~iServiceKeys_ENUMS(); +#endif +public: + enum { + keyLeft, + keyRight, + keyUp, + keyDown, + keyOk, + keyUser = 0x100 + }; +}; + +SWIG_IGNORE(iServiceKeys); +class iServiceKeys: public iServiceKeys_ENUMS, public iObject +{ +#ifdef SWIG + iServiceKeys(); + ~iServiceKeys(); +#endif +public: + virtual SWIG_VOID(RESULT) keyPressed(int key)=0; +}; +SWIG_TEMPLATE_TYPEDEF(ePtr, iServiceKeysPtr); + +class iPlayableService_ENUMS +{ +#ifdef SWIG + iPlayableService_ENUMS(); + ~iPlayableService_ENUMS(); +#endif +public: + enum { + /* these first two events are magical, and should only + be generated if you know what you're doing. */ + evStart, + evEnd, + + evTunedIn, + evTuneFailed, + + /* when iServiceInformation is implemented:*/ + evUpdatedEventInfo, + evUpdatedInfo, + + /* when seek() is implemented: */ + evSeekableStatusChanged, /* for example when timeshifting */ -TEMPLATE_TYPEDEF(ePtr, iServiceOfflineOperationsPtr); + evEOF, + evSOF, /* bounced against start of file (when seeking backwards) */ + /* when cueSheet is implemented */ + evCuesheetChanged, + + /* when rdsDecoder is implemented */ + evUpdatedRadioText, + evUpdatedRtpText, + + /* Radio Screenshow Support */ + evUpdatedRassSlidePic, + evUpdatedRassInteractivePicMask, + + evVideoSizeChanged, + evVideoFramerateChanged, + evVideoProgressiveChanged, + + evBuffering, + + evStopped, + + evUser = 0x100 + }; +}; + +SWIG_IGNORE(iPlayableService); +class iPlayableService: public iPlayableService_ENUMS, public iObject +{ +#ifdef SWIG + iPlayableService(); + ~iPlaybleService(); +#endif + friend class iServiceHandler; +public: +#ifndef SWIG + virtual RESULT connectEvent(const Slot2 &event, ePtr &connection)=0; +#endif + virtual RESULT start()=0; + virtual RESULT stop()=0; + /* might have to be changed... */ + virtual RESULT setTarget(int target)=0; + virtual SWIG_VOID(RESULT) seek(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) pause(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) info(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) audioTracks(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) audioChannel(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) subServices(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) frontendInfo(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) timeshift(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) cueSheet(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) subtitle(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) audioDelay(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) rdsDecoder(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) stream(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) streamed(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) keys(ePtr &SWIG_OUTPUT)=0; +}; +SWIG_TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr); + +class iRecordableService_ENUMS +{ +#ifdef SWIG + iRecordableService_ENUMS(); + ~iRecordableService_ENUMS(); +#endif +public: + enum { + evStart, + evEnd, + evTunedIn, + evTuneFailed, + evRecordRunning, + evRecordStopped, + evNewProgramInfo, + evRecordFailed, + evRecordWriteError, + evNewEventInfo + }; + enum { + NoError=0, + errOpenRecordFile=-1, + errNoDemuxAvailable=-2, + errNoTsRecorderAvailable=-3, + errDiskFull=-4, + errTuneFailed=-255, + errMisconfiguration = -256, + errNoResources = -257, + }; +}; + +SWIG_IGNORE(iRecordableService); +class iRecordableService: public iRecordableService_ENUMS, public iObject +{ +#ifdef SWIG + iRecordableService(); + ~iRecordableService(); +#endif +public: +#ifndef SWIG + virtual RESULT connectEvent(const Slot2 &event, ePtr &connection)=0; +#endif + virtual SWIG_VOID(RESULT) getError(int &SWIG_OUTPUT)=0; + virtual RESULT prepare(const char *filename, time_t begTime=-1, time_t endTime=-1, int eit_event_id=-1, const char *name=0, const char *descr=0, const char *tags=0)=0; + virtual RESULT prepareStreaming()=0; + virtual RESULT start(bool simulate=false)=0; + virtual RESULT stop()=0; + virtual SWIG_VOID(RESULT) frontendInfo(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) stream(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) subServices(ePtr &SWIG_OUTPUT)=0; +}; +SWIG_TEMPLATE_TYPEDEF(ePtr, iRecordableServicePtr); + +extern PyObject *New_iRecordableServicePtr(const ePtr &ref); // defined in enigma_python.i + +inline PyObject *PyFrom(ePtr &c) +{ + return New_iRecordableServicePtr(c); +} + +#ifndef SWIG +#ifdef PYTHON_REFCOUNT_DEBUG +inline ePyObject Impl_New_iRecordableServicePtr(const char* file, int line, const ePtr &ptr) +{ + return ePyObject(New_iRecordableServicePtr(ptr), file, line); +} +#define NEW_iRecordableServicePtr(ptr) Impl_New_iRecordableServicePtr(__FILE__, __LINE__, ptr) +#else +inline ePyObject Impl_New_iRecordableServicePtr(const ePtr &ptr) +{ + return New_iRecordableServicePtr(ptr); +} +#define NEW_iRecordableServicePtr(ptr) Impl_New_iRecordableServicePtr(ptr) +#endif +#endif // SWIG + +SWIG_IGNORE(iServiceHandler); class iServiceHandler: public iObject { #ifdef SWIG @@ -509,7 +961,6 @@ public: virtual SWIG_VOID(RESULT) info(const eServiceReference &, ePtr &SWIG_OUTPUT)=0; virtual SWIG_VOID(RESULT) offlineOperations(const eServiceReference &, ePtr &SWIG_OUTPUT)=0; }; - -TEMPLATE_TYPEDEF(ePtr, iServiceHandlerPtr); +SWIG_TEMPLATE_TYPEDEF(ePtr, iServiceHandlerPtr); #endif