From d8455f34c13a002a01c9b3a9e356a98edfececeb Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 16 Jan 2015 13:45:43 +0100 Subject: player: respect --untimed on last frame The last video frame is another case that has a separate code path, although it's pretty similar to the one in commit 73e5aa87. Fix this in a different way, which also takes care of the last frame case, although without context the code becomes slightly more tricky. As further cleanup, move the decision about framedropping itself to the same place, so the check in vo.c becomes much simpler. The check for the vo->driver->encode flag, which is remvoed completely, was redundant too. Fixes #1480. --- player/video.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'player') diff --git a/player/video.c b/player/video.c index 50fa8d7a3d..55daade37a 100644 --- a/player/video.c +++ b/player/video.c @@ -756,7 +756,7 @@ void write_video(struct MPContext *mpctx, double endpts) struct mp_image_params p = mpctx->next_frame[0]->params; if (!vo->params || !mp_image_params_equal(&p, vo->params)) { // Changing config deletes the current frame; wait until it's finished. - if (vo_still_displaying(vo) && !(opts->untimed || vo->driver->untimed)) + if (vo_still_displaying(vo)) return; const struct vo_driver *info = mpctx->video_out->driver; @@ -790,6 +790,8 @@ void write_video(struct MPContext *mpctx, double endpts) diff = vpts1 - vpts0; if (diff < 0 && mpctx->d_video->fps > 0) diff = 1.0 / mpctx->d_video->fps; // fallback to demuxer-reported fps + if (opts->untimed || vo->driver->untimed || !(opts->frame_dropping & 1)) + diff = -1; // disable frame dropping and aspects of frame timing if (diff >= 0) { // expected A/V sync correction is ignored diff /= opts->playback_speed; -- cgit v1.2.3