Index: mencoder.c =================================================================== RCS file: /cvsroot/mplayer/main/mencoder.c,v retrieving revision 1.332 diff -u -r1.332 mencoder.c --- mencoder.c 26 Jan 2006 19:32:05 -0000 1.332 +++ mencoder.c 3 Feb 2006 06:01:31 -0000 @@ -155,7 +155,7 @@ static float audio_preload=0.5; static float audio_delay_fix=0.0; -static float audio_delay=0.0; + float audio_delay=0.0; static int audio_density=2; float force_fps=0; Index: libmpdemux/demux_avi.c =================================================================== RCS file: /cvsroot/mplayer/main/libmpdemux/demux_avi.c,v retrieving revision 1.70 diff -u -r1.70 demux_avi.c --- libmpdemux/demux_avi.c 12 Jan 2006 20:04:34 -0000 1.70 +++ libmpdemux/demux_avi.c 3 Feb 2006 06:01:32 -0000 @@ -20,6 +20,8 @@ extern demuxer_desc_t demuxer_desc_avi_ni; extern demuxer_desc_t demuxer_desc_avi_nini; +extern float audio_delay; + // PTS: 0=interleaved 1=BPS-based int pts_from_bps=1; @@ -706,8 +708,8 @@ curr_audio_pos/=align; curr_audio_pos*=align; #else - curr_audio_pos=(priv->avi_video_pts)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; - curr_audio_pos-=sh_audio->audio.dwStart; + /* immediate seeking to audio position, including when streams are delayed */ + curr_audio_pos=(priv->avi_video_pts + audio_delay)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; curr_audio_pos*=sh_audio->audio.dwSampleSize; #endif @@ -733,7 +735,8 @@ } else { // VBR audio - int chunks=(priv->avi_video_pts)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; + /* immediate seeking to audio position, including when streams are delayed */ + int chunks=(priv->avi_video_pts + audio_delay)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; audio_chunk_pos=0; // find audio chunk pos: