mirror of https://github.com/mpv-player/mpv
Revert "player: reset av state on speed changes"
Ended up being too flawed and caused trouble in other areas. There's
other approaches to trying to solve the issue this meant to address in
the works that should be better, so let's wait on that. Fixes #13613 and
fixes #13622.
This reverts commit e3af545421
.
This commit is contained in:
parent
d10cebec13
commit
9ac791c329
|
@ -7246,7 +7246,6 @@ void mp_option_change_callback(void *ctx, struct m_config_option *co, int flags,
|
||||||
|
|
||||||
if (opt_ptr == &opts->playback_speed) {
|
if (opt_ptr == &opts->playback_speed) {
|
||||||
update_playback_speed(mpctx);
|
update_playback_speed(mpctx);
|
||||||
reset_av_state(mpctx);
|
|
||||||
mp_wakeup_core(mpctx);
|
mp_wakeup_core(mpctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -637,7 +637,6 @@ void update_osd_msg(struct MPContext *mpctx);
|
||||||
bool update_subtitles(struct MPContext *mpctx, double video_pts);
|
bool update_subtitles(struct MPContext *mpctx, double video_pts);
|
||||||
|
|
||||||
// video.c
|
// video.c
|
||||||
void reset_av_state(struct MPContext *mpctx);
|
|
||||||
void reset_video_state(struct MPContext *mpctx);
|
void reset_video_state(struct MPContext *mpctx);
|
||||||
int init_video_decoder(struct MPContext *mpctx, struct track *track);
|
int init_video_decoder(struct MPContext *mpctx, struct track *track);
|
||||||
void reinit_video_chain(struct MPContext *mpctx);
|
void reinit_video_chain(struct MPContext *mpctx);
|
||||||
|
|
|
@ -45,8 +45,6 @@
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
#include "screenshot.h"
|
#include "screenshot.h"
|
||||||
|
|
||||||
#define MIN_PAST_FRAMES 10
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
// update_video() - code also uses: <0 error, 0 eof, >0 progress
|
// update_video() - code also uses: <0 error, 0 eof, >0 progress
|
||||||
VD_ERROR = -1,
|
VD_ERROR = -1,
|
||||||
|
@ -97,17 +95,6 @@ static void vo_chain_reset_state(struct vo_chain *vo_c)
|
||||||
vo_c->underrun_signaled = false;
|
vo_c->underrun_signaled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_av_state(struct MPContext *mpctx)
|
|
||||||
{
|
|
||||||
mpctx->delay = 0;
|
|
||||||
mpctx->display_sync_drift_dir = 0;
|
|
||||||
mpctx->display_sync_error = 0;
|
|
||||||
mpctx->last_av_difference = 0;
|
|
||||||
mpctx->logged_async_diff = -1;
|
|
||||||
mpctx->num_past_frames = 0;
|
|
||||||
mpctx->total_avsync_change = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void reset_video_state(struct MPContext *mpctx)
|
void reset_video_state(struct MPContext *mpctx)
|
||||||
{
|
{
|
||||||
if (mpctx->vo_chain) {
|
if (mpctx->vo_chain) {
|
||||||
|
@ -606,9 +593,7 @@ static void update_avsync_before_frame(struct MPContext *mpctx)
|
||||||
|
|
||||||
if (mpctx->video_status < STATUS_READY) {
|
if (mpctx->video_status < STATUS_READY) {
|
||||||
mpctx->time_frame = 0;
|
mpctx->time_frame = 0;
|
||||||
} else if (mpctx->display_sync_active || vo->opts->video_sync == VS_NONE ||
|
} else if (mpctx->display_sync_active || vo->opts->video_sync == VS_NONE) {
|
||||||
mpctx->num_past_frames <= MIN_PAST_FRAMES)
|
|
||||||
{
|
|
||||||
// don't touch the timing
|
// don't touch the timing
|
||||||
} else if (mpctx->audio_status == STATUS_PLAYING &&
|
} else if (mpctx->audio_status == STATUS_PLAYING &&
|
||||||
mpctx->video_status == STATUS_PLAYING &&
|
mpctx->video_status == STATUS_PLAYING &&
|
||||||
|
@ -742,7 +727,7 @@ static double compute_audio_drift(struct MPContext *mpctx, double vsync)
|
||||||
// audio desync for y. Assume speed didn't change for the frames we're
|
// audio desync for y. Assume speed didn't change for the frames we're
|
||||||
// looking at for simplicity. This also should actually use the realtime
|
// looking at for simplicity. This also should actually use the realtime
|
||||||
// (minus paused time) for x, but use vsync scheduling points instead.
|
// (minus paused time) for x, but use vsync scheduling points instead.
|
||||||
if (mpctx->num_past_frames <= MIN_PAST_FRAMES)
|
if (mpctx->num_past_frames <= 10)
|
||||||
return NAN;
|
return NAN;
|
||||||
int num = mpctx->num_past_frames - 1;
|
int num = mpctx->num_past_frames - 1;
|
||||||
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_xx = 0;
|
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_xx = 0;
|
||||||
|
@ -847,9 +832,6 @@ static void handle_display_sync_frame(struct MPContext *mpctx,
|
||||||
if (resample && using_spdif_passthrough(mpctx))
|
if (resample && using_spdif_passthrough(mpctx))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mpctx->num_past_frames <= MIN_PAST_FRAMES)
|
|
||||||
return;
|
|
||||||
|
|
||||||
double vsync = vo_get_vsync_interval(vo) / 1e9;
|
double vsync = vo_get_vsync_interval(vo) / 1e9;
|
||||||
if (vsync <= 0)
|
if (vsync <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue