diff --git a/src/modules/module-filter-chain.c b/src/modules/module-filter-chain.c index 5e4cdfbd6..d3a40daa6 100644 --- a/src/modules/module-filter-chain.c +++ b/src/modules/module-filter-chain.c @@ -247,7 +247,7 @@ struct impl { unsigned int do_disconnect:1; unsigned int unloading:1; - uint32_t rate; + long unsigned rate; struct graph graph; }; @@ -1276,7 +1276,7 @@ static int setup_graph(struct graph *graph, struct spa_json *inputs, struct spa_ sd = dd = NULL; for (i = 0; i < n_hndl; i++) { - if ((node->hndl[i] = d->instantiate(d, impl->rate, i, node->config)) == NULL) { + if ((node->hndl[i] = d->instantiate(d, &impl->rate, i, node->config)) == NULL) { pw_log_error("cannot create plugin instance"); res = -ENOMEM; goto error; @@ -1308,6 +1308,14 @@ static int setup_graph(struct graph *graph, struct spa_json *inputs, struct spa_ graph->n_control++; } } + pw_log_info("suggested rate:%lu capture:%d playback:%d", impl->rate, + impl->capture_info.rate, impl->playback_info.rate); + + if (impl->capture_info.rate == 0) + impl->capture_info.rate = impl->rate; + if (impl->playback_info.rate == 0) + impl->playback_info.rate = impl->rate; + /* now collect all input and output ports for all the handles. */ for (i = 0; i < n_hndl; i++) { if (inputs == NULL) { diff --git a/src/modules/module-filter-chain/builtin_plugin.c b/src/modules/module-filter-chain/builtin_plugin.c index cbd0b3344..6ada8e4ec 100644 --- a/src/modules/module-filter-chain/builtin_plugin.c +++ b/src/modules/module-filter-chain/builtin_plugin.c @@ -49,7 +49,7 @@ struct builtin { }; static void *builtin_instantiate(const struct fc_descriptor * Descriptor, - unsigned long SampleRate, int index, const char *config) + unsigned long *SampleRate, int index, const char *config) { struct builtin *impl; @@ -57,7 +57,7 @@ static void *builtin_instantiate(const struct fc_descriptor * Descriptor, if (impl == NULL) return NULL; - impl->rate = SampleRate; + impl->rate = *SampleRate; return impl; } @@ -469,7 +469,7 @@ struct convolver_impl { }; static float *read_samples(const char *filename, float gain, int delay, int offset, - int length, int channel, int *n_samples) + int length, int channel, long unsigned *rate, int *n_samples) { float *samples; #ifdef HAVE_SNDFILE @@ -510,6 +510,7 @@ static float *read_samples(const char *filename, float gain, int delay, int offs samples[i] = samples[info.channels * i + channel] * gain; *n_samples = n; + *rate = info.samplerate; return samples; #else pw_log_error("compiled without sndfile support, can't load samples: " @@ -570,7 +571,7 @@ static float *create_dirac(const char *filename, float gain, int delay, int offs } static void * convolver_instantiate(const struct fc_descriptor * Descriptor, - unsigned long SampleRate, int index, const char *config) + unsigned long *SampleRate, int index, const char *config) { struct convolver_impl *impl; float *samples; @@ -642,7 +643,7 @@ static void * convolver_instantiate(const struct fc_descriptor * Descriptor, length, &n_samples); } else { samples = read_samples(filename, gain, delay, offset, - length, channel, &n_samples); + length, channel, SampleRate, &n_samples); } if (samples == NULL) return NULL; @@ -658,7 +659,7 @@ static void * convolver_instantiate(const struct fc_descriptor * Descriptor, if (impl == NULL) return NULL; - impl->rate = SampleRate; + impl->rate = *SampleRate; impl->conv = convolver_new(blocksize, tailsize, samples, n_samples); free(samples); diff --git a/src/modules/module-filter-chain/ladspa_plugin.c b/src/modules/module-filter-chain/ladspa_plugin.c index d34a9ace0..5ad6262f1 100644 --- a/src/modules/module-filter-chain/ladspa_plugin.c +++ b/src/modules/module-filter-chain/ladspa_plugin.c @@ -47,10 +47,10 @@ struct descriptor { }; static void *ladspa_instantiate(const struct fc_descriptor *desc, - unsigned long SampleRate, int index, const char *config) + unsigned long *SampleRate, int index, const char *config) { struct descriptor *d = (struct descriptor *)desc; - return d->d->instantiate(d->d, SampleRate); + return d->d->instantiate(d->d, *SampleRate); } static const LADSPA_Descriptor *find_desc(LADSPA_Descriptor_Function desc_func, const char *name) diff --git a/src/modules/module-filter-chain/plugin.h b/src/modules/module-filter-chain/plugin.h index 442606a97..e494f4d06 100644 --- a/src/modules/module-filter-chain/plugin.h +++ b/src/modules/module-filter-chain/plugin.h @@ -69,7 +69,7 @@ struct fc_descriptor { struct fc_port *ports; void *(*instantiate) (const struct fc_descriptor *desc, - unsigned long SampleRate, int index, const char *config); + unsigned long *SampleRate, int index, const char *config); void (*cleanup) (void *instance);