rockbox/lib/rbcodec
Michael Giacomelli 9477e371a3 wma: fix overflow in the LSP exponent curve
Very low bitrate WMA files send their spectral envelope as LSP
coefficients. The curve computed from them squares two products
whose value can reach about a million, in 16.16 fixed point. Where
the envelope should be lowest the squares overflowed, and those
points came out near the curve's maximum instead: bands at the top
of the spectrum up to 17 dB too loud, and everything else a few dB
low, as levels are taken relative to the maximum.

Sum the squares in 64 bits, and let pow_m1_4() take a value above
the 16.16 range.

Checked with perfsim (Sansa e200v1 build). The curve is within
0.2 dB of ffmpeg's formula at all 57600 points of 80 blocks traced
from two files. Against ffmpeg's decode, as the mean difference in
band levels over the whole file, with the noise coding fix applied
before and after:

  StutteringFile (22 kHz mono, 20 kbps)    1.6 dB -> 0.3 dB
  shoujicomcn2117164 (same)                0.2 dB -> 0.1 dB
  terra8k (11 kHz mono, 8 kbps)            0.3 dB -> 0.0 dB

Only the five files that use LSP exponents change; the other 23
are byte-identical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 20:47:12 -04:00
..
codecs wma: fix overflow in the LSP exponent curve 2026-10-05 20:47:12 -04:00
dsp dsp: Add missing .type <symbol>, %function to arm asm 2026-09-19 21:18:30 -04:00
metadata Add "rbfs" prefix to native filesystem functions 2026-09-17 16:22:31 -04:00
test warble: zero the mp3entry before reading metadata 2026-09-28 16:35:14 -04:00
platform.h firmware: refactor CACHEALIGN_BITS/SIZE defines 2026-03-06 14:49:00 +00:00
rbcodec.make rbcodec: Force use of -O2 for dsp code 2025-09-06 08:44:32 -04:00
rbcodecconfig-example.h Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
rbcodecplatform-unix.h Add "rbfs" prefix to native filesystem functions 2026-09-17 16:22:31 -04:00
SOURCES rbcodec dsp: Move dsp_sample_io_configure() to its own file 2022-12-22 17:20:14 -05:00