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;
9 + m_subs_behind_seek = 0;
10 + m_block_sub = FALSE;
13 eDebug("eServiceMP3::construct!");
14 @@ -572,6 +574,7 @@ RESULT eServiceMP3::seekTo(pts_t to)
19 eSingleLocker l(m_subs_to_pull_lock); // this is needed to dont handle incomming subtitles during seek!
20 if (!(ret = seekToImpl(to)))
22 @@ -580,6 +583,13 @@ RESULT eServiceMP3::seekTo(pts_t to)
23 m_decoder_time_valid_state = 0;
26 + m_block_sub = FALSE;
28 + m_subs_to_pull+=m_subs_behind_seek;
29 + while(m_subs_behind_seek)
31 + m_pump.send(Message(2));
32 + m_subs_behind_seek--;
36 @@ -593,6 +603,7 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
38 return seekRelative(0, 0);
41 eSingleLocker l(m_subs_to_pull_lock);
44 @@ -632,6 +643,13 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
45 m_decoder_time_valid_state = 0;
48 + m_block_sub = FALSE;
49 + m_subs_to_pull+=m_subs_behind_seek;
50 + while(m_subs_behind_seek)
52 + m_pump.send(Message(2));
53 + m_subs_behind_seek--;
58 @@ -1572,10 +1590,17 @@ eAutoInitPtr<eServiceFactoryMP3> init_eServiceFactoryMP3(eAutoInitNumbers::servi
60 void eServiceMP3::gstCBsubtitleAvail(GstElement *appsink, gpointer user_data)
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)
69 + eSingleLocker l(_this->m_subs_to_pull_lock);
70 + ++_this->m_subs_to_pull;
71 + _this->m_pump.send(Message(2));
75 + _this->m_subs_behind_seek++;
79 void eServiceMP3::gstTextpadHasCAPS(GstPad *pad, GParamSpec * unused, gpointer user_data)
80 @@ -1651,6 +1676,11 @@ void eServiceMP3::pullSubtitle()
84 + if(m_block_sub == TRUE)
86 + g_signal_emit_by_name (sink, "pull-buffer", &buffer);
89 eSingleLocker l(m_subs_to_pull_lock);
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);
101 + int m_subs_behind_seek;