summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--player/video.c4
-rw-r--r--video/out/vo.c3
2 files changed, 4 insertions, 3 deletions
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;