]> git.nihav.org Git - nihav.git/blobdiff - src/demuxers/gdv.rs
Split formats into separate file and extend their functionality
[nihav.git] / src / demuxers / gdv.rs
index c556197828dec46036905efe4e499d1bcb860b40..b84bc9892dd4866fbb077b42af5ea3e7c2b0aa6c 100644 (file)
@@ -1,7 +1,6 @@
 use super::*;
 use io::byteio::*;
 use frame::*;
-use std::io::SeekFrom;
 //use std::collections::HashMap;
 
 enum GDVState {
@@ -13,7 +12,7 @@ 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,
@@ -103,7 +102,7 @@ pktdta: Vec::new(),
         }
     }
 
-    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();
@@ -123,9 +122,8 @@ pktdta: Vec::new(),
         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)