fix clippy warnings
[nihav.git] / nihav-llaudio / src / codecs / ape.rs
index a89f0c5342a18b14dcf39b8b88220da49cb0336e..7b02c94d033e21ac25848bbbcc0651cda91851f9 100644 (file)
@@ -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);
@@ -181,6 +181,11 @@ impl NADecoder for APEDecoder {
                     (self.decode_stereo)(&mut coder, &mut self.left, &mut self.right)?;
                     self.fmode.filter_stereo(&mut self.left, &mut self.right);
                 }
+            } else {
+                for l in self.left.iter_mut() { *l = 0; }
+                if self.is_stereo {
+                    for r in self.right.iter_mut() { *r = 0; }
+                }
             }
 
             if self.version >= 0x3990 || nblocks == self.blocksperframe {
@@ -255,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();