0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 03:52:22 +02:00

player: allow seeking audio between video frames

This allows seeking audio between two video frames that are relatively
far away.

The implementation of this is a bit subtle. It pretend the audio
position is different, and the actual PTS adjustment happens in audio.c
with this line:

    sync_pts -= mpctx->audio_delay - mpctx->delay;

Effectively this is the same as setting sync_pts to hrseek_pts after
this line, though. (I'm actually not sure if this could be written in a
more straightforward way; probably yes.)
This commit is contained in:
wm4 2015-01-28 19:38:49 +01:00
parent 7f7340ce76
commit 7b3feecbc2

View File

@ -588,8 +588,16 @@ static int video_output_image(struct MPContext *mpctx, double endpts)
frame_time = 0;
}
mpctx->video_next_pts = pts;
if (mpctx->d_audio)
if (mpctx->d_audio) {
mpctx->delay -= frame_time;
// When resuming after a hr-seek, let audio advance the position to
// the actual seek target.
if (mpctx->video_status == STATUS_SYNCING && mpctx->hrseek_active &&
pts != MP_NOPTS_VALUE)
{
mpctx->delay -= mpctx->hrseek_pts - pts;
}
}
if (mpctx->video_status >= STATUS_READY) {
mpctx->time_frame += frame_time / mpctx->opts->playback_speed;
adjust_sync(mpctx, pts, frame_time);