public:
RESULT getName(const eServiceReference &ref, std::string &name);
int getLength(const eServiceReference &ref);
+ int getInfo(const eServiceReference &ref, int w);
};
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 } 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
};
int m_state;
GstElement *m_gst_playbin;
+ GstElement *m_gst_subtitlebin;
GstTagList *m_stream_tags;
eFixedMessagePump<int> m_pump;
std::string m_error_message;
void gstBusCall(GstBus *bus, GstMessage *msg);
static GstBusSyncReply gstBusSyncHandler(GstBus *bus, GstMessage *message, 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&);
-
- std::list<ePangoSubtitlePage> m_subtitle_pages;
+ 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<SubtitlePage> m_subtitle_pages;
ePtr<eTimer> m_subtitle_sync_timer;
+ ePtr<eTimer> m_subtitle_hide_timer;
void pushSubtitles();
void pullSubtitle();
+ void hideSubtitles();
int m_subs_to_pull;
eSingleLock m_subs_to_pull_lock;
gulong m_subs_to_pull_handler_id;