X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/85f2616ef78700cf2639992abaf1011ecaa897bd..a65edb264cc943a2a15b6886d9fa3190a92373c0:/lib/service/iservice.h diff --git a/lib/service/iservice.h b/lib/service/iservice.h index d234b6af..7dba7321 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 @@ -50,6 +51,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 +65,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) ) @@ -166,6 +180,8 @@ public: SWIG_ALLOW_OUTPUT_SIMPLE(eServiceReference); +extern PyObject *New_eServiceReference(const eServiceReference &ref); // defined in enigma_python.i + typedef long long pts_t; /* the reason we have the servicereference as additional argument is @@ -189,6 +205,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 @@ -210,8 +228,6 @@ public: TEMPLATE_TYPEDEF(ePtr, iStaticServiceInformationPtr); -TEMPLATE_TYPEDEF(ePtr, eServiceEventPtr); - class iServiceInformation: public iObject { #ifdef SWIG @@ -222,7 +238,7 @@ public: virtual SWIG_VOID(RESULT) getName(std::string &SWIG_OUTPUT)=0; virtual SWIG_VOID(RESULT) getEvent(ePtr &SWIG_OUTPUT, int nownext); - enum { + 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) */ @@ -248,32 +264,47 @@ public: sProvider, sDescription, + sServiceref, sTimeCreate, // unix time or string + + sTitle, + sArtist, + sAlbum, + sComment, + sTracknumber, + sGenre, + sCAIDs, + sVideoType // MPEG2 MPEG4 }; - enum { resNA = -1, resIsString = -2 }; + enum { resNA = -1, resIsString = -2, resIsPyObject = -3 }; virtual int getInfo(int w); virtual std::string getInfoString(int w); + virtual PyObject *getInfoObject(int w); }; TEMPLATE_TYPEDEF(ePtr, iServiceInformationPtr); -class iFrontendStatusInformation: public iObject +class iFrontendInformation: public iObject { #ifdef SWIG - iFrontendStatusInformation(); - ~iFrontendStatusInformation(); + iFrontendInformation(); + ~iFrontendInformation(); #endif public: enum { bitErrorRate, signalPower, - signalQuality + signalQuality, + 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 { @@ -307,6 +338,7 @@ public: /* 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; }; TEMPLATE_TYPEDEF(ePtr, iSeekableServicePtr); @@ -343,6 +375,35 @@ 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 iSubserviceList: public iObject { #ifdef SWIG @@ -365,10 +426,44 @@ 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; }; TEMPLATE_TYPEDEF(ePtr, iTimeshiftServicePtr); + /* not related to eCueSheet */ +class iCueSheet: public iObject +{ +#ifdef SWIG + iCueSheet(); + ~iCueSheet(); +#endif +public: + /* returns a list of (pts, what)-tuples */ + virtual PyObject *getCutList() = 0; + virtual void setCutList(PyObject *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, PyObject *entry)=0; + virtual RESULT disableSubtitles(eWidget *parent)=0; + virtual PyObject *getSubtitleList()=0; +}; + +TEMPLATE_TYPEDEF(ePtr, iSubtitleOutputPtr); + class iPlayableService: public iObject { #ifdef SWIG @@ -379,6 +474,8 @@ class iPlayableService: public iObject public: enum { + /* these first two events are magical, and should only + be generated if you know what you're doing. */ evStart, evEnd, @@ -386,17 +483,32 @@ public: // when iServiceInformation is implemented: evUpdatedEventInfo, evUpdatedInfo, + + /* when seek() is implemented: */ + evSeekableStatusChanged, /* for example when timeshifting */ + + evEOF, + evSOF, /* bounced against start of file (when seeking backwards) */ + + /* only when cueSheet is implemented */ + evCuesheetChanged, }; virtual RESULT connectEvent(const Slot2 &event, ePtr &connection)=0; 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) 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; }; TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr); @@ -408,9 +520,10 @@ class iRecordableService: public iObject ~iRecordableService(); #endif public: - virtual RESULT prepare(const char *filename)=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); @@ -433,6 +546,8 @@ public: /* 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; }; TEMPLATE_TYPEDEF(ePtr, iMutableServiceListPtr); @@ -445,8 +560,9 @@ class iListableService: public iObject #endif public: /* legacy interface: get a list */ - virtual RESULT getContent(std::list &list)=0; - + virtual RESULT getContent(std::list &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;