changeset 33912:b3d3034bc162

Remove strange pts locking code that would never really result in good A-V sync and actually break it quite seriously in some cases (Reportedly NTSC DVDs with pullup under high CPU load?) Patch by Steaphan Greene [sgreene <at> cs binghamton edu]
author reimar
date Thu, 18 Aug 2011 19:15:06 +0000
parents 552f50c89163
children 8f81a826c86e
files mp_core.h mplayer.c
diffstat 2 files changed, 0 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/mp_core.h	Thu Aug 18 18:56:09 2011 +0000
+++ b/mp_core.h	Thu Aug 18 19:15:06 2011 +0000
@@ -95,8 +95,6 @@
     int startup_decode_retry;
     // how long until we need to display the "current" frame
     float time_frame;
-    // flag to indicate that we've found a correctly timed video frame PTS
-    int framestep_found;
 
     // AV sync: the next frame should be shown when the audio out has this
     // much (in seconds) buffered data left. Increased when more data is
--- a/mplayer.c	Thu Aug 18 18:56:09 2011 +0000
+++ b/mplayer.c	Thu Aug 18 19:15:06 2011 +0000
@@ -2429,29 +2429,6 @@
 
             if (full_frame) {
                 sh_video->timer += frame_time;
-
-                // Time-based PTS recalculation.
-                // The key to maintaining A-V sync is to not touch PTS until the proper frame is reached
-                if (sh_video->pts != MP_NOPTS_VALUE) {
-                    if (sh_video->last_pts != MP_NOPTS_VALUE) {
-                        double pts     = sh_video->last_pts + frame_time;
-                        double ptsdiff = fabs(pts - sh_video->pts);
-
-                        // Allow starting PTS recalculation at the appropriate frame only
-                        mpctx->framestep_found |= (ptsdiff <= frame_time * 1.5);
-
-                        // replace PTS only if we're not too close and not too far
-                        // and a correctly timed frame has been found, otherwise
-                        // keep pts to eliminate rounding errors or catch up with stream
-                        if (ptsdiff > frame_time * 20)
-                            mpctx->framestep_found = 0;
-                        if (ptsdiff * 10 > frame_time && mpctx->framestep_found)
-                            sh_video->pts = pts;
-                        else
-                            mp_dbg(MSGT_AVSYNC, MSGL_DBG2, "Keeping PTS at %6.2f\n", sh_video->pts);
-                    }
-                    sh_video->last_pts = sh_video->pts;
-                }
                 if (mpctx->sh_audio)
                     mpctx->delay -= frame_time;
                 // video_read_frame can change fps (e.g. for ASF video)
@@ -2695,7 +2672,6 @@
         mpctx->num_buffered_frames = 0;
         mpctx->delay           = 0;
         mpctx->time_frame      = 0;
-        mpctx->framestep_found = 0;
         // Not all demuxers set d_video->pts during seek, so this value
         // (which is used by at least vobsub and edl code below) may
         // be completely wrong (probably 0).
@@ -3596,7 +3572,6 @@
 
     {
         mpctx->num_buffered_frames = 0;
-        mpctx->framestep_found     = 0;
 
         // Make sure old OSD does not stay around,
         // e.g. with -fixed-vo and same-resolution files