diff --git a/player/video.c b/player/video.c index 23e3747219..05c5fd42e1 100644 --- a/player/video.c +++ b/player/video.c @@ -786,7 +786,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; @@ -824,6 +824,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; diff --git a/video/out/vo.c b/video/out/vo.c index 0957f71813..0665eb7b80 100644 --- a/video/out/vo.c +++ b/video/out/vo.c @@ -562,8 +562,7 @@ static bool render_frame(struct vo *vo) int64_t next_vsync = prev_sync(vo, mp_time_us()) + in->vsync_interval; int64_t end_time = pts + duration; - if (!(vo->global->opts->frame_dropping & 1) || !in->hasframe_rendered || - vo->driver->untimed || vo->driver->encode) + if (!in->hasframe_rendered) duration = -1; // disable framedrop in->dropped_frame = duration >= 0 && end_time < next_vsync;