[FFmpeg-devel] [PATCH] ac3dec_fixed: always use the USE_FIXED=1 variant of the AC3DecodeContext
Michael Niedermayer
michaelni at gmx.at
Sat Mar 14 04:41:08 CET 2015
On Fri, Mar 13, 2015 at 11:27:22PM +0100, Andreas Cadhalpun wrote:
> Hi,
>
> On 13.03.2015 22:46, Christophe Gisquet wrote:
> > 2015-03-13 22:28 GMT+01:00 Andreas Cadhalpun <andreas.cadhalpun at googlemail.com>:
> >> -int ff_eac3_parse_header(AC3DecodeContext *s);
> >> +static int ff_eac3_parse_header(AC3DecodeContext *s);
> >
> > It's somewhat cosmetics, but if these functions become static, they
> > would better drop the ff_ prefix.
>
> I don't mind the names, but I tried to keep the changes minimal, to
> ease backporting the fix.
> The names can be changed in a follow-up patch.
>
> >> - float accum = 0.0f;
> >> + INTFLOAT accum = 0.0f;
> > [...]
> >> for (i = 0; i < bandsize; i++) {
> >> - float coeff = s->transform_coeffs[ch][bin++];
> >> + INTFLOAT coeff = s->transform_coeffs[ch][bin++];
> >> accum += coeff * coeff;
> > [...]
> >> - float nscale = s->spx_noise_blend[ch][bnd] * rms_energy[bnd] * (1.0f / INT32_MIN);
> >> - float sscale = s->spx_signal_blend[ch][bnd];
> >> + INTFLOAT nscale = s->spx_noise_blend[ch][bnd] * rms_energy[bnd] * (1.0f / INT32_MIN);
> >> + INTFLOAT sscale = s->spx_signal_blend[ch][bnd];
> >> for (i = 0; i < s->spx_band_sizes[bnd]; i++) {
> >> - float noise = nscale * (int32_t)av_lfg_get(&s->dith_state);
> >> + INTFLOAT noise = nscale * (int32_t)av_lfg_get(&s->dith_state);
> >
> > Does that work at all? I mean, if it's fixedpoint, I would have
> > expected some renormalization, various things to avoid overflows,
> > potential warnings because of casts, etc.
> >
> > And is the output on eac3 samples, eg here:
> > http://samples.mplayerhq.hu/A-codecs/AC3/eac3/
> > (particularly the spx ones)
> > anything listenable?
> >
> > Maybe the extensions should simply be declared as unsupported by the fp version?
>
> It works well enough, I think.
> Without this patch:
> $ ffmpeg -c:a ac3_fixed -i ./rio_bravo_mono_64_spx.ac3 broken.ac3
> [eac3 @ 0x2401560] Estimating duration from bitrate, this may be inaccurate
> Input #0, eac3, from '/tmp/rio_bravo_mono_64_spx.ac3':
> Duration: 00:04:22.18, start: 0.000000, bitrate: 64 kb/s
> Stream #0:0: Audio: ac3, 48000 Hz, mono, s16p, 64 kb/s
> Output #0, ac3, to '/tmp/broken.ac3':
> Metadata:
> encoder : Lavf56.25.101
> Stream #0:0: Audio: ac3, 48000 Hz, mono, fltp, 96 kb/s
> Metadata:
> encoder : Lavc56.26.100 ac3
> Stream mapping:
> Stream #0:0 -> #0:0 (ac3 (ac3_fixed) -> ac3 (native))
> Press [q] to stop, [?] for help
> [ac3_fixed @ 0x24024c0] exponent out-of-range
> [ac3_fixed @ 0x24024c0] error decoding the audio block
> ...
> many more such errors
> ...
> [ac3_fixed @ 0x24024c0] exponent out-of-range
> [ac3_fixed @ 0x24024c0] error decoding the audio block
> Segmentation fault (core dumped)
>
>
> Make sure the volume is at a low level, when playing the
> broken.ac3, or your ears will hurt.
>
> With this patch:
> $ ffmpeg -c:a ac3_fixed -i ./rio_bravo_mono_64_spx.ac3 out.ac3
> [eac3 @ 0xb5b560] Estimating duration from bitrate, this may be inaccurate
> Input #0, eac3, from '/tmp/rio_bravo_mono_64_spx.ac3':
> Duration: 00:04:22.18, start: 0.000000, bitrate: 64 kb/s
> Stream #0:0: Audio: ac3, 48000 Hz, mono, s16p, 64 kb/s
> Output #0, ac3, to '/tmp/out.ac3':
> Metadata:
> encoder : Lavf56.25.101
> Stream #0:0: Audio: ac3, 48000 Hz, mono, fltp, 96 kb/s
> Metadata:
> encoder : Lavc56.26.100 ac3
> Stream mapping:
> Stream #0:0 -> #0:0 (ac3 (ac3_fixed) -> ac3 (native))
> Press [q] to stop, [?] for help
> size= 3072kB time=00:04:22.17 bitrate= 96.0kbits/s
> video:0kB audio:3072kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
>
> The out.ac3 sounds much like the input.
for the case i tested the fixed and float differed by stddev ~ 500
fixed that and applied stddev is ~8 now
i think theres something wrong with sscale though as its always 0
even for float
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
If you think the mosad wants you dead since a long time then you are either
wrong or dead since a long time.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150314/ae4ea504/attachment.asc>
More information about the ffmpeg-devel
mailing list