[MPlayer-cvslog] CVS: main/libmpdemux demux_asf.c, 1.40, 1.41 demux_avi.c, 1.70, 1.71 demux_avs.c, 1.6, 1.7 demux_demuxers.c, 1.7, 1.8 demux_film.c, 1.14, 1.15 demux_fli.c, 1.11, 1.12 demux_lavf.c, 1.24, 1.25 demux_mf.c, 1.14, 1.15 demux_mov.c, 1.136, 1.137 demux_mpg.c, 1.69, 1.70 demux_nsv.c, 1.12, 1.13 demux_nuv.c, 1.16, 1.17 demux_pva.c, 1.7, 1.8 demux_rawdv.c, 1.12, 1.13 demux_real.c, 1.86, 1.87 demux_realaud.c, 1.11, 1.12 demux_ts.c, 1.42, 1.43 demux_ty.c, 1.13, 1.14 demux_vqf.c, 1.6, 1.7 demux_y4m.c, 1.10, 1.11 demuxer.c, 1.214, 1.215 demuxer.h, 1.85, 1.86

Corey Hickey syncmail at mplayerhq.hu
Tue Feb 7 21:22:48 CET 2006


CVS change done by Corey Hickey

Update of /cvsroot/mplayer/main/libmpdemux
In directory mail:/var2/tmp/cvs-serv13524/libmpdemux

Modified Files:
	demux_asf.c demux_avi.c demux_avs.c demux_demuxers.c 
	demux_film.c demux_fli.c demux_lavf.c demux_mf.c demux_mov.c 
	demux_mpg.c demux_nsv.c demux_nuv.c demux_pva.c demux_rawdv.c 
	demux_real.c demux_realaud.c demux_ts.c demux_ty.c demux_vqf.c 
	demux_y4m.c demuxer.c demuxer.h 
Log Message:
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.

Other demuxers could be modified similarly in the future.


Index: demux_asf.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_asf.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- demux_asf.c	12 Jan 2006 20:04:34 -0000	1.40
+++ demux_asf.c	7 Feb 2006 20:22:44 -0000	1.41
@@ -369,7 +369,7 @@
 
 extern void skip_audio_frame(sh_audio_t *sh_audio);
 
-static void demux_seek_asf(demuxer_t *demuxer,float rel_seek_secs,int flags){
+static void demux_seek_asf(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
     demux_stream_t *d_audio=demuxer->audio;
     demux_stream_t *d_video=demuxer->video;
     sh_audio_t *sh_audio=d_audio->sh;

Index: demux_avi.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_avi.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -r1.70 -r1.71
--- demux_avi.c	12 Jan 2006 20:04:34 -0000	1.70
+++ demux_avi.c	7 Feb 2006 20:22:44 -0000	1.71
@@ -618,7 +618,7 @@
 
 //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 @@
 	    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 @@
 	      
 	} 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:

Index: demux_avs.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_avs.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- demux_avs.c	2 Sep 2005 08:32:32 -0000	1.6
+++ demux_avs.c	7 Feb 2006 20:22:44 -0000	1.7
@@ -375,7 +375,7 @@
     }
 }
 
-static void demux_seek_avs(demuxer_t *demuxer, float rel_seek_secs,int flags)
+static void demux_seek_avs(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags)
 {
     demux_stream_t *d_video=demuxer->video;
     sh_video_t *sh_video=d_video->sh;

Index: demux_demuxers.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_demuxers.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- demux_demuxers.c	30 Oct 2005 09:13:32 -0000	1.7
+++ demux_demuxers.c	7 Feb 2006 20:22:44 -0000	1.8
@@ -57,7 +57,7 @@
   return 0;
 }
 
-static void demux_demuxers_seek(demuxer_t *demuxer,float rel_seek_secs,int flags) {
+static void demux_demuxers_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags) {
   dd_priv_t* priv;
   float pos;
   priv=demuxer->priv;
@@ -66,13 +66,13 @@
   priv->sd->stream->eof = 0;
 
   // Seek video
-  demux_seek(priv->vd,rel_seek_secs,flags);
+  demux_seek(priv->vd,rel_seek_secs,audio_delay,flags);
   // Get the new pos
   pos = demuxer->video->pts;
 
   if(priv->ad != priv->vd) {
     sh_audio_t* sh = (sh_audio_t*)demuxer->audio->sh;
-    demux_seek(priv->ad,pos,1);
+    demux_seek(priv->ad,pos,audio_delay,1);
     // In case the demuxer don't set pts
     if(!demuxer->audio->pts)
       demuxer->audio->pts = pos-((ds_tell_pts(demuxer->audio)-sh->a_in_buffer_len)/(float)sh->i_bps);
@@ -80,7 +80,7 @@
   }
 
   if(priv->sd != priv->vd)
-      demux_seek(priv->sd,pos,1);
+      demux_seek(priv->sd,pos,audio_delay,1);
 
 }
 

Index: demux_film.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_film.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- demux_film.c	12 Jan 2006 20:04:34 -0000	1.14
+++ demux_film.c	7 Feb 2006 20:22:44 -0000	1.15
@@ -46,7 +46,7 @@
   unsigned int film_version;
 } film_data_t;
 
-static void demux_seek_film(demuxer_t *demuxer, float rel_seek_secs, int flags)
+static void demux_seek_film(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags)
 {
   film_data_t *film_data = (film_data_t *)demuxer->priv;
   int new_current_chunk=(flags&1)?0:film_data->current_chunk;

Index: demux_fli.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_fli.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- demux_fli.c	5 Aug 2005 19:57:46 -0000	1.11
+++ demux_fli.c	7 Feb 2006 20:22:44 -0000	1.12
@@ -22,7 +22,7 @@
   unsigned int *frame_size;
 } fli_frames_t;
 
-static void demux_seek_fli(demuxer_t *demuxer,float rel_seek_secs,int flags){
+static void demux_seek_fli(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
   fli_frames_t *frames = (fli_frames_t *)demuxer->priv;
   sh_video_t *sh_video = demuxer->video->sh;
   int newpos=(flags&1)?0:frames->current_frame;

Index: demux_lavf.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_lavf.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- demux_lavf.c	13 Jan 2006 00:23:31 -0000	1.24
+++ demux_lavf.c	7 Feb 2006 20:22:44 -0000	1.25
@@ -389,9 +389,9 @@
     return 1;
 }
 
-static void demux_seek_lavf(demuxer_t *demuxer, float rel_seek_secs, int flags){
+static void demux_seek_lavf(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags){
     lavf_priv_t *priv = demuxer->priv;
-    mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_seek_lavf(%p, %f, %d)\n", demuxer, rel_seek_secs, flags);
+    mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_seek_lavf(%p, %f, %f, %d)\n", demuxer, rel_seek_secs, audio_delay, flags);
     
 #if LIBAVFORMAT_BUILD < 4619
     av_seek_frame(priv->avfc, -1, priv->last_pts + rel_seek_secs*AV_TIME_BASE);

Index: demux_mf.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_mf.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- demux_mf.c	5 Aug 2005 19:57:46 -0000	1.14
+++ demux_mf.c	7 Feb 2006 20:22:44 -0000	1.15
@@ -15,7 +15,7 @@
 #include "stheader.h"
 #include "mf.h"
 
-static void demux_seek_mf(demuxer_t *demuxer,float rel_seek_secs,int flags){
+static void demux_seek_mf(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
   mf_t * mf = (mf_t *)demuxer->priv;
   sh_video_t   * sh_video = demuxer->video->sh;
   int newpos = (flags & 1)?0:mf->curr_frame;

Index: demux_mov.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_mov.c,v
retrieving revision 1.136
retrieving revision 1.137
diff -u -r1.136 -r1.137
--- demux_mov.c	12 Jan 2006 20:04:34 -0000	1.136
+++ demux_mov.c	7 Feb 2006 20:22:44 -0000	1.137
@@ -2007,7 +2007,7 @@
 return pts;
 }
 
-static void demux_seek_mov(demuxer_t *demuxer,float pts,int flags){
+static void demux_seek_mov(demuxer_t *demuxer,float pts,float audio_delay,int flags){
     mov_priv_t* priv=demuxer->priv;
     demux_stream_t* ds;
     mov_track_t* trak;

Index: demux_mpg.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_mpg.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -r1.69 -r1.70
--- demux_mpg.c	12 Jan 2006 20:04:34 -0000	1.69
+++ demux_mpg.c	7 Feb 2006 20:22:44 -0000	1.70
@@ -676,7 +676,7 @@
 
 extern void skip_audio_frame(sh_audio_t *sh_audio);
 
-void demux_seek_mpg(demuxer_t *demuxer,float rel_seek_secs,int flags){
+void demux_seek_mpg(demuxer_t *demuxer,float rel_seek_secs,float audio_delay, int flags){
     demux_stream_t *d_audio=demuxer->audio;
     demux_stream_t *d_video=demuxer->video;
     sh_audio_t *sh_audio=d_audio->sh;

Index: demux_nsv.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_nsv.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- demux_nsv.c	30 Aug 2005 19:06:55 -0000	1.12
+++ demux_nsv.c	7 Feb 2006 20:22:44 -0000	1.13
@@ -34,7 +34,7 @@
 /**
  * Seeking still to be implemented
  */
-static void demux_seek_nsv ( demuxer_t *demuxer, float rel_seek_secs, int flags )
+static void demux_seek_nsv ( demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags )
 {
 // seeking is not yet implemented
 }

Index: demux_nuv.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_nuv.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- demux_nuv.c	25 Oct 2005 20:01:09 -0000	1.16
+++ demux_nuv.c	7 Feb 2006 20:22:44 -0000	1.17
@@ -63,7 +63,7 @@
 /**
  * Seek to a position relative to the current position, indicated in time.
  */
-static void demux_seek_nuv ( demuxer_t *demuxer, float rel_seek_secs, int flags )
+static void demux_seek_nuv ( demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags )
 {
 #define MAX_TIME 1000000
 	nuv_priv_t* priv = demuxer->priv;

Index: demux_pva.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_pva.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- demux_pva.c	12 Jan 2006 20:04:34 -0000	1.7
+++ demux_pva.c	7 Feb 2006 20:22:44 -0000	1.8
@@ -466,7 +466,7 @@
 	return 1;
 }
 
-static void demux_seek_pva(demuxer_t * demuxer,float rel_seek_secs,int flags)
+static void demux_seek_pva(demuxer_t * demuxer,float rel_seek_secs,float audio_delay,int flags)
 {
 	int total_bitrate=0;
 	off_t dest_offset;

Index: demux_rawdv.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_rawdv.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- demux_rawdv.c	12 Jan 2006 20:04:34 -0000	1.12
+++ demux_rawdv.c	7 Feb 2006 20:22:44 -0000	1.13
@@ -36,7 +36,7 @@
    dv_decoder_t *decoder;
 } rawdv_frames_t;
 
-static void demux_seek_rawdv(demuxer_t *demuxer,float rel_seek_secs,int flags)
+static void demux_seek_rawdv(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags)
 {
    rawdv_frames_t *frames = (rawdv_frames_t *)demuxer->priv;
    sh_video_t *sh_video = demuxer->video->sh;

Index: demux_real.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_real.c,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -r1.86 -r1.87
--- demux_real.c	15 Jan 2006 22:00:53 -0000	1.86
+++ demux_real.c	7 Feb 2006 20:22:44 -0000	1.87
@@ -1825,7 +1825,7 @@
 }
 
 /* please upload RV10 samples WITH INDEX CHUNK */
-static void demux_seek_real(demuxer_t *demuxer, float rel_seek_secs, int flags)
+static void demux_seek_real(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags)
 {
     real_priv_t *priv = demuxer->priv;
     demux_stream_t *d_audio = demuxer->audio;

Index: demux_realaud.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_realaud.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- demux_realaud.c	15 Jan 2006 21:58:10 -0000	1.11
+++ demux_realaud.c	7 Feb 2006 20:22:44 -0000	1.12
@@ -341,7 +341,7 @@
 
 #if 0
 /* please upload RV10 samples WITH INDEX CHUNK */
-int demux_seek_ra(demuxer_t *demuxer, float rel_seek_secs, int flags)
+int demux_seek_ra(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags)
 {
     real_priv_t *priv = demuxer->priv;
     demux_stream_t *d_audio = demuxer->audio;

Index: demux_ts.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_ts.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- demux_ts.c	27 Jan 2006 23:07:16 -0000	1.42
+++ demux_ts.c	7 Feb 2006 20:22:44 -0000	1.43
@@ -3071,7 +3071,7 @@
 extern int sync_video_packet(demux_stream_t *);
 extern int skip_video_packet(demux_stream_t *);
 
-static void demux_seek_ts(demuxer_t *demuxer, float rel_seek_secs, int flags)
+static void demux_seek_ts(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags)
 {
 	demux_stream_t *d_audio=demuxer->audio;
 	demux_stream_t *d_video=demuxer->video;

Index: demux_ty.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_ty.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- demux_ty.c	12 Jan 2006 20:04:34 -0000	1.13
+++ demux_ty.c	7 Feb 2006 20:22:44 -0000	1.14
@@ -1237,7 +1237,7 @@
    return( 1 );
 }
 
-static void demux_seek_ty( demuxer_t *demuxer, float rel_seek_secs, int flags )
+static void demux_seek_ty( demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags )
 {
    demux_stream_t *d_audio = demuxer->audio;
    demux_stream_t *d_video = demuxer->video;

Index: demux_vqf.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_vqf.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- demux_vqf.c	18 Nov 2005 14:39:19 -0000	1.6
+++ demux_vqf.c	7 Feb 2006 20:22:44 -0000	1.7
@@ -179,7 +179,7 @@
   return 1;
 }
 
-static void demux_seek_vqf(demuxer_t *demuxer,float rel_seek_secs,int flags){
+static void demux_seek_vqf(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
 #if 0
   stream_t* s = demuxer->stream;
   sh_audio_t* sh_audio = demuxer->audio->sh;

Index: demux_y4m.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demux_y4m.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- demux_y4m.c	5 Aug 2005 19:57:47 -0000	1.10
+++ demux_y4m.c	7 Feb 2006 20:22:44 -0000	1.11
@@ -231,7 +231,7 @@
     return demuxer;
 }
 
-static void demux_seek_y4m(demuxer_t *demuxer, float rel_seek_secs, int flags) {
+static void demux_seek_y4m(demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags) {
     sh_video_t* sh = demuxer->video->sh;
     y4m_priv_t* priv = demuxer->priv;
     int rel_seek_frames = sh->fps*rel_seek_secs;

Index: demuxer.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demuxer.c,v
retrieving revision 1.214
retrieving revision 1.215
diff -u -r1.214 -r1.215
--- demuxer.c	17 Jan 2006 20:04:49 -0000	1.214
+++ demuxer.c	7 Feb 2006 20:22:44 -0000	1.215
@@ -859,7 +859,7 @@
 }
 
 
-int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags){
+int demux_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
     demux_stream_t *d_audio=demuxer->audio;
     demux_stream_t *d_video=demuxer->video;
     sh_audio_t *sh_audio=d_audio->sh;

Index: demuxer.h
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/demuxer.h,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -r1.85 -r1.86
--- demuxer.h	17 Jan 2006 20:04:49 -0000	1.85
+++ demuxer.h	7 Feb 2006 20:22:44 -0000	1.86
@@ -300,7 +300,7 @@
 }
 
 demuxer_t* demux_open(stream_t *stream,int file_format,int aid,int vid,int sid,char* filename);
-int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
+int demux_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags);
 demuxer_t*  new_demuxers_demuxer(demuxer_t* vd, demuxer_t* ad, demuxer_t* sd);
 
 // AVI demuxer params:




More information about the MPlayer-cvslog mailing list