diff libmpdemux/muxer_avi.c @ 17659:92ac78a93625

Fix video delay when encoding with B-frames. Encoding delay is adjusted for on-the-fly during encoding. Decoding delay is compensated for by setting an appropriate dwStart on the audio stream (only in muxer_avi at this point).
author corey
date Tue, 21 Feb 2006 09:39:22 +0000
parents 5963b50c2178
children 4928dd61f136
line wrap: on
line diff
--- a/libmpdemux/muxer_avi.c	Mon Feb 20 23:50:40 2006 +0000
+++ b/libmpdemux/muxer_avi.c	Tue Feb 21 09:39:22 2006 +0000
@@ -665,10 +665,19 @@
   }
 }
 
+static void avifile_fix_parameters(muxer_stream_t *s){
+  /* adjust audio_delay_fix according to individual stream delay */
+  if (s->type == MUXER_TYPE_AUDIO)
+    s->muxer->audio_delay_fix -= (float)s->decoder_delay * s->h.dwScale/s->h.dwRate;
+  if (s->type == MUXER_TYPE_VIDEO)
+    s->muxer->audio_delay_fix += (float)s->decoder_delay * s->h.dwScale/s->h.dwRate;
+}
+
 int muxer_init_muxer_avi(muxer_t *muxer){
   muxer->cont_new_stream = &avifile_new_stream;
   muxer->cont_write_chunk = &avifile_write_chunk;
   muxer->cont_write_header = &avifile_write_header;
   muxer->cont_write_index = &avifile_write_index;
+  muxer->fix_stream_parameters = &avifile_fix_parameters;
   return 1;
 }