use super::*;
use io::byteio::*;
use frame::*;
-use std::io::SeekFrom;
//use std::collections::HashMap;
enum GDVState {
pub struct GremlinVideoDemuxer<'a> {
opened: bool,
src: &'a mut ByteReader<'a>,
- streams: Vec<Rc<NAStream<'a>>>,
+ streams: Vec<Rc<NAStream>>,
frames: u16,
cur_frame: u16,
asize: usize,
}
}
- fn find_stream(&mut self, id: u32) -> Rc<NAStream<'a>> {
+ fn find_stream(&mut self, id: u32) -> Rc<NAStream> {
for i in 0..self.streams.len() {
if self.streams[i].get_id() == id {
return self.streams[i].clone();
let magic = src.read_u16be()?;
if magic != 0x0513 { return Err(DemuxerError::InvalidData); }
let size = (src.read_u16le()? as usize) + 4;
- let tmp = src.read_u32le()?;
+ let tmp = src.peek_u32le()?;
let flags = (tmp & 0xFF) as usize;
- src.seek(SeekFrom::Current(-4))?;
self.state = GDVState::NewFrame;
self.cur_frame = self.cur_frame + 1;
src.read_packet(str, Some((self.cur_frame - 1) as u64), None, None, if (flags & 64) != 0 { true } else { false }, size)