servicemp3.h/cpp: fix segfault on mkv start, thread safety fixes, fix compiler warnings
[enigma2.git] / lib / service / servicemp3.h
index 4057f022dd51631e2d464291da254123f3a032ff..11bf125c94051d60898cd06199f5b059f684cecb 100644 (file)
@@ -206,12 +206,34 @@ private:
        GstElement *m_gst_playbin;
        GstElement *m_gst_subtitlebin;
        GstTagList *m_stream_tags;
-       eFixedMessagePump<int> m_pump;
+
+       struct Message
+       {
+               Message()
+                       :type(-1)
+               {}
+               Message(int type)
+                       :type(type)
+               {}
+               Message(int type, GstPad *pad)
+                       :type(type)
+               {
+                       d.pad=pad;
+               }
+
+               int type;
+               union {
+                       GstPad *pad; // for msg type 3
+               } d;
+       };
+
+       eFixedMessagePump<Message> m_pump;
        std::string m_error_message;
 
        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);
        static GstCaps* gstGhostpadGetCAPS (GstPad * pad);
        static gboolean gstGhostpadAcceptCAPS(GstPad * pad, GstCaps * caps);
@@ -223,7 +245,9 @@ private:
 /*     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&);
+       void gstPoll(const Message&);
+       void gstGhostpadHasCAPS_synced(GstPad *pad);
+
        GstPadBufferAllocFunction m_ghost_pad_buffer_alloc;
        GstPadChainFunction m_ghost_pad_chain_function;
        GstPadEventFunction m_ghost_pad_subtitle_sink_event;
@@ -234,16 +258,20 @@ private:
        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;
        eSingleLock m_subs_to_pull_lock;
        gulong m_subs_to_pull_handler_id;
 
        RESULT seekToImpl(pts_t to);
 
        gint m_aspect, m_width, m_height, m_framerate, m_progressive;
+       std::string m_useragent;
        RESULT trickSeek(gdouble ratio);
 };
 #endif