changeset 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 67f2fb3ff4c7
children 3af732078f52
files libaf/af_lavcresample.c
diffstat 1 files changed, 16 insertions(+), 0 deletions(-) [+]
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;