} else {
let entries = br.read_u32be()? as usize;
validate!((entries * 4 + 12) as u64 == size);
- if entries < 1024 {
- track.chunk_sizes = Vec::with_capacity(entries);
- for _ in 0..entries {
- let sample_size = br.read_u32be()?;
- track.chunk_sizes.push(sample_size);
- }
- } else {
- // reading whole array at once and converting it later is much faster
- track.chunk_sizes = vec![0; entries];
- unsafe {
- let ptr = track.chunk_sizes.as_mut_ptr() as *mut u8;
- let dbuf = std::slice::from_raw_parts_mut(ptr, entries * 4);
- br.read_buf(dbuf)?;
- }
- for el in track.chunk_sizes.iter_mut() {
- *el = u32::from_be(*el);
- }
- }
+ track.chunk_sizes = vec![0; entries];
+ br.read_u32be_arr(&mut track.chunk_sizes)?;
Ok(size)
}
}
validate!(idx < self.deltas.tabs.len());
let len = br.read_byte()? as usize;
validate!(((len * 2) as i64) == br.left());
- for i in 0..len {
- self.deltas.tabs[idx][i] = br.read_u16be()? as i16;
- }
+ br.read_i16be_arr(&mut self.deltas.tabs[idx][..len])?;
Ok(())
}
self.frame_sizes.resize(self.frames, 0);
self.frame_flags.resize(self.frames, 0);
- for i in 0..self.frames {
- self.frame_sizes[i] = src.read_u32le()?;
- }
- for i in 0..self.frames {
- self.frame_flags[i] = src.read_byte()?;
- }
+ src.read_u32le_arr(&mut self.frame_sizes)?;
+ src.read_buf(&mut self.frame_flags)?;
src.read_buf(&mut treedata[24..])?;