summaryrefslogtreecommitdiffstats
path: root/filters/f_output_chain.c
diff options
context:
space:
mode:
Diffstat (limited to 'filters/f_output_chain.c')
-rw-r--r--filters/f_output_chain.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/filters/f_output_chain.c b/filters/f_output_chain.c
index cf16dcbf47..468bfe6466 100644
--- a/filters/f_output_chain.c
+++ b/filters/f_output_chain.c
@@ -454,13 +454,12 @@ bool mp_output_chain_command(struct mp_output_chain *c, const char *target,
// supports it, reset *speed, then keep setting the speed on the other filters.
// The purpose of this is to make sure only 1 filter changes speed.
static void set_speed_any(struct mp_user_filter **filters, int num_filters,
- bool resample, double *speed)
+ int command, double *speed)
{
for (int n = num_filters - 1; n >= 0; n--) {
assert(*speed);
struct mp_filter_command cmd = {
- .type = resample ? MP_FILTER_COMMAND_SET_SPEED_RESAMPLE
- : MP_FILTER_COMMAND_SET_SPEED,
+ .type = command,
.speed = *speed,
};
if (mp_filter_command(filters[n]->f, &cmd))
@@ -469,17 +468,24 @@ static void set_speed_any(struct mp_user_filter **filters, int num_filters,
}
void mp_output_chain_set_audio_speed(struct mp_output_chain *c,
- double speed, double resample)
+ double speed, double resample, double drop)
{
struct chain *p = c->f->priv;
// We always resample with the final libavresample instance.
- set_speed_any(p->post_filters, p->num_post_filters, true, &resample);
+ set_speed_any(p->post_filters, p->num_post_filters,
+ MP_FILTER_COMMAND_SET_SPEED_RESAMPLE, &resample);
// If users have filters like "scaletempo" insert anywhere, use that,
// otherwise use the builtin ones.
- set_speed_any(p->user_filters, p->num_user_filters, false, &speed);
- set_speed_any(p->post_filters, p->num_post_filters, false, &speed);
+ set_speed_any(p->user_filters, p->num_user_filters,
+ MP_FILTER_COMMAND_SET_SPEED, &speed);
+ set_speed_any(p->post_filters, p->num_post_filters,
+ MP_FILTER_COMMAND_SET_SPEED, &speed);
+ set_speed_any(p->user_filters, p->num_user_filters,
+ MP_FILTER_COMMAND_SET_SPEED_DROP, &drop);
+ set_speed_any(p->post_filters, p->num_post_filters,
+ MP_FILTER_COMMAND_SET_SPEED_DROP, &drop);
}
double mp_output_get_measured_total_delay(struct mp_output_chain *c)