summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpdemux/demux_avi.c6
-rw-r--r--libmpdemux/stheader.h2
-rw-r--r--mplayer.c10
3 files changed, 16 insertions, 2 deletions
diff --git a/libmpdemux/demux_avi.c b/libmpdemux/demux_avi.c
index 21ab48dc6c..217ceb1649 100644
--- a/libmpdemux/demux_avi.c
+++ b/libmpdemux/demux_avi.c
@@ -612,6 +612,12 @@ static demuxer_t* demux_open_avi(demuxer_t* demuxer){
mp_msg(MSGT_DEMUX,MSGL_V,"AVI video size=%d (%u) audio size=%d\n",vsize,priv->numberofframes,asize);
sh_video->i_bps=(float)vsize/(sh_video->frametime*priv->numberofframes);
}
+
+ if (sh_video)
+ sh_video->stream_delay = (float)sh_video->video.dwStart * sh_video->video.dwScale/sh_video->video.dwRate;
+ if (sh_audio)
+ sh_audio->stream_delay = (float)sh_audio->audio.dwStart * sh_audio->audio.dwScale/sh_audio->audio.dwRate;
+
return demuxer;
}
diff --git a/libmpdemux/stheader.h b/libmpdemux/stheader.h
index 5b0aeaceb1..3fcfebac7c 100644
--- a/libmpdemux/stheader.h
+++ b/libmpdemux/stheader.h
@@ -12,6 +12,7 @@ typedef struct {
unsigned int format;
int inited;
float delay; // relative (to sh_video->timer) time in audio stream
+ float stream_delay; // number of seconds stream should be delayed (according to dwStart or similar)
// output format:
int sample_format;
int samplerate;
@@ -54,6 +55,7 @@ typedef struct {
unsigned int format;
int inited;
float timer; // absolute time in video stream, since last start/seek
+ float stream_delay; // number of seconds stream should be delayed (according to dwStart or similar)
// frame counters:
float num_frames; // number of frames played
int num_frames_decoded; // number of frames decoded
diff --git a/mplayer.c b/mplayer.c
index a0ecc2f0e6..a39f7fa072 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -2522,8 +2522,14 @@ if(sh_audio){
current_module="av_init";
-if(sh_video) sh_video->timer=0;
-if(sh_audio) sh_audio->delay=-audio_delay;
+if(sh_video){
+ sh_video->timer=0;
+ audio_delay += sh_video->stream_delay;
+}
+if(sh_audio){
+ audio_delay -= sh_audio->stream_delay;
+ sh_audio->delay=-audio_delay;
+}
if(!sh_audio){
mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_NoSound);