Patch review status wiki page updated

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Damir Jeli? wrote:
> On Fri, Nov 29, 2013 at 12:20:57PM +0600, Alexander E. Patrakov wrote:
>> Let me try changing this by providing a review.
>>
>> Resampler implementations
>>
>> From: poljar (Damir Jeli?)
>> Submission date: 2013-09-06(?)
>> In a github branch:
>> https://github.com/poljar/pulseaudio/commits/resampler_implementations_v2
>>
>> My review: justification for this work is currently missing. I would expect
>> some comparisons with the existing resamplers to be posted on the mailing
>> list, or, if they were posted already, a link to be added to the patch
>> review page.
> Performance comparison was posted already [1].
>
>> As I have already expressed, we should aim either for one perfect
>> feature-complete resampler, or a small number plus a technical document
>> justifying (a) the tradeoffs that are at play here and (b) why these
>> tradeoffs should be exposed to the user.
>>
>> In other words: if one of the added resamplers is strictly better than e.g.
>> speex, then add it and drop speex. If speex is strictly better than one of
>> the added resamplers, drop that resampler. If no resampler is strictly
>> better than the other, document this and document whether pulseaudio has
>> enough information to make a decision automatically in each case.
> The original plan was to remove ffmpeg from our tree and replace it with
> the maintained equivalent library implementations (libav and
> libswresample), but over the summer Arun requested not to drop ffmpeg
> since some people don't like to have an extra dependency.
>
> My new plan is as follows:
>      - don't drop ffmpeg
>      - don't add libav or libswresample
>      - add soxr (which could potentially be a speex replacement)
>
> [1] http://poljar.blogspot.com/2013/08/vol-2-resampling-methods.html

Thanks for the update.

Tanu: could you please add the following text to the patch status page 
regarding Damir's project, just to keep all information in one place?

"""
  * Status update: 
http://article.gmane.org/gmane.comp.audio.pulseaudio.general/18991
  * Performance tests (mono): 
http://poljar.blogspot.com/2013/08/vol-2-resampling-methods.html
  * Performance tests (stereo & 5.1): TBD
  * Bandwidth & Aliasing tests: TBD, with explanatory material at 
http://poljar.blogspot.com/2013/10/epilogue-fourier-analysis-and-testing.html
  * Features (such as variable-rate support, input & output formats, 
optimizations for particular combinations of sample rates, compatibility 
with rewinds): TBD
"""

Separate performance tests for non-mono input are needed because some 
resamplers (e.g. libsamplerate and my resampler in Wine) need to perform 
some auxiliary computation (e.g., in my case, interpolation of tabulated 
filter coefficients) once and then use the result for each channel.

The 2013-10 blog post touches upon the important topic of the resampler 
quality. Indeed, there are two important properties that are discussed 
in the blog post:

  * [Bandwidth] The resampler should not attenuate signal at frequencies 
that are below the lowest of the two Nyquist frequencies.
  * [Aliasing] The resampler should not create anything at frequencies 
not present in the original signal.

However, that blog post only deals with one (unspecified) resampler, and 
thus is only an illustration of the above properties, but not a 
comparison of resamplers based on these properties. That's why the TBD 
above.

I think it would be a good idea to post a spectrogram of a resampled 
linear sweep from 0 Hz to half of the original sampling rate. The result 
would be similar to this collection of images (which compares, for 96k 
-> 44.1k resampling, the old Wine resampler, the linear-interpolation 
resampler, two of the then-proposed resamplers, and Speex at different 
quality settings): http://imgur.com/a/0w8s4

-- 
Alexander E. Patrakov


[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux