X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/377d007c961ebd576ed9f2217fd54905bcc78fb1..2b557e7ef4b0518736c5162a501cd9bc743930b3:/lib/service/iservice.h diff --git a/lib/service/iservice.h b/lib/service/iservice.h index fb56175d..40997c02 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -38,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. @@ -51,13 +53,26 @@ public: std::string getPath() { return path; } void setPath( const std::string &n ) { path=n; } - unsigned int getData(unsigned int num) const + 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) ) + return data[num]; + 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) ) @@ -123,14 +138,15 @@ public: data[3]=data3; data[4]=data4; } +#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) @@ -169,6 +185,22 @@ 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 @@ -192,6 +224,8 @@ typedef long long pts_t; Hide the result only if there is another way to check for failure! */ +TEMPLATE_TYPEDEF(ePtr, eServiceEventPtr); + class iStaticServiceInformation: public iObject { #ifdef SWIG @@ -205,16 +239,17 @@ public: 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); virtual int getInfo(const eServiceReference &ref, int w); virtual std::string getInfoString(const eServiceReference &ref,int w); + + virtual int setInfo(const eServiceReference &ref, int w, int v); + virtual int setInfoString(const eServiceReference &ref, int w, const char *v); }; TEMPLATE_TYPEDEF(ePtr, iStaticServiceInformationPtr); -TEMPLATE_TYPEDEF(ePtr, eServiceEventPtr); - class iServiceInformation: public iObject { #ifdef SWIG @@ -261,35 +296,42 @@ public: sTracknumber, sGenre, sCAIDs, + sVideoType, // MPEG2 MPEG4 + + sTags, /* space seperated list of tags */ }; enum { resNA = -1, resIsString = -2, resIsPyObject = -3 }; virtual int getInfo(int w); virtual std::string getInfoString(int w); virtual PyObject *getInfoObject(int w); + + virtual int setInfo(int w, int v); + virtual int setInfoString(int w, const char *v); }; TEMPLATE_TYPEDEF(ePtr, iServiceInformationPtr); -class iFrontendStatusInformation: public iObject +class iFrontendInformation: public iObject { #ifdef SWIG - iFrontendStatusInformation(); - ~iFrontendStatusInformation(); + iFrontendInformation(); + ~iFrontendInformation(); #endif public: enum { bitErrorRate, signalPower, signalQuality, - LockState, - SyncState + lockState, + syncState, + frontendNumber }; virtual int getFrontendInfo(int w)=0; virtual PyObject *getFrontendData(bool original=false)=0; }; -TEMPLATE_TYPEDEF(ePtr, iFrontendStatusInformationPtr); +TEMPLATE_TYPEDEF(ePtr, iFrontendInformationPtr); class iPauseableService: public iObject { @@ -330,12 +372,6 @@ TEMPLATE_TYPEDEF(ePtr, iSeekableServicePtr); struct iAudioTrackInfo { -#ifdef SWIG -private: - iAudioTrackInfo(); - ~iAudioTrackInfo(); -public: -#endif #ifndef SWIG std::string m_description; std::string m_language; /* iso639 */ @@ -360,6 +396,47 @@ public: TEMPLATE_TYPEDEF(ePtr, iAudioTrackSelectionPtr); +class iAudioChannelSelection: public iObject +{ +#ifdef SWIG + iAudioChannelSelection(); + ~iAudioChannelSelection(); +#endif +public: + enum { LEFT, STEREO, RIGHT }; + virtual int getCurrentChannel()=0; + virtual RESULT selectChannel(int i)=0; +}; + +TEMPLATE_TYPEDEF(ePtr, iAudioChannelSelectionPtr); + +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; +}; + +TEMPLATE_TYPEDEF(ePtr, iAudioDelayPtr); + +class iRadioText: public iObject +{ +#ifdef SWIG + iRadioText(); + ~iRadioText(); +#endif +public: + virtual std::string getRadioText(int x=0)=0; +}; + +TEMPLATE_TYPEDEF(ePtr, iRadioTextPtr); + class iSubserviceList: public iObject { #ifdef SWIG @@ -400,13 +477,27 @@ class iCueSheet: public iObject public: /* returns a list of (pts, what)-tuples */ virtual PyObject *getCutList() = 0; - virtual void setCutList(PyObject *list) = 0; + virtual void setCutList(SWIG_PYOBJECT(ePyObject) list) = 0; virtual void setCutListEnable(int enable) = 0; enum { cutIn = 0, cutOut = 1, cutMark = 2 }; }; TEMPLATE_TYPEDEF(ePtr, iCueSheetPtr); +class eWidget; +class PyList; + +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; +}; + +TEMPLATE_TYPEDEF(ePtr, iSubtitleOutputPtr); + class iPlayableService: public iObject { #ifdef SWIG @@ -435,8 +526,12 @@ public: /* only when cueSheet is implemented */ evCuesheetChanged, + + evUpdatedRadioText }; +#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... */ @@ -445,10 +540,14 @@ public: 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) frontendStatusInfo(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) radioText(ePtr &SWIG_OUTPUT)=0; }; TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr); @@ -460,13 +559,62 @@ class iRecordableService: public iObject ~iRecordableService(); #endif public: + enum + { + evStart, + evStop, + evTunedIn, + evTuneFailed, + evRecordRunning, + evRecordStopped, + evNewProgramInfo, + evRecordFailed +// evDiskFull + }; + enum + { + NoError=0, + errOpenRecordFile=-1, + errNoDemuxAvailable=-2, + errNoTsRecorderAvailable=-3, + errDiskFull=-4, + errTuneFailed=-255 + }; +#ifndef SWIG + virtual RESULT connectEvent(const Slot2 &event, ePtr &connection)=0; +#endif + virtual RESULT getError(int &)=0; virtual RESULT prepare(const char *filename, time_t begTime=-1, time_t endTime=-1, int eit_event_id=-1)=0; virtual RESULT start()=0; virtual RESULT stop()=0; + virtual SWIG_VOID(RESULT) frontendInfo(ePtr &SWIG_OUTPUT)=0; }; 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 + // TEMPLATE_TYPEDEF(std::list, eServiceReferenceList); class iMutableServiceList: public iObject @@ -479,7 +627,7 @@ 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. */ @@ -500,7 +648,7 @@ class iListableService: public iObject public: /* legacy interface: get a list */ virtual RESULT getContent(std::list &list, bool sorted=false)=0; - virtual RESULT getContent(PyObject *list, bool sorted=false)=0; + virtual PyObject *getContent(const char* format, bool sorted=false)=0; /* new, shiny interface: streaming. */ virtual SWIG_VOID(RESULT) getNext(eServiceReference &SWIG_OUTPUT)=0;