X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fdemuxers%2Fmod.rs;h=ee2fe58ae871aa604a05ee13b0092acf0153ad4b;hb=79ec1d51391cccce3c8ca2d4ea7e640cc78f0ee6;hp=64991323f9ec58548ef58950d1d2918a021d943d;hpb=4cfb5dd496118a94b7b59b806f0b81a17e47630c;p=nihav.git diff --git a/nihav-core/src/demuxers/mod.rs b/nihav-core/src/demuxers/mod.rs index 6499132..ee2fe58 100644 --- a/nihav-core/src/demuxers/mod.rs +++ b/nihav-core/src/demuxers/mod.rs @@ -203,13 +203,18 @@ pub struct SeekIndexResult { pub struct SeekIndex { pub seek_info: Vec, pub mode: SeekIndexMode, + pub skip_index: bool, } impl SeekIndex { pub fn new() -> Self { Self::default() } - pub fn add_stream(&mut self, id: u32) { - if self.stream_id_to_index(id).is_none() { + pub fn add_stream(&mut self, id: u32) -> usize { + let ret = self.stream_id_to_index(id); + if ret.is_none() { self.seek_info.push(StreamSeekInfo::new(id)); + self.seek_info.len() - 1 + } else { + ret.unwrap() } } pub fn stream_id_to_index(&self, id: u32) -> Option { @@ -228,6 +233,14 @@ impl SeekIndex { } None } + pub fn add_entry(&mut self, id: u32, entry: SeekEntry) { + let mut idx = self.stream_id_to_index(id); + if idx.is_none() { + idx = Some(self.add_stream(id)); + } + self.seek_info[idx.unwrap()].add_entry(entry); + self.seek_info[idx.unwrap()].filled = true; + } pub fn find_pos(&self, time: u64) -> Option { let mut cand = None; for str in self.seek_info.iter() { @@ -295,6 +308,9 @@ impl<'a> Demuxer<'a> { } } pub fn seek(&mut self, time: u64) -> DemuxerResult<()> { + if self.seek_idx.skip_index { + return Err(DemuxerError::NotPossible); + } self.dmx.seek(time, &self.seek_idx) } pub fn get_seek_index(&self) -> &SeekIndex {