[vlc-devel] [PATCH] audio_filters: add sample converter in pipeline
thomas at gllm.fr
Fri Oct 30 11:31:53 CET 2015
On Fri, Oct 30, 2015, at 11:30, Thomas Guillem wrote:
> When creating a new chain a filter, the sample rate "audio converter" is
> added in the chain since a "audio resampler" is already added at the end
> of the
> chain. This last filter is used to convert the sample rate, but also
> used to
> fix audio/video delay via a variable-rate resampling.
> Unfortunately, we don't have any audio_filter modules that is capable of
> a variable-rate resampling with good quality and good performances.
> when fixing audio/video delay, the input rate is changed for every block
> processed and the setup of this new rate can take a long time.
> Because of this bad performance, the ugly audio_filter is used to convert
> sample rate and to fix this delay, but it's quite ugly (hence the name).
> This patch will allow to add back in the chain a good quality/good
> resampler with a fixed rate. The ugly resampler will still be added at
> the end
> of the chain but will only be used when there is a delay to fix.
> For information:
> - SoXR with a fixed rate: the "single-precision-SIMD" engine is used, it
> use av_rdft from avcodec to process DFT via sse/neon: performance and
> quality are very good.
> - SoXR with a variable rate: "the single-precision variable-rate" engine
> used. This engine doesn't have any SIMD or ARCH specific
> quality is good but performances are bad.
> - SpeexDSP with a fixed rate: good quality and performances.
> - SpeexDSP with a variable rate: speex_resampler_set_rate can take a
> very long
> time, therefore performances are very very bad (it can take more time
> process than the length of the block).
> src/audio_output/filters.c | 1 -
> 1 file changed, 1 deletion(-)
> diff --git a/src/audio_output/filters.c b/src/audio_output/filters.c
> index 74c5a6a..d90e6da 100644
> --- a/src/audio_output/filters.c
> +++ b/src/audio_output/filters.c
> @@ -449,7 +449,6 @@ aout_filters_t *aout_FiltersNew (vlc_object_t *obj,
> /* convert to the output format (minus resampling) if necessary */
- /* convert to the output format (minus resampling) if necessary */
+ /* convert to the output format if necessary */
> - output_format.i_rate = input_format.i_rate;
> if (aout_FiltersPipelineCreate (obj, filters->tab, &filters->count,
> AOUT_MAX_FILTERS, &input_format,
More information about the vlc-devel