transtreamproxy updated.
[vuplus_openvuplus] / meta-openvuplus / recipes-vuplus / enigma2 / enigma2 / enigma2_vuplus_mediaplayer_subtitle.patch
1 diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp
2 index 7ce34c1..e620225 100755
3 --- a/lib/service/servicemp3.cpp
4 +++ b/lib/service/servicemp3.cpp
5 @@ -235,6 +235,8 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
6         CONNECT(m_pump.recv_msg, eServiceMP3::gstPoll);
7         m_aspect = m_width = m_height = m_framerate = m_progressive = -1;
8  
9 +       m_subs_behind_seek = 0;
10 +       m_block_sub = FALSE;
11         m_cur_rate=1.0;
12         m_state = stIdle;
13         eDebug("eServiceMP3::construct!");
14 @@ -572,6 +574,7 @@ RESULT eServiceMP3::seekTo(pts_t to)
15         RESULT ret = -1;
16  
17         if (m_gst_playbin) {
18 +               m_block_sub = TRUE;
19                 eSingleLocker l(m_subs_to_pull_lock); // this is needed to dont handle incomming subtitles during seek!
20                 if (!(ret = seekToImpl(to)))
21                 {
22 @@ -580,6 +583,13 @@ RESULT eServiceMP3::seekTo(pts_t to)
23                         m_decoder_time_valid_state = 0;
24                         m_subs_to_pull = 0;
25                 }
26 +               m_block_sub = FALSE;
27 +       }
28 +       m_subs_to_pull+=m_subs_behind_seek;
29 +       while(m_subs_behind_seek)
30 +       {
31 +               m_pump.send(Message(2));
32 +               m_subs_behind_seek--;
33         }
34  
35         return ret;
36 @@ -593,6 +603,7 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
37         if (!ratio)
38                 return seekRelative(0, 0);
39  
40 +       m_block_sub = TRUE;
41         eSingleLocker l(m_subs_to_pull_lock);
42  
43         GstEvent *s_event;
44 @@ -632,6 +643,13 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
45         m_decoder_time_valid_state = 0;
46         m_subs_to_pull = 0;
47         m_cur_rate=ratio;
48 +       m_block_sub = FALSE;
49 +       m_subs_to_pull+=m_subs_behind_seek;
50 +       while(m_subs_behind_seek)
51 +       {
52 +               m_pump.send(Message(2));
53 +               m_subs_behind_seek--;
54 +       }
55         return 0;
56  }
57  
58 @@ -1572,10 +1590,17 @@ eAutoInitPtr<eServiceFactoryMP3> init_eServiceFactoryMP3(eAutoInitNumbers::servi
59  
60  void eServiceMP3::gstCBsubtitleAvail(GstElement *appsink, gpointer user_data)
61  {
62 -       eServiceMP3 *_this = (eServiceMP3*)user_data;   
63 -       eSingleLocker l(_this->m_subs_to_pull_lock);
64 -       ++_this->m_subs_to_pull;
65 -       _this->m_pump.send(Message(2));
66 +       eServiceMP3 *_this = (eServiceMP3*)user_data;
67 +       if(_this->m_block_sub != TRUE)
68 +       {
69 +               eSingleLocker l(_this->m_subs_to_pull_lock);
70 +               ++_this->m_subs_to_pull;
71 +               _this->m_pump.send(Message(2));
72 +       }
73 +       else
74 +       {
75 +               _this->m_subs_behind_seek++;
76 +       }
77  }
78  
79  void eServiceMP3::gstTextpadHasCAPS(GstPad *pad, GParamSpec * unused, gpointer user_data)
80 @@ -1651,6 +1676,11 @@ void eServiceMP3::pullSubtitle()
81                 {
82                         GstBuffer *buffer;
83                         {
84 +                               if(m_block_sub == TRUE)
85 +                               {
86 +                                       g_signal_emit_by_name (sink, "pull-buffer", &buffer);
87 +                                       return;
88 +                               }
89                                 eSingleLocker l(m_subs_to_pull_lock);
90                                 --m_subs_to_pull;
91                                 g_signal_emit_by_name (sink, "pull-buffer", &buffer);
92 diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h
93 index 07eb321..f6282bf 100755
94 --- a/lib/service/servicemp3.h
95 +++ b/lib/service/servicemp3.h
96 @@ -266,6 +266,8 @@ private:
97         std::string m_useragent;
98         RESULT trickSeek(gdouble ratio);
99         double m_cur_rate;
100 +       bool m_block_sub;
101 +       int m_subs_behind_seek;
102  };
103  
104  #endif