X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fservice%2Fservicemp3.h;h=4cbedf5f0f32b56213c3677aedf02586cb0f31f6;hp=a92a4cf78b95ec8b3a92d1051b97c53bac6d6011;hb=HEAD;hpb=1b1339127ce152097492d899e401e3c6a2438f2c diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h index a92a4cf..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); @@ -173,6 +178,16 @@ public: { } }; + struct errorInfo + { + std::string error_message; + 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; @@ -183,12 +198,12 @@ 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); Signal2 m_event; enum @@ -196,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 @@ -212,22 +227,32 @@ 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; }; eFixedMessagePump m_pump; - std::string m_error_message; 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); @@ -247,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);