X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fservice%2Fservicemp3.h;h=4cbedf5f0f32b56213c3677aedf02586cb0f31f6;hp=f3cc6ddf62591a61c8349fc1b426ab4a13d81205;hb=HEAD;hpb=d0380b44396cbcd497f42eb0047b58b309596007 diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h index f3cc6dd..4cbedf5 100644 --- a/lib/service/servicemp3.h +++ b/lib/service/servicemp3.h @@ -41,6 +41,8 @@ public: RESULT getName(const eServiceReference &ref, std::string &name); int getLength(const eServiceReference &ref); int getInfo(const eServiceReference &ref, int w); + int isPlayable(const eServiceReference &ref, const eServiceReference &ignore, bool simulate) { return 1; } + RESULT getEvent(const eServiceReference &ref, ePtr &ptr, time_t start_time); }; typedef struct _GstElement GstElement; @@ -83,6 +85,8 @@ public: RESULT keys(ePtr &ptr) { ptr = 0; return -1; } RESULT stream(ePtr &ptr) { ptr = 0; return -1; } + void setQpipMode(bool value, bool audio) { } + // iPausableService RESULT pause(); RESULT unpause(); @@ -99,6 +103,7 @@ public: // iServiceInformation RESULT getName(std::string &name); + RESULT getEvent(ePtr &evt, int nownext); int getInfo(int w); std::string getInfoString(int w); PyObject *getInfoObject(int w); @@ -179,6 +184,10 @@ public: std::string missing_codec; }; +protected: + ePtr m_nownext_timer; + ePtr m_event_now, m_event_next; + void updateEpgCacheNowNext(); private: static int pcm_delay; static int ac3_delay; @@ -189,11 +198,10 @@ private: std::vector m_subtitleStreams; eSubtitleWidget *m_subtitle_widget; int m_currentTrickRatio; - ePtr m_seekTimeout; - void seekTimeoutCB(); friend class eServiceFactoryMP3; eServiceReference m_ref; int m_buffer_size; + bufferInfo m_bufferInfo; errorInfo m_errorInfo; eServiceMP3(eServiceReference ref); @@ -203,7 +211,7 @@ private: stIdle, stRunning, stStopped, }; int m_state; - GstElement *m_gst_playbin; + GstElement *m_gst_playbin, *audioSink, *videoSink; GstTagList *m_stream_tags; struct Message @@ -219,9 +227,15 @@ private: { d.pad=pad; } + Message(int type, GstBuffer *buffer) + :type(type) + { + d.buffer=buffer; + } int type; union { + GstBuffer *buffer; // for msg type 2 GstPad *pad; // for msg type 3 } d; }; @@ -229,11 +243,16 @@ private: eFixedMessagePump m_pump; audiotype_t gstCheckAudioPad(GstStructure* structure); +#if GST_VERSION_MAJOR < 1 + static gint match_sinktype(GstElement *element, gpointer type); +#else + static gint match_sinktype(const GValue *velement, const gchar *type); +#endif void gstBusCall(GstBus *bus, GstMessage *msg); static GstBusSyncReply gstBusSyncHandler(GstBus *bus, GstMessage *message, gpointer user_data); static void gstTextpadHasCAPS(GstPad *pad, GParamSpec * unused, gpointer user_data); void gstTextpadHasCAPS_synced(GstPad *pad); - static void gstCBsubtitleAvail(GstElement *element, gpointer user_data); + static void gstCBsubtitleAvail(GstElement *element, GstBuffer *buffer, gpointer user_data); GstPad* gstCreateSubtitleSink(eServiceMP3* _this, subtype_t type); void gstPoll(const Message&); static void gstHTTPSourceSetAgent(GObject *source, GParamSpec *unused, gpointer user_data); @@ -253,11 +272,9 @@ private: int m_decoder_time_valid_state; void pushSubtitles(); - void pullSubtitle(); + void pullSubtitle(GstBuffer *buffer); void sourceTimeout(); - int m_subs_to_pull; sourceStream m_sourceinfo; - eSingleLock m_subs_to_pull_lock; gulong m_subs_to_pull_handler_id; RESULT seekToImpl(pts_t to);