If an invalid pts value is detected, try to to make up some if it seems

reasonable.
This avoids completely losing A-V sync e.g. when pts was not reordered correctly.
This was tested with http://samples.mplayerhq.hu/V-codecs/h264/PAFF/tv_cut.mkv
for this sample proper pts reordering is the correct solution, but more resilient
handling of the error case is still useful.


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31311 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2010-06-03 20:39:41 +00:00
parent d6d87593a7
commit 9343d1cb2d
1 changed files with 8 additions and 2 deletions

View File

@ -2401,8 +2401,14 @@ static double update_video(int *blit_frame)
if (sh_video->last_pts == MP_NOPTS_VALUE)
sh_video->last_pts= sh_video->pts;
else if (sh_video->last_pts > sh_video->pts) {
sh_video->last_pts = sh_video->pts;
mp_msg(MSGT_CPLAYER, MSGL_INFO, "pts value < previous\n");
// make a guess whether this is some kind of discontinuity
// we should jump along with or some wron timestamps we
// should replace instead
if (sh_video->pts < sh_video->last_pts - 20 * sh_video->frametime)
sh_video->last_pts = sh_video->pts;
else
sh_video->pts = sh_video->last_pts + sh_video->frametime;
mp_msg(MSGT_CPLAYER, MSGL_V, "pts value < previous\n");
}
frame_time = sh_video->pts - sh_video->last_pts;
sh_video->last_pts = sh_video->pts;