summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-10-02 02:49:05 +0200
committerwm4 <wm4@nowhere>2014-10-02 02:49:05 +0200
commitc3e2a1febc1610517c7de2a5f57632b83cefa3e8 (patch)
treee640e6549a0255f7342f42235be49e3f38aa02db /player
parent7dd3822d099522cd8bf59aa1eb3e318e2cfcacdd (diff)
downloadmpv-c3e2a1febc1610517c7de2a5f57632b83cefa3e8.tar.bz2
mpv-c3e2a1febc1610517c7de2a5f57632b83cefa3e8.tar.xz
command: move setting playback speed to a separate function
Diffstat (limited to 'player')
-rw-r--r--player/audio.c13
-rw-r--r--player/command.c15
-rw-r--r--player/core.h1
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);