mirror of
https://github.com/mpv-player/mpv
synced 2024-12-27 01:22:30 +00:00
player: force refresh seek when changing audio filters
Unfortunately I see no better solution. The refresh seek is skipped if the amount of buffered audio is not overly huge. Unfortunately softvol af_volume insertion still can cause this issue, because it's outside of the normal dynamic filter chain changing code. Move the video refresh call to reinit_video_filters() to make it more uniform along with the audio code.
This commit is contained in:
parent
668ba7441a
commit
b7f6dfc19a
@ -147,8 +147,23 @@ int reinit_audio_filters(struct MPContext *mpctx)
|
||||
if (!ao_c)
|
||||
return 0;
|
||||
|
||||
double delay = 0;
|
||||
if (ao_c->af->initialized > 0)
|
||||
delay = af_calc_delay(ao_c->af);
|
||||
|
||||
af_uninit(ao_c->af);
|
||||
return recreate_audio_filters(mpctx) < 0 ? -1 : 1;
|
||||
if (recreate_audio_filters(mpctx) < 0)
|
||||
return -1;
|
||||
|
||||
// Only force refresh if the amount of dropped buffered data is going to
|
||||
// cause "issues" for the A/V sync logic.
|
||||
if (mpctx->audio_status == STATUS_PLAYING &&
|
||||
mpctx->playback_pts != MP_NOPTS_VALUE && delay > 0.2)
|
||||
{
|
||||
queue_seek(mpctx, MPSEEK_ABSOLUTE, mpctx->playback_pts,
|
||||
MPSEEK_EXACT, true);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Call this if opts->playback_speed or mpctx->speed_factor_* change.
|
||||
|
@ -4044,9 +4044,6 @@ static int set_filters(struct MPContext *mpctx, enum stream_type mediatype,
|
||||
reinit_filters(mpctx, mediatype);
|
||||
}
|
||||
|
||||
if (mediatype == STREAM_VIDEO)
|
||||
mp_force_video_refresh(mpctx);
|
||||
|
||||
return success ? 0 : -1;
|
||||
}
|
||||
|
||||
|
@ -226,6 +226,8 @@ int reinit_video_filters(struct MPContext *mpctx)
|
||||
if (need_reconfig)
|
||||
filter_reconfig(vo_c);
|
||||
|
||||
mp_force_video_refresh(mpctx);
|
||||
|
||||
mp_notify(mpctx, MPV_EVENT_VIDEO_RECONFIG, NULL);
|
||||
|
||||
return vo_c->vf->initialized;
|
||||
|
Loading…
Reference in New Issue
Block a user