} 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)
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]);
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);
(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 {
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();