X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fcodecs%2Fsipro.rs;h=a1a1ed3aac4cc97e9fcc3b98df927177098df64f;hp=44f7942e2cea5706fb883a0ff63417e8d91db91e;hb=78fb6560c73965d834b215fb0b49505ae5443288;hpb=5580b11b0e9daf065c81a8b354295c6d5d1dd3dd diff --git a/nihav-commonfmt/src/codecs/sipro.rs b/nihav-commonfmt/src/codecs/sipro.rs index 44f7942..a1a1ed3 100644 --- a/nihav-commonfmt/src/codecs/sipro.rs +++ b/nihav-commonfmt/src/codecs/sipro.rs @@ -202,11 +202,9 @@ impl SiproDecoder { newfilt[i] = filter[i] + 0.33 * self.lsf_hist[i] + SIPRO_MEAN_LSF_LBR[i]; } for i in 0..8 { // maybe it's just bubble sort? - for j in (0..i+1).rev() { + for j in (0..=i).rev() { if newfilt[j] <= newfilt[j + 1] { break; } - let tmp = newfilt[j]; - newfilt[j] = newfilt[j + 1]; - newfilt[j + 1] = tmp; + newfilt.swap(j, j + 1); } } @@ -315,7 +313,7 @@ impl SiproDecoder { self.fix_vec = [0.0; 80]; let pitch_frac = SIPRO_GAIN_PITCH_CB_16K[self.gp_index[sf]].min(1.0); for i in 0..10 { - let mut scale = self.pulse_data[i * 2 + 1] as f32; + let mut scale = f32::from(self.pulse_data[i * 2 + 1]); let off = self.pulse_data[i * 2 + 0] as usize; for j in (off..80).step_by(self.prev_pitch) { self.fix_vec[j] += scale; @@ -364,6 +362,7 @@ impl SiproDecoder { } self.unpack_pulses_common(); } + #[allow(clippy::cast_lossless)] fn unpack_pulses_common(&mut self) { for i in 0..48 { self.fix_vec[i] = 0.0; @@ -590,7 +589,7 @@ fn lsp2poly(lsp: &[f32], poly: &mut [f64], order: usize) { poly[1] = -2.0 * f64::from(lsp[0]); for i in 1..order { poly[i + 1] = -2.0 * f64::from(lsp[2 * i]) * poly[i] + 2.0 * poly[i - 1]; - for j in (2..i+1).rev() { + for j in (2..=i).rev() { poly[j] += -2.0 * f64::from(lsp[2 * i]) * poly[j - 1] + poly[j - 2]; } poly[1] += -2.0 * f64::from(lsp[2 * i]); @@ -685,7 +684,7 @@ impl NADecoder for SiproDecoder { let frame_len = self.mode.subframe_len * self.mode.subframes; for (input, output) in pktbuf.chunks(frm_size).zip(dst.chunks_mut(out_frm_size)) { - let mut br = BitReader::new(input, input.len(), BitReaderMode::LE); + let mut br = BitReader::new(input, BitReaderMode::LE); for dst in output.chunks_mut(frame_len) { self.unpack_frame(&mut br)?; if self.mode_type.is16k() { @@ -736,7 +735,13 @@ impl NADecoder for SiproDecoder { } } -pub fn get_decoder() -> Box { +impl NAOptionHandler for SiproDecoder { + 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(SiproDecoder::new()) } @@ -744,15 +749,15 @@ pub fn get_decoder() -> Box { mod test { use nihav_core::codecs::RegisteredDecoders; use nihav_core::demuxers::RegisteredDemuxers; - use nihav_core::test::dec_video::test_decode_audio; - use crate::codecs::generic_register_all_codecs; - use nihav_realmedia::demuxers::realmedia_register_all_demuxers; + use nihav_codec_support::test::dec_video::test_decode_audio; + use crate::generic_register_all_decoders; + use nihav_realmedia::realmedia_register_all_demuxers; #[test] fn test_sipro() { 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/autahi-vox.rm"; test_decode_audio("realmedia", file, Some(5000), None/*Some("sipro")*/, &dmx_reg, &dec_reg);