diff options
| author | Fraxinas <andreas.frisch@multimedia-labs.de> | 2010-07-26 12:30:11 +0200 |
|---|---|---|
| committer | Fraxinas <andreas.frisch@multimedia-labs.de> | 2010-07-26 12:30:11 +0200 |
| commit | da583812c4b20dcf72b69415d65dc1398fd849ce (patch) | |
| tree | 81c79dfa62915f3e267b3e3e12948bb327599574 /lib/service/servicemp3.h | |
| parent | b5c3db5f8af9c6de71a0dadd3cc9e13ead7f06d6 (diff) | |
| download | enigma2-da583812c4b20dcf72b69415d65dc1398fd849ce.tar.gz enigma2-da583812c4b20dcf72b69415d65dc1398fd849ce.zip | |
add experimental vobsub support (requires gst-plugin-dvdsub) / ignore PGS subs (fixes #537)
Diffstat (limited to 'lib/service/servicemp3.h')
| -rw-r--r-- | lib/service/servicemp3.h | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h index 01f7cf7f..ceb3b491 100644 --- a/lib/service/servicemp3.h +++ b/lib/service/servicemp3.h @@ -47,9 +47,15 @@ public: typedef struct _GstElement GstElement; typedef enum { atUnknown, atMPEG, atMP3, atAC3, atDTS, atAAC, atPCM, atOGG, atFLAC } audiotype_t; -typedef enum { stPlainText, stSSA, stSRT } subtype_t; +typedef enum { stUnknown, stPlainText, stSSA, stASS, stSRT, stVOB, stPGS } subtype_t; typedef enum { ctNone, ctMPEGTS, ctMPEGPS, ctMKV, ctAVI, ctMP4, ctVCD, ctCDA } containertype_t; +struct SubtitlePage +{ + ePangoSubtitlePage *pango_page; + eVobSubtitlePage *vob_page; +}; + class eServiceMP3: public iPlayableService, public iPauseableService, public iServiceInformation, public iSeekableService, public iAudioTrackSelection, public iAudioChannelSelection, public iSubtitleOutput, public iStreamedService, public iAudioDelay, public Object @@ -198,6 +204,7 @@ private: }; int m_state; GstElement *m_gst_playbin; + GstElement *m_gst_subtitlebin; GstTagList *m_stream_tags; eFixedMessagePump<int> m_pump; std::string m_error_message; @@ -205,17 +212,33 @@ private: audiotype_t gstCheckAudioPad(GstStructure* structure); void gstBusCall(GstBus *bus, GstMessage *msg); static GstBusSyncReply gstBusSyncHandler(GstBus *bus, GstMessage *message, gpointer user_data); + static void gstHTTPSourceSetAgent(GObject *source, GParamSpec *unused, gpointer user_data); static void gstCBsubtitleAvail(GstElement *element, gpointer user_data); - GstPad* gstCreateSubtitleSink(eServiceMP3* _this, subtype_t type); + static GstCaps* gstGhostpadGetCAPS (GstPad * pad); + static gboolean gstGhostpadAcceptCAPS(GstPad * pad, GstCaps * caps); + static void gstGhostpadLink(gpointer user_data, GstCaps * caps); + static GstFlowReturn gstGhostpadBufferAlloc(GstPad *pad, guint64 offset, guint size, GstCaps *caps, GstBuffer **buf); + static void gstGhostpadHasCAPS(GstPad *pad, GParamSpec * unused, gpointer user_data); + static gboolean gstGhostpadSinkEvent(GstPad * pad, GstEvent * event); + static GstFlowReturn gstGhostpadChainFunction(GstPad * pad, GstBuffer * buffer); +/* static void gstCBsubtitleCAPS(GObject *obj, GParamSpec *pspec, gpointer user_data); + static void gstCBsubtitleLink(subtype_t type, gpointer user_data); + static gboolean gstCBsubtitleDrop(GstPad *pad, GstBuffer *buffer, gpointer user_data);*/ void gstPoll(const int&); - static void gstHTTPSourceSetAgent(GObject *source, GParamSpec *unused, gpointer user_data); + GstPadBufferAllocFunction m_ghost_pad_buffer_alloc; + GstPadChainFunction m_ghost_pad_chain_function; + GstPadEventFunction m_ghost_pad_subtitle_sink_event; + GstCaps *m_gst_prev_subtitle_caps; + GstSegment m_gst_subtitle_segment; + GstPadEventFunction m_gst_sink_event; - std::list<ePangoSubtitlePage> m_subtitle_pages; + std::list<SubtitlePage> m_subtitle_pages; ePtr<eTimer> m_subtitle_sync_timer; - + ePtr<eTimer> m_subtitle_hide_timer; ePtr<eTimer> m_streamingsrc_timeout; void pushSubtitles(); void pullSubtitle(); + void hideSubtitles(); void sourceTimeout(); int m_subs_to_pull; sourceStream m_sourceinfo; |
