X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fcodecs%2Faac.rs;fp=nihav-commonfmt%2Fsrc%2Fcodecs%2Faac.rs;h=5058a44fde17c7cb7118db34eab99bbd0e83b482;hb=b103b7b26e1ceb2a5529960b4f407e55dd51c910;hp=d3f991b4da925f1bee1deec2257bd44c29317389;hpb=2451e9532d1796640598e106ae2ecbcce38e2793;p=nihav.git diff --git a/nihav-commonfmt/src/codecs/aac.rs b/nihav-commonfmt/src/codecs/aac.rs index d3f991b..5058a44 100644 --- a/nihav-commonfmt/src/codecs/aac.rs +++ b/nihav-commonfmt/src/codecs/aac.rs @@ -782,17 +782,23 @@ impl ICS { let start = w * 128 + self.get_band_start(tns_max_bands.min(bottom)); let end = w * 128 + self.get_band_start(tns_max_bands.min(top)); let lpc = &tns_data.coeffs[w][f].coef; + let mut state = [0.0f32; 64]; + let mut sidx = 32; if !tns_data.coeffs[w][f].direction { for m in start..end { - for i in 0..order.min(m) { - self.coeffs[m] -= self.coeffs[m - i - 1] * lpc[i]; + for i in 0..order { + self.coeffs[m] -= state[(sidx + i) & 63] * lpc[i]; } + sidx = (sidx + 63) & 63; + state[sidx] = self.coeffs[m]; } } else { for m in (start..end).rev() { - for i in 0..order.min(m) { - self.coeffs[m] -= self.coeffs[m + i - 1] * lpc[i]; + for i in 0..order { + self.coeffs[m] -= state[(sidx + i) & 63] * lpc[i]; } + sidx = (sidx + 63) & 63; + state[sidx] = self.coeffs[m]; } } }