if (self.src.tell() & 1) == 1 {
self.src.read_skip(1)?;
self.movi_size -= 1;
+ if self.movi_size == 0 { return Err(EOF); }
}
self.src.read_buf(&mut tag)?;
let size = self.src.read_u32le()? as usize;
if mktag!(tag) == mktag!(b"JUNK") {
self.movi_size -= size + 8;
self.src.read_skip(size)?;
+ if self.movi_size == 0 { return Err(EOF); }
+ continue;
+ }
+ if mktag!(tag) == mktag!(b"LIST") {
+ self.movi_size -= 12;
+ self.src.read_skip(4)?;
+ if self.movi_size == 0 { return Err(EOF); }
continue;
}
if tag[0] < b'0' || tag[0] > b'9' || tag[1] < b'0' || tag[1] > b'9' {
let str = self.dmx.get_stream(stream_no as usize);
if let None = str { return Err(InvalidData); }
let stream = str.unwrap();
+ if size == 0 {
+ self.movi_size -= 8;
+ if self.movi_size == 0 { return Err(EOF); }
+ continue;
+ }
let (tb_num, tb_den) = stream.get_timebase();
let ts = NATimeInfo::new(Some(self.cur_frame[stream_no as usize]), None, None, tb_num, tb_den);
let pkt = self.src.read_packet(stream, ts, false, size)?;
let samplespersec = dmx.src.read_u32le()?;
let avgbytespersec = dmx.src.read_u32le()?;
let block_align = dmx.src.read_u16le()?;
- let bits_per_sample = dmx.src.read_u16le()?;
+ let bits_per_sample = dmx.src.read_u16le()? * 8;
let soniton = NASoniton::new(bits_per_sample as u8, SONITON_FLAG_SIGNED);
let ahdr = NAAudioInfo::new(samplespersec, channels as u8, soniton, block_align as usize);