From c3e2a1febc1610517c7de2a5f57632b83cefa3e8 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 2 Oct 2014 02:49:05 +0200 Subject: [PATCH] command: move setting playback speed to a separate function --- player/audio.c | 13 +++++++++++++ player/command.c | 15 +++++---------- player/core.h | 1 + 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/player/audio.c b/player/audio.c index 85dda4722c..f532f1167b 100644 --- a/player/audio.c +++ b/player/audio.c @@ -88,6 +88,19 @@ int reinit_audio_filters(struct MPContext *mpctx) return 1; } +void set_playback_speed(struct MPContext *mpctx, double new_speed) +{ + struct MPOpts *opts = mpctx->opts; + + // Adjust time until next frame flip for nosound mode + mpctx->time_frame *= opts->playback_speed / new_speed; + + opts->playback_speed = new_speed; + + if (mpctx->d_audio) + recreate_audio_filters(mpctx); +} + void reset_audio_state(struct MPContext *mpctx) { if (mpctx->d_audio) diff --git a/player/command.c b/player/command.c index 0399905e23..ed36ab4d69 100644 --- a/player/command.c +++ b/player/command.c @@ -165,21 +165,16 @@ static int mp_property_playback_speed(void *ctx, struct m_property *prop, int action, void *arg) { MPContext *mpctx = ctx; - struct MPOpts *opts = mpctx->opts; - double orig_speed = opts->playback_speed; + double speed = mpctx->opts->playback_speed; switch (action) { case M_PROPERTY_SET: { - opts->playback_speed = *(double *) arg; - if (opts->playback_speed == orig_speed) - return M_PROPERTY_OK; - // Adjust time until next frame flip for nosound mode - mpctx->time_frame *= orig_speed / opts->playback_speed; - if (mpctx->d_audio) - reinit_audio_chain(mpctx); + double new_speed = *(double *)arg; + if (speed != new_speed) + set_playback_speed(mpctx, new_speed); return M_PROPERTY_OK; } case M_PROPERTY_PRINT: - *(char **)arg = talloc_asprintf(NULL, "%.2f", orig_speed); + *(char **)arg = talloc_asprintf(NULL, "%.2f", speed); return M_PROPERTY_OK; } return mp_property_generic_option(mpctx, prop, action, arg); diff --git a/player/core.h b/player/core.h index dfba2fd45f..cff468c0cd 100644 --- a/player/core.h +++ b/player/core.h @@ -367,6 +367,7 @@ double playing_audio_pts(struct MPContext *mpctx); void fill_audio_out_buffers(struct MPContext *mpctx, double endpts); double written_audio_pts(struct MPContext *mpctx); void clear_audio_output_buffers(struct MPContext *mpctx); +void set_playback_speed(struct MPContext *mpctx, double new_speed); // configfiles.c void mp_parse_cfgfiles(struct MPContext *mpctx);