On 24.11.2016 18:29, Michael Niedermayer wrote:
> On Thu, Nov 24, 2016 at 01:15:54AM +0100, Andreas Cadhalpun wrote:
>> On 23.11.2016 03:22, Michael Niedermayer wrote:
>>> On Sun, Nov 13, 2016 at 09:29:11PM +0100, Andreas Cadhalpun wrote:
>>>> It causes division by zero crashes.
>>>>
>>>> Signed-off-by: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
>>>> ---
>>>>  libavcodec/aacsbr_fixed.c | 4 ++++
>>>>  1 file changed, 4 insertions(+)
>>>>
>>>> diff --git a/libavcodec/aacsbr_fixed.c b/libavcodec/aacsbr_fixed.c
>>>> index b26314a..d2a7027 100644
>>>> --- a/libavcodec/aacsbr_fixed.c
>>>> +++ b/libavcodec/aacsbr_fixed.c
>>>> @@ -429,6 +429,10 @@ static void sbr_gain_calc(AACContext *ac, 
>>>> SpectralBandReplication *sbr,
>>>>                                                  av_add_sf(FLOAT_1, 
>>>> sbr->e_curr[e][m]),
>>>>                                                  av_add_sf(FLOAT_1, 
>>>> sbr->q_mapped[e][m]))));
>>>>                  }
>>>> +                if (sbr->gain[e][m].mant == 0) {
>>>> +                    sbr->gain[e][m] = FLOAT_1;
>>>> +                    sbr->gain[e][m].exp = MIN_EXP;
>>>> +                }
>>>
>>> Why is this not not needed for the float code ?
>>
>> Because float can represent smaller absolute values than normalized 
>> SoftFloat.
>>
>>> is there a shortcomming in the SoftFloat code ?
>>
>> In a way, because the SoftFloat gets normalized, e.g.:
>>  * float: 2.16840434e-19 * 2.77555756e-17 / 10337.5293 = 5.82201677e-40
>>  * SoftFloat: av_div_sf(av_mul_sf({mant = 536870912, exp = -61}, {mant = 
>> 536870912, exp = -54}),
>>                         {mant = 677439305, exp = 14}) = {mant = 850858499, 
>> exp = -130} = FLOAT_0
> 
> hmm
> does increasing the limits for SoftFloats exponent solve this ?

Yes, patch is attached.

> If that works and doesnt break anything it would be good to have
> SoftFloat cover the range float has

I'm not entirely sure about not breaking anything. For example the output of
the softfloat test changes, but for some reason that test is not enabled anyway.

Best regards,
Andreas
>From e28c5828a62c583152834f661f9a15b572b07eee Mon Sep 17 00:00:00 2001
From: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
Date: Fri, 25 Nov 2016 00:26:51 +0100
Subject: [PATCH] softfloat: decrease MIN_EXP to cover full float range

floats are not necessarily normalized, so a normalized softfloat needs
MIN_EXP lowered by 23 to cover that range.

Signed-off-by: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
---
 libavutil/softfloat.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavutil/softfloat.h b/libavutil/softfloat.h
index 48d0d59..fa91d1e 100644
--- a/libavutil/softfloat.h
+++ b/libavutil/softfloat.h
@@ -27,7 +27,7 @@
 #include "avassert.h"
 #include "softfloat_tables.h"
 
-#define MIN_EXP -126
+#define MIN_EXP -149
 #define MAX_EXP  126
 #define ONE_BITS 29
 
-- 
2.10.2

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to