From 21140a1bd14be6da3877e89ce8d5d2c30c3c2b87 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sun, 17 Aug 2025 19:17:33 +0200 Subject: [PATCH] nihav_indeo: switch to ByteIO --- nihav-indeo/src/codecs/indeo3.rs | 21 ++++++++++----------- nihav-indeo/src/codecs/indeo3enc/mod.rs | 6 ++---- nihav-indeo/src/demuxers/dvi.rs | 9 ++++----- nihav-indeo/src/demuxers/ivf.rs | 9 ++++----- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/nihav-indeo/src/codecs/indeo3.rs b/nihav-indeo/src/codecs/indeo3.rs index 3dd2e78..5d6b72b 100644 --- a/nihav-indeo/src/codecs/indeo3.rs +++ b/nihav-indeo/src/codecs/indeo3.rs @@ -66,14 +66,14 @@ impl Header { } } -struct DataReader<'a, 'b> { - br: &'a mut ByteReader<'b>, +struct DataReader<'a> { + br: &'a mut dyn ByteIO, bpos: u8, bitbuf: u8, } -impl<'a, 'b> DataReader<'a, 'b> { - fn new(br: &'a mut ByteReader<'b>) -> Self { +impl<'a> DataReader<'a> { + fn new(br: &'a mut dyn ByteIO) -> Self { Self { br, bpos: 0, @@ -108,8 +108,8 @@ impl Corrector { fn is_whole_block(&self) -> bool { matches!(*self, Corrector::Fill(_) | Corrector::ZeroBlock | Corrector::SkipBlock) } } -struct QuadDecoder<'a, 'b, 'c> { - br: &'a mut DataReader<'b, 'c>, +struct QuadDecoder<'a, 'b> { + br: &'a mut DataReader<'b>, cb: [&'static IviDeltaCB; 4], cb_idx: [usize; 4], mode: u8, @@ -121,8 +121,8 @@ struct QuadDecoder<'a, 'b, 'c> { fill: Option, } -impl<'a, 'b, 'c> QuadDecoder<'a, 'b, 'c> { - fn new(br: &'a mut DataReader<'b, 'c>, mode: u8, cb_index: [usize; 2]) -> Self { +impl<'a, 'b> QuadDecoder<'a, 'b> { + fn new(br: &'a mut DataReader<'b>, mode: u8, cb_index: [usize; 2]) -> Self { Self { br, mode, lines_run: 0, @@ -788,7 +788,7 @@ impl IV3Frame { plane.reset() } } - fn decode_planes(&mut self, ref_frame: &mut IV3Frame, br: &mut ByteReader, header: &mut Header, requant_tab: &RequantTab) -> DecoderResult<()> { + fn decode_planes(&mut self, ref_frame: &mut IV3Frame, br: &mut dyn ByteIO, header: &mut Header, requant_tab: &RequantTab) -> DecoderResult<()> { let data_start = header.data_start; let data_end = header.data_end; for ((cur_plane, ref_plane), (&start, &end)) in self.plane.iter_mut() @@ -903,8 +903,7 @@ impl NADecoder for Indeo3Decoder { #[allow(clippy::manual_range_contains)] fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult { let src = pkt.get_buffer(); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); // read OS header let frameno = br.read_u32le()?; diff --git a/nihav-indeo/src/codecs/indeo3enc/mod.rs b/nihav-indeo/src/codecs/indeo3enc/mod.rs index 762f8a2..917b2a4 100644 --- a/nihav-indeo/src/codecs/indeo3enc/mod.rs +++ b/nihav-indeo/src/codecs/indeo3enc/mod.rs @@ -248,8 +248,7 @@ impl NAEncoder for Indeo3Encoder { } if skip_frame { let mut dbuf = Vec::with_capacity(16); - let mut gw = GrowableMemoryWriter::new_write(&mut dbuf); - let mut bw = ByteWriter::new(&mut gw); + let mut bw = GrowableMemoryWriter::new_write(&mut dbuf); // OS header bw.write_u32le(self.frameno)?; @@ -282,8 +281,7 @@ impl NAEncoder for Indeo3Encoder { if let Some(ref vbuf) = buf.get_vbuf() { let mut dbuf = Vec::with_capacity(16); - let mut gw = GrowableMemoryWriter::new_write(&mut dbuf); - let mut bw = ByteWriter::new(&mut gw); + let mut bw = GrowableMemoryWriter::new_write(&mut dbuf); let (width, height) = vbuf.get_dimensions(0); if width != self.width || height != self.height { diff --git a/nihav-indeo/src/demuxers/dvi.rs b/nihav-indeo/src/demuxers/dvi.rs index 6a2d90e..21fbd1a 100644 --- a/nihav-indeo/src/demuxers/dvi.rs +++ b/nihav-indeo/src/demuxers/dvi.rs @@ -12,14 +12,14 @@ const GRAY_FORMAT: NAPixelFormaton = NAPixelFormaton { }; struct DVIDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, data_end: u64, packets: VecDeque, fsizes: Vec, } impl<'a> DVIDemuxer<'a> { - fn new(src: &'a mut ByteReader<'a>) -> Self { + fn new(src: &'a mut dyn ByteIO) -> Self { Self { src, data_end: 0, @@ -225,7 +225,7 @@ impl<'a> NAOptionHandler for DVIDemuxer<'a> { pub struct DVIDemuxerCreator { } impl DemuxerCreator for DVIDemuxerCreator { - fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box + 'a> { + fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box + 'a> { Box::new(DVIDemuxer::new(br)) } fn get_name(&self) -> &'static str { "dvi" } @@ -240,8 +240,7 @@ mod test { fn test_dvi_demux() { // sample comes from a demo by Digital Video Arts let mut file = File::open("assets/Indeo/YULELOG.AVS").unwrap(); - let mut fr = FileReader::new_read(&mut file); - let mut br = ByteReader::new(&mut fr); + let mut br = FileReader::new_read(&mut file); let mut dmx = DVIDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); diff --git a/nihav-indeo/src/demuxers/ivf.rs b/nihav-indeo/src/demuxers/ivf.rs index 6809bb4..813ade7 100644 --- a/nihav-indeo/src/demuxers/ivf.rs +++ b/nihav-indeo/src/demuxers/ivf.rs @@ -1,7 +1,7 @@ use nihav_core::demuxers::*; struct IVFDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, nframes: u32, vframe: u32, aframe: u32, @@ -15,7 +15,7 @@ struct IVFDemuxer<'a> { } impl<'a> IVFDemuxer<'a> { - fn new(src: &'a mut ByteReader<'a>) -> Self { + fn new(src: &'a mut dyn ByteIO) -> Self { IVFDemuxer { src, nframes: 0, @@ -272,7 +272,7 @@ impl<'a> NAOptionHandler for IVFDemuxer<'a> { pub struct IVFDemuxerCreator { } impl DemuxerCreator for IVFDemuxerCreator { - fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box + 'a> { + fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box + 'a> { Box::new(IVFDemuxer::new(br)) } fn get_name(&self) -> &'static str { "ivf" } @@ -287,8 +287,7 @@ mod test { fn test_ivf_demux() { // sample is a trailer for Heart of Darkness game let mut file = File::open("assets/Indeo/TRAILERIIE.IVF").unwrap(); - let mut fr = FileReader::new_read(&mut file); - let mut br = ByteReader::new(&mut fr); + let mut br = FileReader::new_read(&mut file); let mut dmx = IVFDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); -- 2.39.5