X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-ms%2Fsrc%2Fcodecs%2Fmsadpcm.rs;h=44baedbe3fa487af1030dfcabd2b1744379c6efb;hp=de6f447068c99f81e60843182facf612c90ca993;hb=78fb6560c73965d834b215fb0b49505ae5443288;hpb=7d57ae2f680d7a1eba7af2ee831f305b2f0f9324 diff --git a/nihav-ms/src/codecs/msadpcm.rs b/nihav-ms/src/codecs/msadpcm.rs index de6f447..44baedb 100644 --- a/nihav-ms/src/codecs/msadpcm.rs +++ b/nihav-ms/src/codecs/msadpcm.rs @@ -3,7 +3,7 @@ use nihav_core::io::byteio::*; use std::str::FromStr; const ADAPT_TABLE: [i32; 16] = [ - 230, 230, 230, 230, 307, 409, 512, 614, + 230, 230, 230, 230, 307, 409, 512, 614, 768, 614, 512, 409, 307, 230, 230, 230 ]; const ADAPT_COEFFS: [[i32; 2]; 7] = [ @@ -58,6 +58,7 @@ impl MSADPCMDecoder { } impl NADecoder for MSADPCMDecoder { + #[allow(clippy::int_plus_one)] fn init(&mut self, _supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> { if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() { self.block_len = ainfo.get_block_len(); @@ -96,7 +97,7 @@ impl NADecoder for MSADPCMDecoder { if let NACodecTypeInfo::Audio(_) = info.get_properties() { let pktbuf = pkt.get_buffer(); let channels = self.chmap.num_channels(); - validate!(pktbuf.len() > 0 && (pktbuf.len() % self.block_len) == 0); + validate!(!pktbuf.is_empty() && (pktbuf.len() % self.block_len) == 0); let nblocks = pktbuf.len() / self.block_len; let nsamples = nblocks * self.block_samps; let abuf = alloc_audio_buffer(self.ainfo, nsamples, self.chmap.clone())?; @@ -186,7 +187,7 @@ const DEFAULT_BLOCK_LEN: usize = 256; impl MSADPCMEncoder { fn new() -> Self { Self::default() } fn encode_packet(&mut self) -> EncoderResult { - if self.samples.len() == 0 { + if self.samples.is_empty() { return Err(EncoderError::TryAgain); } let len = (self.samples.len() / self.channels).min(self.block_len); @@ -302,9 +303,9 @@ impl NAEncoder for MSADPCMEncoder { NACodecTypeInfo::None => { let mut ofmt = EncodeParameters::default(); ofmt.format = NACodecTypeInfo::Audio(NAAudioInfo::new(0, 1, SND_S16_FORMAT, DEFAULT_BLOCK_LEN)); - return Ok(ofmt); + Ok(ofmt) }, - NACodecTypeInfo::Video(_) => return Err(EncoderError::FormatError), + NACodecTypeInfo::Video(_) => Err(EncoderError::FormatError), NACodecTypeInfo::Audio(ainfo) => { let mut outinfo = ainfo; outinfo.channels = outinfo.channels.min(2); @@ -320,11 +321,11 @@ impl NAEncoder for MSADPCMEncoder { if (outinfo.channels == 1) && ((outinfo.block_len & 1) == 1) { outinfo.block_len += 1; } - let mut ofmt = EncodeParameters::default(); + let mut ofmt = *encinfo; ofmt.format = NACodecTypeInfo::Audio(outinfo); - return Ok(ofmt); + Ok(ofmt) } - }; + } } fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult { match encinfo.format { @@ -346,13 +347,15 @@ impl NAEncoder for MSADPCMEncoder { let soniton = NASoniton::new(4, 0); let out_ainfo = NAAudioInfo::new(ainfo.sample_rate, ainfo.channels, soniton, Self::calc_block_size(self.block_len, self.channels)); let info = NACodecInfo::new("ms-adpcm", NACodecTypeInfo::Audio(out_ainfo), None); - let stream = NAStream::new(StreamType::Audio, stream_id, info.clone(), self.block_len as u32, ainfo.sample_rate).into_ref(); + let mut stream = NAStream::new(StreamType::Audio, stream_id, info.clone(), self.block_len as u32, ainfo.sample_rate); + stream.set_num(stream_id as usize); + let stream = stream.into_ref(); self.stream = Some(stream.clone()); self.samples = Vec::with_capacity(self.block_len * self.channels); self.srate = ainfo.sample_rate; self.flush = false; - + Ok(stream) }, } @@ -416,10 +419,10 @@ mod test { let mut dmx_reg = RegisteredDemuxers::new(); generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - ms_register_all_codecs(&mut dec_reg); + ms_register_all_decoders(&mut dec_reg); test_decoding("avi", "ms-adpcm", "assets/MS/dance.avi", None, &dmx_reg, &dec_reg, - ExpectedTestResult::MD5([0x9d6619e1, 0x60d83560, 0xfe5c1fb7, 0xad5d130d])); + ExpectedTestResult::MD5([0xf5e3fc84, 0xbcabc11c, 0x33c6874e, 0xe05ecd14])); } #[cfg(feature="encoder_ms_adpcm")] #[test] @@ -427,8 +430,8 @@ mod test { let mut dmx_reg = RegisteredDemuxers::new(); generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - generic_register_all_codecs(&mut dec_reg); - ms_register_all_codecs(&mut dec_reg); + generic_register_all_decoders(&mut dec_reg); + ms_register_all_decoders(&mut dec_reg); let mut mux_reg = RegisteredMuxers::new(); generic_register_all_muxers(&mut mux_reg); let mut enc_reg = RegisteredEncoders::new(); @@ -461,6 +464,7 @@ mod test { tb_den: 0, flags: 0, }; - test_encoding_to_file(&dec_config, &enc_config, enc_params); + test_encoding_md5(&dec_config, &enc_config, enc_params, + &[0xe1591a1e, 0x816d0239, 0x4cc42291, 0x4e6b69cb]); } }