X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ed40f6f85c9c07c3c1224ae20601082c0309a631..c6de231f8b5fbd3656d65a4a62b12cdfbd546171:/lib/service/iservice.h diff --git a/lib/service/iservice.h b/lib/service/iservice.h index 98ece76e..24c2e341 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -84,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() @@ -138,6 +138,10 @@ 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) @@ -170,10 +174,6 @@ public: return r < 0; return path < c.path; } - operator bool() const - { - return valid(); - } int valid() const { @@ -224,7 +224,7 @@ typedef long long pts_t; Hide the result only if there is another way to check for failure! */ -SWIG_TEMPLATE_TYPEDEF(ePtr, eServiceEventPtr); +class eServiceEvent; SWIG_IGNORE(iStaticServiceInformation); class iStaticServiceInformation: public iObject @@ -240,7 +240,7 @@ 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 int 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); @@ -261,6 +261,8 @@ public: 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) */ /* "user serviceable info" - they are not reliable. Don't use them for anything except the service menu! @@ -284,13 +286,8 @@ public: sDescription, sServiceref, sTimeCreate, /* unix time or string */ + sFileSize, - sTitle, - sArtist, - sAlbum, - sComment, - sTracknumber, - sGenre, sCAIDs, sVideoType, /* MPEG2 MPEG4 */ @@ -301,7 +298,65 @@ public: sVideoHeight, sVideoWidth, - sTransponderData /* transponderdata as python dict */ + 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, @@ -354,7 +409,8 @@ public: signalQuality, lockState, syncState, - frontendNumber + frontendNumber, + signalQualitydB, }; }; @@ -367,7 +423,10 @@ class iFrontendInformation: public iFrontendInformation_ENUMS, public iObject #endif public: virtual int getFrontendInfo(int w)=0; - virtual PyObject *getFrontendData(bool original=false)=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); @@ -379,6 +438,8 @@ 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; @@ -414,6 +475,8 @@ public: 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; } }; SWIG_TEMPLATE_TYPEDEF(ePtr, iSeekableServicePtr); @@ -422,9 +485,11 @@ 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); @@ -439,6 +504,7 @@ 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); @@ -480,17 +546,30 @@ public: }; SWIG_TEMPLATE_TYPEDEF(ePtr, iAudioDelayPtr); -SWIG_IGNORE(iRadioText); -class iRadioText: public iObject +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 - iRadioText(); - ~iRadioText(); + iRdsDecoder(); + ~iRdsDecoder(); #endif public: - virtual std::string getRadioText(int x=0)=0; + 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, iRadioTextPtr); +SWIG_TEMPLATE_TYPEDEF(ePtr, iRdsDecoderPtr); SWIG_IGNORE(iSubserviceList); class iSubserviceList: public iObject @@ -645,6 +724,67 @@ public: }; 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 @@ -658,6 +798,7 @@ public: evStart, evEnd, + evTunedIn, evTuneFailed, /* when iServiceInformation is implemented:*/ @@ -673,10 +814,23 @@ public: /* when cueSheet is implemented */ evCuesheetChanged, - /* when radioText is implemented */ + /* when rdsDecoder is implemented */ evUpdatedRadioText, + evUpdatedRtpText, + + /* Radio Screenshow Support */ + evUpdatedRassSlidePic, + evUpdatedRassInteractivePicMask, - evVideoSizeChanged + evVideoSizeChanged, + evVideoFramerateChanged, + evVideoProgressiveChanged, + + evBuffering, + + evStopped, + + evUser = 0x100 }; }; @@ -707,7 +861,10 @@ public: 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; + 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); @@ -720,14 +877,15 @@ class iRecordableService_ENUMS public: enum { evStart, - evStop, + evEnd, evTunedIn, evTuneFailed, evRecordRunning, evRecordStopped, evNewProgramInfo, - evRecordFailed - /*evDiskFull*/ + evRecordFailed, + evRecordWriteError, + evNewEventInfo }; enum { NoError=0, @@ -735,7 +893,9 @@ public: errNoDemuxAvailable=-2, errNoTsRecorderAvailable=-3, errDiskFull=-4, - errTuneFailed=-255 + errTuneFailed=-255, + errMisconfiguration = -256, + errNoResources = -257, }; }; @@ -750,11 +910,14 @@ public: #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 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);