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:
parent
5a0e71a972
commit
da8c199505
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user