diff options
-rw-r--r-- | src/xine-engine/metronom.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/xine-engine/metronom.c b/src/xine-engine/metronom.c index 9bda471fc..ba1619154 100644 --- a/src/xine-engine/metronom.c +++ b/src/xine-engine/metronom.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: metronom.c,v 1.87 2002/06/29 14:32:36 tmattern Exp $ + * $Id: metronom.c,v 1.88 2002/08/27 07:10:13 jcdutton Exp $ */ #ifdef HAVE_CONFIG_H @@ -259,21 +259,26 @@ static void metronom_set_audio_rate (metronom_t *this, int64_t pts_per_smpls) { } static int64_t metronom_got_spu_packet (metronom_t *this, int64_t pts) { - int64_t vpts; - + int64_t vpts, video_vpts, vpts_old, vpts_new; + pthread_mutex_lock (&this->lock); - + vpts_old = pts + this->vpts_offset; + vpts_new = pts + this->next_vpts_offset; + video_vpts = this->video_vpts; + if (pts >= 0 ) { - if ( !this->in_discontinuity ) { - vpts = pts + this->vpts_offset; - } else { - vpts = 0; - } + if ( abs(vpts_old - video_vpts) > abs(vpts_new - video_vpts) ) { + vpts = vpts_new; + } else { + vpts=vpts_old; + } + /* printf ("metronom: WARNING:got_spu_packet: vpts=%lld, old offset=%lld, new offset=%lld, video_vpts=%lld\n", vpts, vpts_old, vpts_new, video_vpts); */ } else { /* pts < 0 */ vpts = this->vpts_offset; + /* printf ("metronom: WARNING:got_spu_packet: vpts_offset=%lld\n", vpts); */ } - + pthread_mutex_unlock (&this->lock); return vpts; } |