mirror of
https://github.com/mpv-player/mpv
synced 2025-03-09 23:58:06 +00:00
player/video: subtract frame_time from delay when ao_chain starts audio
This seems more robust than relying on the audio status to actually be playing. For files where there is no audio or the audio start is delayed, this guards against that but it allows the subtraction to always occur otherwise on normal files with audio.
This commit is contained in:
parent
60abbb424b
commit
d10cebec13
@ -846,6 +846,7 @@ void audio_start_ao(struct MPContext *mpctx)
|
||||
}
|
||||
|
||||
MP_VERBOSE(mpctx, "starting audio playback\n");
|
||||
ao_c->audio_started = true;
|
||||
ao_start(ao_c->ao);
|
||||
mpctx->audio_status = STATUS_PLAYING;
|
||||
if (ao_c->out_eof) {
|
||||
|
@ -192,6 +192,8 @@ struct ao_chain {
|
||||
double start_pts;
|
||||
bool start_pts_known;
|
||||
|
||||
bool audio_started;
|
||||
|
||||
struct track *track;
|
||||
struct mp_pin *filter_src;
|
||||
struct mp_pin *dec_src;
|
||||
|
@ -359,7 +359,6 @@ static void adjust_sync(struct MPContext *mpctx, double v_pts, double frame_time
|
||||
if (mpctx->audio_status != STATUS_PLAYING)
|
||||
return;
|
||||
|
||||
mpctx->delay -= frame_time;
|
||||
double a_pts = written_audio_pts(mpctx) + opts->audio_delay - mpctx->delay;
|
||||
double av_delay = a_pts - v_pts;
|
||||
|
||||
@ -401,6 +400,8 @@ static void handle_new_frame(struct MPContext *mpctx)
|
||||
}
|
||||
}
|
||||
mpctx->time_frame += frame_time / mpctx->video_speed;
|
||||
if (mpctx->ao_chain && mpctx->ao_chain->audio_started)
|
||||
mpctx->delay -= frame_time;
|
||||
if (mpctx->video_status >= STATUS_PLAYING)
|
||||
adjust_sync(mpctx, pts, frame_time);
|
||||
MP_TRACE(mpctx, "frametime=%5.3f\n", frame_time);
|
||||
|
Loading…
Reference in New Issue
Block a user