#ifndef __servicemp3_h #define __servicemp3_h #define HAVE_XINE #ifdef HAVE_XINE #include #include #include #include class eStaticServiceXineInfo; class eServiceFactoryXine: public iServiceHandler { DECLARE_REF(eServiceFactoryXine); public: eServiceFactoryXine(); virtual ~eServiceFactoryXine(); enum { id = 0x1010 }; // iServiceHandler RESULT play(const eServiceReference &, ePtr &ptr); RESULT record(const eServiceReference &, ePtr &ptr); RESULT list(const eServiceReference &, ePtr &ptr); RESULT info(const eServiceReference &, ePtr &ptr); RESULT offlineOperations(const eServiceReference &, ePtr &ptr); private: ePtr m_service_info; }; class eStaticServiceXineInfo: public iStaticServiceInformation { DECLARE_REF(eStaticServiceXineInfo); friend class eServiceFactoryXine; eStaticServiceXineInfo(); public: RESULT getName(const eServiceReference &ref, std::string &name); int getLength(const eServiceReference &ref); }; typedef struct _GstElement GstElement; class eServiceXine: public iPlayableService, public iPauseableService, public iServiceInformation, public iSeekableService, public Object { DECLARE_REF(eServiceXine); public: virtual ~eServiceXine(); // iPlayableService RESULT connectEvent(const Slot2 &event, ePtr &connection); RESULT start(); RESULT stop(); RESULT setTarget(int target); RESULT pause(ePtr &ptr); RESULT setSlowMotion(int ratio); RESULT setFastForward(int ratio); RESULT seek(ePtr &ptr); // not implemented (yet) RESULT audioChannel(ePtr &ptr) { ptr = 0; return -1; } RESULT audioTracks(ePtr &ptr) { ptr = 0; return -1; } RESULT frontendInfo(ePtr &ptr) { ptr = 0; return -1; } RESULT subServices(ePtr &ptr) { ptr = 0; return -1; } RESULT timeshift(ePtr &ptr) { ptr = 0; return -1; } RESULT cueSheet(ePtr &ptr) { ptr = 0; return -1; } RESULT subtitle(ePtr &ptr) { ptr = 0; return -1; } RESULT audioDelay(ePtr &ptr) { ptr = 0; return -1; } RESULT rdsDecoder(ePtr &ptr) { ptr = 0; return -1; } RESULT keys(ePtr &ptr) { ptr = 0; return -1; } // iPausableService RESULT pause(); RESULT unpause(); RESULT info(ePtr&); // iSeekableService RESULT getLength(pts_t &SWIG_OUTPUT); RESULT seekTo(pts_t to); RESULT seekRelative(int direction, pts_t to); RESULT getPlayPosition(pts_t &SWIG_OUTPUT); RESULT setTrickmode(int trick); RESULT isCurrentlySeekable(); // iServiceInformation RESULT getName(std::string &name); int getInfo(int w); std::string getInfoString(int w); private: friend class eServiceFactoryXine; std::string m_filename; eServiceXine(const char *filename); Signal2 m_event; xine_stream_t *stream; xine_video_port_t *vo_port; xine_audio_port_t *ao_port; xine_event_queue_t *event_queue; enum { stError, stIdle, stRunning, stStopped, }; int m_state; static void eventListenerWrap(void *user_data, const xine_event_t *event); void eventListener(const xine_event_t *event); eFixedMessagePump m_pump; }; #endif #endif