diff options
-rw-r--r-- | libaf/af_lavcresample.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/libaf/af_lavcresample.c b/libaf/af_lavcresample.c index 49a284bba6..48fcd75ac5 100644 --- a/libaf/af_lavcresample.c +++ b/libaf/af_lavcresample.c @@ -39,6 +39,13 @@ typedef struct af_resample_s{ int linear; int phase_shift; double cutoff; + + int ctx_out_rate; + int ctx_in_rate; + int ctx_filter_size; + int ctx_phase_shift; + int ctx_linear; + double ctx_cutoff; }af_resample_t; @@ -61,8 +68,17 @@ static int control(struct af_instance_s* af, int cmd, void* arg) af->mul = (double)af->data->rate / data->rate; af->delay = af->data->nch * s->filter_length / min(af->mul, 1); // *bps*.5 - if(s->avrctx) av_resample_close(s->avrctx); - s->avrctx= av_resample_init(af->data->rate, /*in_rate*/data->rate, s->filter_length, s->phase_shift, s->linear, s->cutoff); + if (s->ctx_out_rate != af->data->rate || s->ctx_in_rate != data->rate || s->ctx_filter_size != s->filter_length || + s->ctx_phase_shift != s->phase_shift || s->ctx_linear != s->linear || s->ctx_cutoff != s->cutoff) { + if(s->avrctx) av_resample_close(s->avrctx); + s->avrctx= av_resample_init(af->data->rate, /*in_rate*/data->rate, s->filter_length, s->phase_shift, s->linear, s->cutoff); + s->ctx_out_rate = af->data->rate; + s->ctx_in_rate = data->rate; + s->ctx_filter_size = s->filter_length; + s->ctx_phase_shift = s->phase_shift; + s->ctx_linear = s->linear; + s->ctx_cutoff = s->cutoff; + } // hack to make af_test_output ignore the samplerate change out_rate = af->data->rate; |