diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2019-04-29 13:15:59 +0200 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2019-04-29 13:15:59 +0200 |
commit | 70910ac3fdc02c7b7727a4a294f55134e9f5141d (patch) | |
tree | 25a8d46b8c4b22ce6121a311a0a5d32ba786f11e /nihav-core/src | |
parent | 49db8a1187bd05535f13a5d13effb9f0bb8ac394 (diff) | |
download | nihav-70910ac3fdc02c7b7727a4a294f55134e9f5141d.tar.gz |
switch NAStream reference to Arc
Diffstat (limited to 'nihav-core/src')
-rw-r--r-- | nihav-core/src/demuxers/mod.rs | 23 | ||||
-rw-r--r-- | nihav-core/src/frame.rs | 9 |
2 files changed, 17 insertions, 15 deletions
diff --git a/nihav-core/src/demuxers/mod.rs b/nihav-core/src/demuxers/mod.rs index 48529d4..b3546fe 100644 --- a/nihav-core/src/demuxers/mod.rs +++ b/nihav-core/src/demuxers/mod.rs @@ -1,4 +1,3 @@ -use std::rc::Rc; pub use crate::frame::*; pub use crate::io::byteio::*; @@ -23,12 +22,12 @@ pub trait DemuxCore<'a> { } pub trait NAPacketReader { - fn read_packet(&mut self, str: Rc<NAStream>, ts: NATimeInfo, keyframe: bool, size: usize) -> DemuxerResult<NAPacket>; + fn read_packet(&mut self, str: NAStreamRef, ts: NATimeInfo, keyframe: bool, size: usize) -> DemuxerResult<NAPacket>; fn fill_packet(&mut self, pkt: &mut NAPacket) -> DemuxerResult<()>; } impl<'a> NAPacketReader for ByteReader<'a> { - fn read_packet(&mut self, str: Rc<NAStream>, ts: NATimeInfo, kf: bool, size: usize) -> DemuxerResult<NAPacket> { + fn read_packet(&mut self, str: NAStreamRef, ts: NATimeInfo, kf: bool, size: usize) -> DemuxerResult<NAPacket> { let mut buf: Vec<u8> = Vec::with_capacity(size); if buf.capacity() < size { return Err(DemuxerError::MemoryError); } buf.resize(size, 0); @@ -47,7 +46,7 @@ impl<'a> NAPacketReader for ByteReader<'a> { } pub struct StreamManager { - streams: Vec<Rc<NAStream>>, + streams: Vec<NAStreamRef>, ignored: Vec<bool>, no_ign: bool, } @@ -66,18 +65,18 @@ impl StreamManager { let stream_num = self.streams.len(); let mut str = stream.clone(); str.set_num(stream_num); - self.streams.push(Rc::new(str)); + self.streams.push(str.into_ref()); self.ignored.push(false); Some(stream_num) } - pub fn get_stream(&self, idx: usize) -> Option<Rc<NAStream>> { + pub fn get_stream(&self, idx: usize) -> Option<NAStreamRef> { if idx < self.streams.len() { Some(self.streams[idx].clone()) } else { None } } - pub fn get_stream_by_id(&self, id: u32) -> Option<Rc<NAStream>> { + pub fn get_stream_by_id(&self, id: u32) -> Option<NAStreamRef> { for i in 0..self.streams.len() { if self.streams[i].get_id() == id { return Some(self.streams[i].clone()); @@ -117,18 +116,18 @@ impl StreamManager { } pub struct StreamIter<'a> { - streams: &'a Vec<Rc<NAStream>>, + streams: &'a Vec<NAStreamRef>, pos: usize, } impl<'a> StreamIter<'a> { - pub fn new(streams: &'a Vec<Rc<NAStream>>) -> Self { + pub fn new(streams: &'a Vec<NAStreamRef>) -> Self { StreamIter { streams: streams, pos: 0 } } } impl<'a> Iterator for StreamIter<'a> { - type Item = Rc<NAStream>; + type Item = NAStreamRef; fn next(&mut self) -> Option<Self::Item> { if self.pos >= self.streams.len() { return None; } @@ -150,10 +149,10 @@ impl<'a> Demuxer<'a> { streams: str, } } - pub fn get_stream(&self, idx: usize) -> Option<Rc<NAStream>> { + pub fn get_stream(&self, idx: usize) -> Option<NAStreamRef> { self.streams.get_stream(idx) } - pub fn get_stream_by_id(&self, id: u32) -> Option<Rc<NAStream>> { + pub fn get_stream_by_id(&self, id: u32) -> Option<NAStreamRef> { self.streams.get_stream_by_id(id) } pub fn get_num_streams(&self) -> usize { diff --git a/nihav-core/src/frame.rs b/nihav-core/src/frame.rs index bc3216b..d97850b 100644 --- a/nihav-core/src/frame.rs +++ b/nihav-core/src/frame.rs @@ -739,6 +739,8 @@ pub struct NAStream { tb_den: u32, } +pub type NAStreamRef = Arc<NAStream>; + pub fn reduce_timebase(tb_num: u32, tb_den: u32) -> (u32, u32) { if tb_num == 0 { return (tb_num, tb_den); } if (tb_den % tb_num) == 0 { return (1, tb_den / tb_num); } @@ -769,6 +771,7 @@ impl NAStream { self.tb_num = n; self.tb_den = d; } + pub fn into_ref(self) -> NAStreamRef { Arc::new(self) } } impl fmt::Display for NAStream { @@ -779,7 +782,7 @@ impl fmt::Display for NAStream { #[allow(dead_code)] pub struct NAPacket { - stream: Rc<NAStream>, + stream: NAStreamRef, ts: NATimeInfo, buffer: NABufferRef<Vec<u8>>, keyframe: bool, @@ -787,12 +790,12 @@ pub struct NAPacket { } impl NAPacket { - pub fn new(str: Rc<NAStream>, ts: NATimeInfo, kf: bool, vec: Vec<u8>) -> Self { + pub fn new(str: NAStreamRef, ts: NATimeInfo, kf: bool, vec: Vec<u8>) -> Self { // let mut vec: Vec<u8> = Vec::new(); // vec.resize(size, 0); NAPacket { stream: str, ts: ts, keyframe: kf, buffer: NABufferRef::new(vec) } } - pub fn get_stream(&self) -> Rc<NAStream> { self.stream.clone() } + pub fn get_stream(&self) -> NAStreamRef { self.stream.clone() } pub fn get_time_information(&self) -> NATimeInfo { self.ts } pub fn get_pts(&self) -> Option<u64> { self.ts.get_pts() } pub fn get_dts(&self) -> Option<u64> { self.ts.get_dts() } |