mirror of
https://github.com/mpv-player/mpv
synced 2024-12-26 09:02:38 +00:00
vo_gpu: d3d11: prevent wraparound in queued frames calc
If expected_sync_pc is greater than submit_count, the unsigned subtraction will wraparound, which breaks playback. This bug was found while experimenting with bit-blt model present, but it might be possible to trigger it with the flip model as well, if there was a dropped frame.
This commit is contained in:
parent
ca0177481b
commit
7384b05433
@ -296,8 +296,9 @@ static void d3d11_get_vsync(struct ra_swapchain *sw, struct vo_vsync_info *info)
|
||||
|
||||
// Now guess the timestamp of the last submitted frame based on the
|
||||
// timestamp of the frame at SyncRefreshCount and the frame rate
|
||||
int queued_frames = submit_count - expected_sync_pc;
|
||||
int64_t last_queue_display_time_qpc = stats.SyncQPCTime.QuadPart +
|
||||
(submit_count - expected_sync_pc) * p->vsync_duration_qpc;
|
||||
queued_frames * p->vsync_duration_qpc;
|
||||
|
||||
// Only set the estimated display time if it's after the last submission
|
||||
// time. It could be before if mpv skips a lot of frames.
|
||||
|
Loading…
Reference in New Issue
Block a user