1
0
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:
wm4 2016-02-09 22:19:01 +01:00
parent 668ba7441a
commit b7f6dfc19a
3 changed files with 18 additions and 4 deletions

View File

@ -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.

View File

@ -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;
}

View File

@ -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;