From a848baced9e4cd8b5c1e76cafbf93ea032171f9c Mon Sep 17 00:00:00 2001 From: Andreas Frisch Date: Mon, 22 Sep 2008 13:15:19 +0000 Subject: Add basic AudioSelection support for video containers --- lib/service/servicemp3.h | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'lib/service/servicemp3.h') diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h index 08b712c3..bf29efcf 100644 --- a/lib/service/servicemp3.h +++ b/lib/service/servicemp3.h @@ -4,6 +4,7 @@ #ifdef HAVE_GSTREAMER #include #include +#include #include class eStaticServiceMP3Info; @@ -39,7 +40,7 @@ public: typedef struct _GstElement GstElement; class eServiceMP3: public iPlayableService, public iPauseableService, - public iServiceInformation, public iSeekableService, public Object + public iServiceInformation, public iSeekableService, public iAudioTrackSelection, public iAudioChannelSelection, public Object { DECLARE_REF(eServiceMP3); public: @@ -56,10 +57,10 @@ public: RESULT setFastForward(int ratio); RESULT seek(ePtr &ptr); + RESULT audioTracks(ePtr &ptr); + RESULT audioChannel(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; } @@ -88,20 +89,40 @@ public: RESULT getName(std::string &name); int getInfo(int w); std::string getInfoString(int w); + + // iAudioTrackSelection + int getNumberOfTracks(); + RESULT selectTrack(unsigned int i); + RESULT getTrackInfo(struct iAudioTrackInfo &, unsigned int n); + int getCurrentTrack(); + + // iAudioChannelSelection + int getCurrentChannel(); + RESULT selectChannel(int i); + + struct audioStream + { + GstPad* pad; + enum { atMP2, atMP3, atAC3, atDTS, atAAC }; + int type; // mpeg2, ac3, dts, ... + std::string language_code; /* iso-639, if available. */ + }; private: + int m_currentAudioStream; + std::vector m_audioStreams; friend class eServiceFactoryMP3; std::string m_filename; - eServiceMP3(const char *filename); + eServiceMP3(const char *filename); Signal2 m_event; enum { stIdle, stRunning, stStopped, }; int m_state; - GstElement *m_gst_pipeline, *m_gst_audio, *m_gst_videoqueue, *m_gst_audioqueue, *m_decoder; + GstElement *m_gst_pipeline; GstTagList *m_stream_tags; eFixedMessagePump 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 */ -- cgit v1.2.3