core: improve SeekIndex functionality
authorKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 15 Nov 2019 18:59:19 +0000 (19:59 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 15 Nov 2019 18:59:19 +0000 (19:59 +0100)
nihav-core/src/demuxers/mod.rs

index 64991323f9ec58548ef58950d1d2918a021d943d..08837822be8c6253af59f739c3325be85935d2a3 100644 (file)
@@ -207,9 +207,13 @@ pub struct SeekIndex {
 
 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<usize> {
@@ -228,6 +232,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<SeekIndexResult> {
         let mut cand = None;
         for str in self.seek_info.iter() {