#ifndef __servicemp3_h
#define __servicemp3_h
+#ifdef HAVE_GSTREAMER
+#include <lib/base/message.h>
#include <lib/service/iservice.h>
+#include <gst/gst.h>
class eStaticServiceMP3Info;
class eServiceFactoryMP3: public iServiceHandler
{
-DECLARE_REF;
+DECLARE_REF(eServiceFactoryMP3);
public:
eServiceFactoryMP3();
virtual ~eServiceFactoryMP3();
RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
+ RESULT offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr);
private:
ePtr<eStaticServiceMP3Info> m_service_info;
};
-class eStaticServiceMP3Info: public iServiceInformation
+class eStaticServiceMP3Info: public iStaticServiceInformation
{
- DECLARE_REF;
+ DECLARE_REF(eStaticServiceMP3Info);
friend class eServiceFactoryMP3;
eStaticServiceMP3Info();
public:
RESULT getName(const eServiceReference &ref, std::string &name);
+ int getLength(const eServiceReference &ref);
};
-class eServiceMP3: public iPlayableService, public iPauseableService, public iServiceInformation, public Object
+typedef struct _GstElement GstElement;
+
+class eServiceMP3: public iPlayableService, public iPauseableService,
+ public iServiceInformation, public iSeekableService, public Object
{
-DECLARE_REF;
-private:
- friend class eServiceFactoryMP3;
- std::string filename;
- eServiceMP3(const char *filename);
- eTimer test;
- void test_end();
- Signal2<void,iPlayableService*,int> m_event;
- enum
- {
- stIdle, stRunning, stStopped,
- };
- int m_state;
+DECLARE_REF(eServiceMP3);
public:
virtual ~eServiceMP3();
RESULT connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection);
RESULT start();
RESULT stop();
+ RESULT setTarget(int target);
+
RESULT pause(ePtr<iPauseableService> &ptr);
+ RESULT setSlowMotion(int ratio);
+ RESULT setFastForward(int ratio);
+
+ RESULT seek(ePtr<iSeekableService> &ptr);
+ // not implemented (yet)
+ RESULT audioTracks(ePtr<iAudioTrackSelection> &ptr) { ptr = 0; return -1; }
+ RESULT frontendStatusInfo(ePtr<iFrontendStatusInformation> &ptr) { ptr = 0; return -1; }
+ RESULT subServices(ePtr<iSubserviceList> &ptr) { ptr = 0; return -1; }
+ RESULT timeshift(ePtr<iTimeshiftService> &ptr) { ptr = 0; return -1; }
+ RESULT cueSheet(ePtr<iCueSheet>& ptr) { ptr = 0; return -1; }
+
// iPausableService
RESULT pause();
RESULT unpause();
RESULT info(ePtr<iServiceInformation>&);
+ // 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(const eServiceReference &ref, std::string &name);
+ RESULT getName(std::string &name);
+ int getInfo(int w);
+ std::string getInfoString(int w);
+private:
+ friend class eServiceFactoryMP3;
+ std::string m_filename;
+ eServiceMP3(const char *filename);
+ Signal2<void,iPlayableService*,int> m_event;
+ enum
+ {
+ stIdle, stRunning, stStopped,
+ };
+ int m_state;
+ GstElement *m_gst_pipeline, *m_gst_audio;
+ GstTagList *m_stream_tags;
+ eFixedMessagePump<int> m_pump;
+
+ void gstBusCall(GstBus *bus, GstMessage *msg);
+ static GstBusSyncReply gstBusSyncHandler(GstBus *bus, GstMessage *message, gpointer user_data);
+ static void gstCBnewPad(GstElement *decodebin, GstPad *pad, gboolean last, gpointer data);
+ void gstPoll(const int&);
};
+#endif
#endif