diff libaf/af_lavcresample.c @ 31632:fc6f2b4e8a26

Avoid calling av_resample_init again when the values are the same as before. The init function can be called multiple times when e.g. additional format filters are inserted, so this speeds things up. Patch by Dan Oscarsson [Dan.Oscarsson tieto com].
author reimar
date Sun, 11 Jul 2010 09:46:58 +0000
parents 0f1b5b68af32
children 3af732078f52
line wrap: on
line diff
--- a/libaf/af_lavcresample.c	Sun Jul 11 09:40:46 2010 +0000
+++ b/libaf/af_lavcresample.c	Sun Jul 11 09:46:58 2010 +0000
@@ -39,6 +39,13 @@
     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 @@
     af->mul = (double)af->data->rate / data->rate;
     af->delay = af->data->nch * s->filter_length / min(af->mul, 1); // *bps*.5
 
+    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;