[FFmpeg-devel] [libav-devel] [PATCH] aacpsy: avoid norm_fac becoming NaN

Claudio Freire klaussfreire at gmail.com
Tue Apr 21 02:20:34 CEST 2015


On Mon, Apr 20, 2015 at 9:13 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
> On Mon, Apr 20, 2015 at 09:07:14PM -0300, Claudio Freire wrote:
>> On Mon, Apr 20, 2015 at 8:59 PM, Claudio Freire <klaussfreire at gmail.com> wrote:
>> > On Mon, Apr 20, 2015 at 8:32 PM, Andreas Cadhalpun
>> > <andreas.cadhalpun at googlemail.com> wrote:
>> >>>>> The long version:
>> >>>>>
>> >>>>> ath should approximate the shape of the absolute hearing threshold, so
>> >>>>> yes, it's best if it really uses the minimum, since that will prevent
>> >>>>> clipping of the ath curve and result in a more accurate threshold
>> >>>>> computation.
>> >>>>
>> >>>> So you agree with my patch fixing minath?
>> >>>> Or would you prefer a version with:
>> >>>>     minath = ath(3410 - 0.733 * ATH_ADD, ATH_ADD)
>> >>>
>> >>> Well, that's not really closer to the minimum (a few tests with gnuplot say).
>> >>
>> >> Are you sure your plots were done correctly?
>> >> Because I'm quite sure this is the correct first order approximation
>> >> of the minimum.
>> >>
>> >> For ATH_ADD = 4 this gives 3407.068, which is quite close to Michael's value
>> >> (3407.080774800152).
>> >
>> > I checked the formula several times, but still, I could have made a mistake.
>>
>>
>> This is what I did if you want to check it out (maybe you spot the mistake)
>>
>> gnuplot> ath(f,a) = _ath(f/1000.0, a)
>> gnuplot> _ath(f,a) = 3.64 * f**(-0.8) - 6.8 * exp(-0.6 * (f-3.4) *
>> (f-3.4)) + 6.0 * exp(-0.15 * (f-8.7) * (f-8.7)) + (0.6 + 0.04 * a) *
>> 0.001 * f * f * f
>           ^^^^^^^^^^
> missing * f

Much better now :)

So yes. I'd say it's a good change.

>
> also IIRC gnuplot is just double precission
> depending on how many decimal places one wants to calculate this can
> become a limitation

aacpsy.c is single precision or double or long double depending on the
architecture.

Certainly if numeric precision is an issue it'd be better to
precompute the table and just put it as a constant in aactab.c.

I don't think it's necessary though. It'd be hard to maintain.


More information about the ffmpeg-devel mailing list