From d5981924feb02384f9facbedc9fff2fb89ac8db3 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 13 Nov 2015 22:48:32 +0100 Subject: command: add vsync-ratio property This is very "illustrative", unlike the video-speed-correction property, and thus useful. It can also be used to observe scheduling errors, which are not detected by the core. (These happen due to rounding errors; possibly not evne our fault, but coming from files with rounded timestamps and so on.) --- player/video.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'player/video.c') diff --git a/player/video.c b/player/video.c index 8ee9c87e93..5ef327aa09 100644 --- a/player/video.c +++ b/player/video.c @@ -1001,6 +1001,8 @@ static void handle_display_sync_frame(struct MPContext *mpctx, mpctx->total_avsync_change = 0; update_av_diff(mpctx, time_left * opts->playback_speed); + mpctx->past_frames[0].num_vsyncs = num_vsyncs; + if (resample) adjust_audio_speed(mpctx, vsync); @@ -1177,9 +1179,10 @@ void write_video(struct MPContext *mpctx, double endpts) mpctx->num_past_frames--; MP_TARRAY_INSERT_AT(mpctx, mpctx->past_frames, mpctx->num_past_frames, 0, (struct frame_info){0}); - struct frame_info *frame_info = &mpctx->past_frames[0]; - - frame_info->pts = mpctx->next_frames[0]->pts; + mpctx->past_frames[0] = (struct frame_info){ + .pts = mpctx->next_frames[0]->pts, + .num_vsyncs = -1, + }; calculate_frame_duration(mpctx); struct vo_frame dummy = { @@ -1193,7 +1196,7 @@ void write_video(struct MPContext *mpctx, double endpts) dummy.frames[n] = mpctx->next_frames[n]; struct vo_frame *frame = vo_frame_ref(&dummy); - double diff = frame_info->approx_duration; + double diff = mpctx->past_frames[0].approx_duration; if (opts->untimed || vo->driver->untimed) diff = -1; // disable frame dropping and aspects of frame timing if (diff >= 0) { -- cgit v1.2.3