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.cadhal...@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.cadhal...@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
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel