diff options
author | corey <corey@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-02-17 01:57:41 +0000 |
---|---|---|
committer | corey <corey@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-02-17 01:57:41 +0000 |
commit | 1ab575101ab9e2e250d782b4e104fcca1c1c66b0 (patch) | |
tree | 740c93933a4d6c891deccda22ab985c333951981 /libmpdemux/demux_avi.c | |
parent | 808ce9a03a6d2f810ab3616c33105a08b987f07c (diff) | |
download | mpv-1ab575101ab9e2e250d782b4e104fcca1c1c66b0.tar.bz2 mpv-1ab575101ab9e2e250d782b4e104fcca1c1c66b0.tar.xz |
Second-try commit of this patch.
1. Include audio_delay as an argument to demux_seek.
2. Modify demux_seek_avi to adjust the audio/video stream positions so
that mplayer/mencoder will instantly be in sync even when -delay is
specified.
I've quadruple checked this time; hopefully I haven't missed anything.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@17637 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_avi.c')
-rw-r--r-- | libmpdemux/demux_avi.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libmpdemux/demux_avi.c b/libmpdemux/demux_avi.c index 6febdd160c..21ab48dc6c 100644 --- a/libmpdemux/demux_avi.c +++ b/libmpdemux/demux_avi.c @@ -618,7 +618,7 @@ static demuxer_t* demux_open_avi(demuxer_t* demuxer){ //extern float initial_pts_delay; -void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags){ +void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){ avi_priv_t *priv=demuxer->priv; demux_stream_t *d_audio=demuxer->audio; demux_stream_t *d_video=demuxer->video; @@ -706,8 +706,8 @@ void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags){ 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 +733,8 @@ void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags){ } 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: |