On Sonntag 21 Januar 2007 11:52, Torgeir Veimo wrote:
> If you're struggling with bad lip sync using either mgatv or viatv  
> output, try applying this patch to reduce the allowed difference  
> between audio and video;

I'm seeing a similar problem with my G400.
But I reduced the skip limit from 8 to 6. Prehaps I should reduce it more.
Further I added some logging:
Jan 22 21:04:44 bodega1 vdr: [6464] [mpeg2decoder] skipped (10, 210 [2490 -> 
586])
Jan 22 21:05:59 bodega1 vdr: [6464] [mpeg2decoder] skipped (9, 171 [2530 -> 
613])
Jan 22 21:07:01 bodega1 vdr: [6464] [mpeg2decoder] skipped (10, 209 [2567 -> 
655])
Jan 22 21:08:11 bodega1 vdr: [6464] [mpeg2decoder] skipped (9, 170 [2608 -> 
707])

So my system skips around 9 to 10 frames per minute.
60 * 25 = 1500 frames.
So the TV frame rate is 25 * 1490 / 1500 = 24.833 Hz .

I guess I've to ask Ville if there is a way to increase the dot clock 
of my card in some way.

diff to get the numbers:
? dfb_report_skipped-01.diff
Index: mpeg2decoder.c
===================================================================
RCS file: /cvsroot/softdevice/softdevice/mpeg2decoder.c,v
retrieving revision 1.70
diff -U3 -r1.70 mpeg2decoder.c
--- mpeg2decoder.c      7 Nov 2006 19:01:37 -0000       1.70
+++ mpeg2decoder.c      22 Jan 2007 20:22:07 -0000
@@ -923,10 +923,28 @@
   else if (delay < -frametime()*100)
     delay = -frametime()*100;
 
-  if (offset >  8*frametime())
-     hurry_up=1;
-  else if ( (offset < 2*frametime()) && (hurry_up > 0) )
-     hurry_up=0;
+  {
+      static uint64_t skip_time = 0;
+      static int      frames_skipped = 0,
+                      start_offset = 0;
+
+    if (hurry_up)
+      frames_skipped++;
+
+    if (offset >  6*frametime()) {
+      if (!hurry_up) {
+        frames_skipped = 0;
+        start_offset = offset;
+        skip_time = getTimeMilis();
+      }
+      hurry_up=1;
+    } else if ( (offset < 2*frametime()) && (hurry_up > 0) ) {
+      hurry_up=0;
+      skip_time = getTimeMilis() - skip_time;
+      dsyslog ("[mpeg2decoder] skipped (%d, %lld [%d -> %d])",
+               frames_skipped, skip_time, start_offset, offset);
+    }
+  }
 
 #if 1
   int dispTime=syncTimer->GetRelTime();

-- 
Stefan Lucke
_______________________________________________
Softdevice-devel mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/softdevice-devel

Reply via email to