split nihav-registry from nihav-core
[nihav.git] / nihav-commonfmt / src / demuxers / avi.rs
index 93ac060b96b37326e39bdb7801287ae3c3f43cae..9b53d14d5031d1c3238fef52fbea064c9e1fe217 100644 (file)
@@ -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);