[FFmpeg-devel] [PATCH 1/3] aacsbr_fixed: avoid division by zero in sbr_gain_calc

Michael Niedermayer michaelni at gmx.at
Fri Nov 20 10:51:57 CET 2015


On Fri, Nov 20, 2015 at 12:16:09AM +0100, Andreas Cadhalpun wrote:
> On 19.11.2015 01:31, Michael Niedermayer wrote:
> > On Thu, Nov 19, 2015 at 12:31:17AM +0100, Andreas Cadhalpun wrote:
> >> So far so good. However, the next time sbr_dequant is called this breaks:
> >> noise_facs[1][0].exp = 6 - 536870912 + 1 = -536870905;
> >>
> > 
> >> This is obviously completely bogus.
> > 
> > yes
> > 
> > 
> >> Instead this code needs a function like av_exp2_sf.
> > 
> > no, thats not the problem
> > this code is missing error checks and only adding error checks will
> > fix that
> > 
> > there is read_sbr_noise() which reads data
> > there is sbr_dequant() which converts the data from "read data" to
> > lets call it "dequantized data"
> 
> That makes sense, thanks for explaining.
> 
> > what you describe sounds like that sbr_dequant() is called on top of
> > the output from sbr_dequant(), that sounds like a error condition
> > for both fixed and float
> 
> Indeed. A patch checking for that is attached.
> 
> Best regards,
> Andreas
> 

>  aacsbr_template.c |    8 ++++++++
>  1 file changed, 8 insertions(+)
> 43ace0364265ef16eecd6ca2d9564cc9585847f7  0001-aacsbr-don-t-call-sbr_dequant-twice-without-intermed.patch
> From 0237ebfca9571d2d3e51f5c5dc15f8f5a516510a Mon Sep 17 00:00:00 2001
> From: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> Date: Fri, 20 Nov 2015 00:04:50 +0100
> Subject: [PATCH] aacsbr: don't call sbr_dequant twice without intermediate
>  read_sbr_data
> 
> Doing that doesn't make sense, because the only purpose of sbr_dequant
> is to process the data from read_sbr_data.
> 
> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> ---
>  libavcodec/aacsbr_template.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/libavcodec/aacsbr_template.c b/libavcodec/aacsbr_template.c
> index cf18862..564930a 100644
> --- a/libavcodec/aacsbr_template.c
> +++ b/libavcodec/aacsbr_template.c
> @@ -1041,6 +1041,7 @@ static unsigned int read_sbr_data(AACContext *ac, SpectralBandReplication *sbr,
>      unsigned int cnt = get_bits_count(gb);
>  
>      sbr->id_aac = id_aac;
> +    sbr->start = 2;

the new value should be documented
or maybe it would be possible to use a new field with self explanatory
name

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Asymptotically faster algorithms should always be preferred if you have
asymptotical amounts of data
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20151120/8294cc8c/attachment.sig>


More information about the ffmpeg-devel mailing list