diff options
author | wm4 <wm4@nowhere> | 2015-11-29 17:41:01 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-11-29 17:56:08 +0100 |
commit | 03a81a9d8526c3c636bd23e18e28dfecf2fb39da (patch) | |
tree | cc5e714763d58f9d36b1a39dec09dedad1bdbd49 /video | |
parent | e2c0e7f5c27e0dfda9271163205c527b8607edad (diff) |
vo: make using estimated FPS more conservative
Don't use the average FPS if there are likely skipped vsyncs. Note that
we don't use the normal skip detection, as it is unreliable if the real
and assumed display FPS differ too much. The normal skip detection is
still in place as it's more reliable in the case when vsync jitters
much, but the display FPS is relatively exact.
Further improvement over commit 41f2c653.
Diffstat (limited to 'video')
-rw-r--r-- | video/out/vo.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/video/out/vo.c b/video/out/vo.c index 90018511d4..2920a4669c 100644 --- a/video/out/vo.c +++ b/video/out/vo.c @@ -387,10 +387,16 @@ static void update_vsync_timing_after_swap(struct vo *vo) in->estimated_vsync_interval <= 1e6 / 20.0 && in->estimated_vsync_interval >= 1e6 / 99.0) { + for (int n = 0; n < in->num_vsync_samples; n++) { + if (fabs(in->vsync_samples[n] - in->estimated_vsync_interval) + >= in->estimated_vsync_interval / 4) + goto done; + } double mjitter = vsync_stddef(vo, in->estimated_vsync_interval); double njitter = vsync_stddef(vo, in->nominal_vsync_interval); if (mjitter * 1.01 < njitter) use_estimated = true; + done: ; } if (use_estimated == (in->vsync_interval == in->nominal_vsync_interval)) { if (use_estimated) { |