#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;
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;
};
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(eServiceMP3);
-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;
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 audioChannel(ePtr<iAudioChannelSelection> &ptr) { ptr = 0; return -1; }
+ RESULT audioTracks(ePtr<iAudioTrackSelection> &ptr) { ptr = 0; return -1; }
+ RESULT frontendInfo(ePtr<iFrontendInformation> &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; }
+ RESULT subtitle(ePtr<iSubtitleOutput> &ptr) { ptr = 0; return -1; }
+ RESULT audioDelay(ePtr<iAudioDelay> &ptr) { ptr = 0; return -1; }
+ RESULT radioText(ePtr<iRadioText> &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(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, *m_gst_videoqueue, *m_gst_audioqueue;
+ 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 gstCBpadAdded(GstElement *decodebin, GstPad *pad, gpointer data); /* for mpegdemux */
+ static void gstCBnewPad(GstElement *decodebin, GstPad *pad, gboolean last, gpointer data); /* for decodebin */
+ static void gstCBunknownType(GstElement *decodebin, GstPad *pad, GstCaps *l, gpointer data);
+ void gstPoll(const int&);
};
+#endif
#endif