1 diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp
2 index ae4611c..99bb50d 100755
3 --- a/lib/service/servicemp3.cpp
4 +++ b/lib/service/servicemp3.cpp
5 @@ -245,6 +245,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 @@ -595,6 +597,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 @@ -603,6 +606,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 @@ -616,6 +626,7 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
38 return seekRelative(0, 0);
41 eSingleLocker l(m_subs_to_pull_lock);
44 @@ -655,6 +666,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 @@ -1650,10 +1668,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 @@ -1729,6 +1754,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 cb5b048..7e3f6a6 100644
94 --- a/lib/service/servicemp3.h
95 +++ b/lib/service/servicemp3.h
96 @@ -270,6 +270,8 @@ private:
97 std::string m_useragent;
98 RESULT trickSeek(gdouble ratio);
101 + int m_subs_behind_seek;