X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fcodecs%2Faac.rs;h=5058a44fde17c7cb7118db34eab99bbd0e83b482;hb=b103b7b26e1ceb2a5529960b4f407e55dd51c910;hp=6de5a963e0ec2d8fc0269866b0ceac4f5ba17e08;hpb=ce742854b2912b880fb3d3e330042b049dac8504;p=nihav.git diff --git a/nihav-commonfmt/src/codecs/aac.rs b/nihav-commonfmt/src/codecs/aac.rs index 6de5a96..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]; } } } @@ -1003,6 +1009,7 @@ impl DSP { tmp: [0.0; 2048], ew_buf: [0.0; 1152], } } + #[allow(clippy::cyclomatic_complexity)] fn synth(&mut self, coeffs: &[f32; 1024], delay: &mut [f32; 1024], seq: u8, window_shape: bool, prev_window_shape: bool, dst: &mut [f32]) { let long_win = if window_shape { &self.kbd_long_win } else { &self.sine_long_win }; let short_win = if window_shape { &self.kbd_short_win } else { &self.sine_short_win }; @@ -1258,6 +1265,12 @@ impl NADecoder for AACDecoder { } } +impl NAOptionHandler for AACDecoder { + fn get_supported_options(&self) -> &[NAOptionDefinition] { &[] } + fn set_options(&mut self, _options: &[NAOption]) { } + fn query_option_value(&self, _name: &str) -> Option { None } +} + pub fn get_decoder() -> Box { Box::new(AACDecoder::new()) } @@ -1267,14 +1280,14 @@ mod test { use nihav_core::codecs::RegisteredDecoders; use nihav_core::demuxers::RegisteredDemuxers; use nihav_codec_support::test::dec_video::test_decode_audio; - use crate::generic_register_all_codecs; + use crate::generic_register_all_decoders; use nihav_realmedia::realmedia_register_all_demuxers; #[test] fn test_aac() { let mut dmx_reg = RegisteredDemuxers::new(); realmedia_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - generic_register_all_codecs(&mut dec_reg); + generic_register_all_decoders(&mut dec_reg); // let file = "assets/RV/rv40_weighted_mc.rmvb"; let file = "assets/RV/rv40_weighted_mc_2.rmvb";