Skip to content

Commit

Permalink
Revert "player: reset av state on speed changes"
Browse files Browse the repository at this point in the history
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 mpv-player#13613 and
fixes mpv-player#13622.

This reverts commit e3af545.
  • Loading branch information
Dudemanguy committed Mar 3, 2024
1 parent d10cebe commit 9ac791c
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 22 deletions.
1 change: 0 additions & 1 deletion player/command.c
Original file line number Diff line number Diff line change
Expand Up @@ -7246,7 +7246,6 @@ void mp_option_change_callback(void *ctx, struct m_config_option *co, int flags,

if (opt_ptr == &opts->playback_speed) {
update_playback_speed(mpctx);
reset_av_state(mpctx);
mp_wakeup_core(mpctx);
}

Expand Down
1 change: 0 additions & 1 deletion player/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -637,7 +637,6 @@ void update_osd_msg(struct MPContext *mpctx);
bool update_subtitles(struct MPContext *mpctx, double video_pts);

// video.c
void reset_av_state(struct MPContext *mpctx);
void reset_video_state(struct MPContext *mpctx);
int init_video_decoder(struct MPContext *mpctx, struct track *track);
void reinit_video_chain(struct MPContext *mpctx);
Expand Down
22 changes: 2 additions & 20 deletions player/video.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,6 @@
#include "command.h"
#include "screenshot.h"

#define MIN_PAST_FRAMES 10

enum {
// update_video() - code also uses: <0 error, 0 eof, >0 progress
VD_ERROR = -1,
Expand Down Expand Up @@ -97,17 +95,6 @@ static void vo_chain_reset_state(struct vo_chain *vo_c)
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)
{
if (mpctx->vo_chain) {
Expand Down Expand Up @@ -606,9 +593,7 @@ static void update_avsync_before_frame(struct MPContext *mpctx)

if (mpctx->video_status < STATUS_READY) {
mpctx->time_frame = 0;
} else if (mpctx->display_sync_active || vo->opts->video_sync == VS_NONE ||
mpctx->num_past_frames <= MIN_PAST_FRAMES)
{
} else if (mpctx->display_sync_active || vo->opts->video_sync == VS_NONE) {
// don't touch the timing
} else if (mpctx->audio_status == STATUS_PLAYING &&
mpctx->video_status == STATUS_PLAYING &&
Expand Down Expand Up @@ -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
// looking at for simplicity. This also should actually use the realtime
// (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;
int num = mpctx->num_past_frames - 1;
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_xx = 0;
Expand Down Expand Up @@ -847,9 +832,6 @@ static void handle_display_sync_frame(struct MPContext *mpctx,
if (resample && using_spdif_passthrough(mpctx))
return;

if (mpctx->num_past_frames <= MIN_PAST_FRAMES)
return;

double vsync = vo_get_vsync_interval(vo) / 1e9;
if (vsync <= 0)
return;
Expand Down

0 comments on commit 9ac791c

Please sign in to comment.