X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fdemuxers%2Favi.rs;h=9b53d14d5031d1c3238fef52fbea064c9e1fe217;hp=93ac060b96b37326e39bdb7801287ae3c3f43cae;hb=32f7cbe538d71574f7ac05aa51599d2678f5db3f;hpb=4a6263cf8ef4a0d6ae85a04d5bac8326190bbd1e diff --git a/nihav-commonfmt/src/demuxers/avi.rs b/nihav-commonfmt/src/demuxers/avi.rs index 93ac060..9b53d14 100644 --- a/nihav-commonfmt/src/demuxers/avi.rs +++ b/nihav-commonfmt/src/demuxers/avi.rs @@ -1,5 +1,5 @@ use nihav_core::demuxers::*; -use nihav_core::register; +use nihav_registry::register; use nihav_core::demuxers::DemuxerError::*; macro_rules! mktag { @@ -224,16 +224,18 @@ impl<'a> AVIDemuxer<'a> { } rest_size -= csz; } - self.src.read_skip(self.movi_size)?; - while rest_size > 0 { - let ret = self.parse_chunk(strmgr, RIFFTag::Chunk(mktag!(b"idx1")), rest_size,0); - if ret.is_err() { break; } - let (csz, end) = ret.unwrap(); - if end { - let _res = parse_idx1(&mut self.src, strmgr, seek_idx, csz, self.movi_pos); - break; + if !seek_idx.skip_index { + self.src.read_skip(self.movi_size)?; + while rest_size > 0 { + let ret = self.parse_chunk(strmgr, RIFFTag::Chunk(mktag!(b"idx1")), rest_size,0); + if ret.is_err() { break; } + let (csz, end) = ret.unwrap(); + if end { + let _res = parse_idx1(&mut self.src, strmgr, seek_idx, csz, self.movi_pos); + break; + } + rest_size -= csz; } - rest_size -= csz; } if self.movi_pos != 0 { self.src.seek(SeekFrom::Start(self.movi_pos))?; @@ -379,7 +381,7 @@ fn parse_strf_auds(dmx: &mut AVIDemuxer, strmgr: &mut StreamManager, size: usize 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()? * 8; + let bits_per_sample = dmx.src.read_u16le()?; 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); @@ -485,7 +487,8 @@ mod test { let mut br = ByteReader::new(&mut fr); let mut dmx = AVIDemuxer::new(&mut br); let mut sm = StreamManager::new(); - dmx.open(&mut sm).unwrap(); + let mut si = SeekIndex::new(); + dmx.open(&mut sm, &mut si).unwrap(); loop { let pktres = dmx.get_frame(&mut sm);