diff options
Diffstat (limited to 'audio/filter/af_lavrresample.c')
-rw-r--r-- | audio/filter/af_lavrresample.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/audio/filter/af_lavrresample.c b/audio/filter/af_lavrresample.c index f659511f82..95a5547ab5 100644 --- a/audio/filter/af_lavrresample.c +++ b/audio/filter/af_lavrresample.c @@ -93,11 +93,19 @@ static int get_delay(struct af_resample *s) { return avresample_get_delay(s->avrctx); } +static void drop_all_output(struct af_resample *s) +{ + while (avresample_read(s->avrctx, NULL, 1000) > 0) {} +} #else static int get_delay(struct af_resample *s) { return swr_get_delay(s->avrctx, s->ctx.in_rate); } +static void drop_all_output(struct af_resample *s) +{ + while (swr_drop_output(s->avrctx, 1000) > 0) {} +} #endif static double af_resample_default_cutoff(int filter_size) @@ -273,6 +281,9 @@ static int control(struct af_instance *af, int cmd, void *arg) case AF_CONTROL_SET_RESAMPLE_RATE: out->rate = *(int *)arg; return AF_OK; + case AF_CONTROL_RESET: + drop_all_output(s); + return AF_OK; } return AF_UNKNOWN; } |