changeset 17643:cea08919336b

dwStart support for mplayer. * demux_avi sets stream_delay according to dwStart * mplayer adjusts audio_delay according to stream_delay 3 related patches are pending, and I will apply them over the next few days if all goes well. As I mentioned on -dev-eng, the funny indentation is in preparation for one of those pending patches. See: Date: Fri, 17 Feb 2006 00:53:28 -0800 To: mplayer-dev-eng@mplayerhq.hu Subject: [PATCH] bframes, dwStart: individual patches
author corey
date Sat, 18 Feb 2006 09:26:39 +0000
parents 64e5c4e34f07
children 87c049a38c36
files libmpdemux/demux_avi.c libmpdemux/stheader.h mplayer.c
diffstat 3 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/demux_avi.c	Sat Feb 18 01:08:17 2006 +0000
+++ b/libmpdemux/demux_avi.c	Sat Feb 18 09:26:39 2006 +0000
@@ -612,6 +612,12 @@
     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;
   
 }
--- a/libmpdemux/stheader.h	Sat Feb 18 01:08:17 2006 +0000
+++ b/libmpdemux/stheader.h	Sat Feb 18 09:26:39 2006 +0000
@@ -12,6 +12,7 @@
   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 @@
   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
--- a/mplayer.c	Sat Feb 18 01:08:17 2006 +0000
+++ b/mplayer.c	Sat Feb 18 09:26:39 2006 +0000
@@ -2522,8 +2522,14 @@
 
 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);