X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fdemuxers%2Fmod.rs;h=181f88a0d7c9a8beb7e2c20aa2f4e3d723163240;hb=3ff976b20cc372c8230fa21bb05829abc33db66b;hp=46e06175e10924698da87cc5ac28f3b2cff321d4;hpb=1ebf572dc8cdbf6e1440d90295b3e69eb76339df;p=nihav.git diff --git a/nihav-core/src/demuxers/mod.rs b/nihav-core/src/demuxers/mod.rs index 46e0617..181f88a 100644 --- a/nihav-core/src/demuxers/mod.rs +++ b/nihav-core/src/demuxers/mod.rs @@ -90,9 +90,9 @@ impl StreamManager { /// Adds a new stream. pub fn add_stream(&mut self, stream: NAStream) -> Option { let stream_num = self.streams.len(); - let mut str = stream; - str.set_num(stream_num); - self.streams.push(str.into_ref()); + let mut stream = stream; + stream.set_num(stream_num); + self.streams.push(stream.into_ref()); self.ignored.push(false); Some(stream_num) } @@ -309,9 +309,9 @@ impl SeekIndex { } /// Returns stream reference for provided stream ID. pub fn get_stream_index(&mut self, id: u32) -> Option<&mut StreamSeekInfo> { - for str in self.seek_info.iter_mut() { - if str.id == id { - return Some(str); + for stream in self.seek_info.iter_mut() { + if stream.id == id { + return Some(stream); } } None @@ -328,16 +328,16 @@ impl SeekIndex { /// Searches for a seek position before requested time. pub fn find_pos(&self, time: NATimePoint) -> Option { let mut cand = None; - for str in self.seek_info.iter() { - if !str.filled { continue; } - let res = str.find_pos(time); + for stream in self.seek_info.iter() { + if !stream.filled { continue; } + let res = stream.find_pos(time); if res.is_none() { continue; } let res = res.unwrap(); if cand.is_none() { - cand = Some(SeekIndexResult { pts: res.pts, pos: res.pos, str_id: str.id }); + cand = Some(SeekIndexResult { pts: res.pts, pos: res.pos, str_id: stream.id }); } else if let Some(entry) = cand { if res.pos < entry.pos { - cand = Some(SeekIndexResult { pts: res.pts, pos: res.pos, str_id: str.id }); + cand = Some(SeekIndexResult { pts: res.pts, pos: res.pos, str_id: stream.id }); } } } @@ -465,10 +465,20 @@ pub trait DemuxerCreator { /// Creates demuxer for a provided bytestream. pub fn create_demuxer<'a>(dmxcr: &dyn DemuxerCreator, br: &'a mut ByteReader<'a>) -> DemuxerResult> { let mut dmx = dmxcr.new_demuxer(br); - let mut str = StreamManager::new(); + let mut strmgr = StreamManager::new(); + let mut seek_idx = SeekIndex::new(); + dmx.open(&mut strmgr, &mut seek_idx)?; + Ok(Demuxer::new(dmx, strmgr, seek_idx)) +} + +/// Creates demuxer for a provided bytestream with options applied right after its creation. +pub fn create_demuxer_with_options<'a>(dmxcr: &dyn DemuxerCreator, br: &'a mut ByteReader<'a>, opts: &[NAOption]) -> DemuxerResult> { + let mut dmx = dmxcr.new_demuxer(br); + dmx.set_options(opts); + let mut strmgr = StreamManager::new(); let mut seek_idx = SeekIndex::new(); - dmx.open(&mut str, &mut seek_idx)?; - Ok(Demuxer::new(dmx, str, seek_idx)) + dmx.open(&mut strmgr, &mut seek_idx)?; + Ok(Demuxer::new(dmx, strmgr, seek_idx)) } /// List of registered demuxers. @@ -631,10 +641,20 @@ pub trait RawDemuxerCreator { /// Creates raw data demuxer for a provided bytestream. pub fn create_raw_demuxer<'a>(dmxcr: &dyn RawDemuxerCreator, br: &'a mut ByteReader<'a>) -> DemuxerResult> { let mut dmx = dmxcr.new_demuxer(br); - let mut str = StreamManager::new(); + let mut strmgr = StreamManager::new(); + let mut seek_idx = SeekIndex::new(); + dmx.open(&mut strmgr, &mut seek_idx)?; + Ok(RawDemuxer::new(dmx, strmgr, seek_idx)) +} + +/// Creates raw data demuxer for a provided bytestream with options applied right after its creation. +pub fn create_raw_demuxer_with_options<'a>(dmxcr: &dyn RawDemuxerCreator, br: &'a mut ByteReader<'a>, opts: &[NAOption]) -> DemuxerResult> { + let mut dmx = dmxcr.new_demuxer(br); + dmx.set_options(opts); + let mut strmgr = StreamManager::new(); let mut seek_idx = SeekIndex::new(); - dmx.open(&mut str, &mut seek_idx)?; - Ok(RawDemuxer::new(dmx, str, seek_idx)) + dmx.open(&mut strmgr, &mut seek_idx)?; + Ok(RawDemuxer::new(dmx, strmgr, seek_idx)) } /// List of registered demuxers.