video: fix waiting for last frame/format reconfig

We still need to send the VO a duration in these cases. Disabling
framedrop has logically absolutely nothing to do with these cases; it
was overlooked in commit 918b06c4.

So we always send the frame duration (or a guess for it), and check
whether framedropping is actually enabled in the VO code. (It would
be cleaner to send framedrop as a flag, but I don't care about that
right now.)
This commit is contained in:
wm4 2015-01-19 18:00:41 +01:00
parent 616cfb90c1
commit 234d632920
2 changed files with 2 additions and 1 deletions

View File

@ -824,7 +824,7 @@ void write_video(struct MPContext *mpctx, double endpts)
diff = vpts1 - vpts0; diff = vpts1 - vpts0;
if (diff < 0 && mpctx->d_video->fps > 0) if (diff < 0 && mpctx->d_video->fps > 0)
diff = 1.0 / mpctx->d_video->fps; // fallback to demuxer-reported fps diff = 1.0 / mpctx->d_video->fps; // fallback to demuxer-reported fps
if (opts->untimed || vo->driver->untimed || !(opts->frame_dropping & 1)) if (opts->untimed || vo->driver->untimed)
diff = -1; // disable frame dropping and aspects of frame timing diff = -1; // disable frame dropping and aspects of frame timing
if (diff >= 0) { if (diff >= 0) {
// expected A/V sync correction is ignored // expected A/V sync correction is ignored

View File

@ -567,6 +567,7 @@ static bool render_frame(struct vo *vo)
in->dropped_frame = duration >= 0 && end_time < next_vsync; in->dropped_frame = duration >= 0 && end_time < next_vsync;
in->dropped_frame &= !(vo->driver->caps & VO_CAP_FRAMEDROP); in->dropped_frame &= !(vo->driver->caps & VO_CAP_FRAMEDROP);
in->dropped_frame &= !(vo->global->opts->frame_dropping & 1);
// Even if we're hopelessly behind, rather degrade to 10 FPS playback, // Even if we're hopelessly behind, rather degrade to 10 FPS playback,
// instead of just freezing the display forever. // instead of just freezing the display forever.
in->dropped_frame &= mp_time_us() - in->last_flip < 100 * 1000; in->dropped_frame &= mp_time_us() - in->last_flip < 100 * 1000;