X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-llaudio%2Fsrc%2Fcodecs%2Fape.rs;h=7b02c94d033e21ac25848bbbcc0651cda91851f9;hb=c6432d30823e5b5372e74290b34bf89af6ece52f;hp=773c116024e51ce8402de771c46ab5612d60dc76;hpb=06fc12ca7c3847de59211b891c325c02bd2f1795;p=nihav.git diff --git a/nihav-llaudio/src/codecs/ape.rs b/nihav-llaudio/src/codecs/ape.rs index 773c116..7b02c94 100644 --- a/nihav-llaudio/src/codecs/ape.rs +++ b/nihav-llaudio/src/codecs/ape.rs @@ -107,7 +107,7 @@ impl NADecoder for APEDecoder { } else { return Err(DecoderError::NotImplemented); }; - self.ainfo = NAAudioInfo::new(srate, channels as u8, SND_S16P_FORMAT, 4602); + self.ainfo = NAAudioInfo::new(srate, channels, SND_S16P_FORMAT, 4602); Ok(()) } else { Err(DecoderError::InvalidData) @@ -126,7 +126,7 @@ impl NADecoder for APEDecoder { validate!(nblocks > 0); let bits = u32::from(pktbuf[4]); validate!(bits < 32); - self.data.truncate(0); + self.data.clear(); self.data.reserve((pktbuf.len() & !3) + 2); for word in pktbuf[8..].chunks_exact(4) { self.data.push(word[3]); @@ -169,7 +169,7 @@ impl NADecoder for APEDecoder { if self.is_stereo { self.right.resize(nblocks, 0); } - if (fflags & 3) == 0 { + if (!self.is_stereo && (fflags & 1) == 0) || (self.is_stereo && (fflags & 3) != 3) { if !self.is_stereo || (fflags & 4) != 0 { (self.decode_mono)(&mut coder, &mut self.left)?; self.fmode.filter_mono(&mut self.left); @@ -260,6 +260,7 @@ mod test { use nihav_codec_support::test::dec_video::*; use crate::llaudio_register_all_decoders; use crate::llaudio_register_all_demuxers; + // samples from Libav test suite #[test] fn test_ape_3990() { let mut dmx_reg = RegisteredDemuxers::new();