X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fdemuxers%2Fmod.rs;h=300b6af8f5dbca2b661e4e51dbccb115ddb01de3;hb=210f21b33136c0d4ed0c8e2dd02ffc7c9c518fc1;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..300b6af 100644 --- a/nihav-core/src/demuxers/mod.rs +++ b/nihav-core/src/demuxers/mod.rs @@ -45,18 +45,18 @@ pub trait DemuxCore<'a>: NAOptionHandler { /// An auxiliary trait to make bytestream reader read packet data. pub trait NAPacketReader { /// Reads input and constructs a packet containing it. - fn read_packet(&mut self, str: NAStreamRef, ts: NATimeInfo, keyframe: bool, size: usize) -> DemuxerResult; + fn read_packet(&mut self, strm: NAStreamRef, ts: NATimeInfo, keyframe: bool, size: usize) -> DemuxerResult; /// Reads input into already existing packet. fn fill_packet(&mut self, pkt: &mut NAPacket) -> DemuxerResult<()>; } impl<'a> NAPacketReader for ByteReader<'a> { - fn read_packet(&mut self, str: NAStreamRef, ts: NATimeInfo, kf: bool, size: usize) -> DemuxerResult { + fn read_packet(&mut self, strm: NAStreamRef, ts: NATimeInfo, kf: bool, size: usize) -> DemuxerResult { let mut buf: Vec = Vec::with_capacity(size); if buf.capacity() < size { return Err(DemuxerError::MemoryError); } buf.resize(size, 0); self.read_buf(buf.as_mut_slice())?; - let pkt = NAPacket::new(str, ts, kf, buf); + let pkt = NAPacket::new(strm, ts, kf, buf); Ok(pkt) } fn fill_packet(&mut self, pkt: &mut NAPacket) -> DemuxerResult<()> { @@ -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) } @@ -300,8 +300,8 @@ impl SeekIndex { } /// Adds a new stream to the index. pub fn stream_id_to_index(&self, id: u32) -> Option { - for (idx, str) in self.seek_info.iter().enumerate() { - if str.id == id { + for (idx, strm) in self.seek_info.iter().enumerate() { + if strm.id == id { return Some(idx); } } @@ -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 }); } } } @@ -354,10 +354,10 @@ pub struct Demuxer<'a> { impl<'a> Demuxer<'a> { /// Constructs a new `Demuxer` instance. - fn new(dmx: Box + 'a>, str: StreamManager, seek_idx: SeekIndex) -> Self { + fn new(dmx: Box + 'a>, strmgr: StreamManager, seek_idx: SeekIndex) -> Self { Demuxer { dmx, - streams: str, + streams: strmgr, seek_idx, } } @@ -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.