1
0
mirror of https://github.com/mpv-player/mpv synced 2025-01-30 11:42:04 +00:00

core: timing: fix overflow with extreme playback speed

With extreme playback speed changes it was possible to trigger an
overflow in code calculating frame timing. This could break the VDPAU
frame scheduling mechanism and lead to the shown picture not changing
until reset by events such as seeking. Add an extra check to prevent
the overflow.
This commit is contained in:
Uoti Urpala 2011-01-28 20:15:22 +02:00
parent 5a0e71a972
commit da8c199505

View File

@ -3422,7 +3422,11 @@ static void run_playloop(struct MPContext *mpctx)
mpctx->time_frame += mpctx->video_out->flip_queue_offset;
unsigned int t2 = GetTimer();
unsigned int pts_us = mpctx->last_time + mpctx->time_frame * 1e6;
/* Playing with playback speed it's possible to get pathological
* cases with mpctx->time_frame negative enough to cause an
* overflow in pts_us calculation, thus the FFMAX. */
double time_frame = FFMAX(mpctx->time_frame, -1);
unsigned int pts_us = mpctx->last_time + time_frame * 1e6;
int duration = -1;
double pts2 = mpctx->video_out->next_pts2;
if (pts2 != MP_NOPTS_VALUE && opts->correct_pts