af_lavcresample: avoid multiple calls to av_resample_init

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].

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31698 b3059339-0415-0410-9bf9-f77b7e298cf2

Reindent.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31699 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2010-07-11 09:46:58 +00:00 committed by Uoti Urpala
parent 1bcb3fc805
commit f8509c52c0
1 changed files with 18 additions and 2 deletions

View File

@ -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;