From 1c0ad7dc08b475092f280bad4b1502afeb6a7748 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sun, 17 Aug 2025 18:07:28 +0200 Subject: [PATCH] nihav_acorn: switch to ByteIO --- nihav-acorn/src/codecs/escape.rs | 6 ++---- nihav-acorn/src/codecs/linepack.rs | 3 +-- nihav-acorn/src/codecs/movinglines.rs | 3 +-- nihav-acorn/src/codecs/rawvideo.rs | 3 +-- nihav-acorn/src/demuxers/armovie.rs | 16 +++++++--------- nihav-acorn/src/demuxers/tca.rs | 15 +++++++-------- 6 files changed, 19 insertions(+), 27 deletions(-) diff --git a/nihav-acorn/src/codecs/escape.rs b/nihav-acorn/src/codecs/escape.rs index d2e0b4d..d5b4e07 100644 --- a/nihav-acorn/src/codecs/escape.rs +++ b/nihav-acorn/src/codecs/escape.rs @@ -98,8 +98,7 @@ impl NADecoder for Escape102Decoder { fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult { let src = pkt.get_buffer(); validate!(src.len() > 8); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let codec_id = br.read_u32le()?; validate!(codec_id == 0x102); let vsize = br.read_u32le()? as usize; @@ -230,8 +229,7 @@ impl NADecoder for Escape122Decoder { fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult { let src = pkt.get_buffer(); validate!(src.len() > 8); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let codec_id = br.read_u32le()?; validate!(codec_id == 0x100 + 22); let vsize = br.read_u32le()? as usize; diff --git a/nihav-acorn/src/codecs/linepack.rs b/nihav-acorn/src/codecs/linepack.rs index 62f4054..feb1cd6 100644 --- a/nihav-acorn/src/codecs/linepack.rs +++ b/nihav-acorn/src/codecs/linepack.rs @@ -41,8 +41,7 @@ impl NADecoder for LinePackDecoder { fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult { let src = pkt.get_buffer(); validate!(src.len() > 2 && (src.len() & 1) == 0); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let mut is_intra = true; let mut dpos = 0; diff --git a/nihav-acorn/src/codecs/movinglines.rs b/nihav-acorn/src/codecs/movinglines.rs index b11af12..fb9696b 100644 --- a/nihav-acorn/src/codecs/movinglines.rs +++ b/nihav-acorn/src/codecs/movinglines.rs @@ -43,8 +43,7 @@ impl NADecoder for MLDecoder { fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult { let src = pkt.get_buffer(); validate!(src.len() > 2 && (src.len() & 1) == 0); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let mut is_intra = true; let mut dpos = 0; diff --git a/nihav-acorn/src/codecs/rawvideo.rs b/nihav-acorn/src/codecs/rawvideo.rs index 2e63695..71f9f74 100644 --- a/nihav-acorn/src/codecs/rawvideo.rs +++ b/nihav-acorn/src/codecs/rawvideo.rs @@ -100,8 +100,7 @@ impl NADecoder for RawDecoder { let bufinfo = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 0)?; match self.codec_id { 2 => { - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let mut buf = bufinfo.get_vbuf16().unwrap(); let stride = buf.get_stride(0); diff --git a/nihav-acorn/src/demuxers/armovie.rs b/nihav-acorn/src/demuxers/armovie.rs index 23cf94a..9243a30 100644 --- a/nihav-acorn/src/demuxers/armovie.rs +++ b/nihav-acorn/src/demuxers/armovie.rs @@ -28,7 +28,7 @@ trait ReadString { fn read_string(&mut self) -> DemuxerResult>; } -impl<'a> ReadString for ByteReader<'a> { +impl ReadString for T { fn read_string(&mut self) -> DemuxerResult> { let mut res = Vec::new(); loop { @@ -153,7 +153,7 @@ enum ReadState { } struct ARMovieDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, chunk_offs: Vec, cur_chunk: usize, state: ReadState, @@ -164,7 +164,7 @@ struct ARMovieDemuxer<'a> { } impl<'a> ARMovieDemuxer<'a> { - fn new(src: &'a mut ByteReader<'a>) -> Self { + fn new(src: &'a mut dyn ByteIO) -> Self { Self { src, chunk_offs: Vec::new(), @@ -427,11 +427,11 @@ impl<'a> NAOptionHandler for ARMovieDemuxer<'a> { pub struct ARMovieDemuxerCreator { } impl RawDemuxerCreator for ARMovieDemuxerCreator { - 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(ARMovieDemuxer::new(br)) } fn get_name(&self) -> &'static str { "armovie" } - fn check_format(&self, br: &mut ByteReader) -> bool { + fn check_format(&self, br: &mut dyn ByteIO) -> bool { let mut hdr = [0; 8]; br.read_buf(&mut hdr).is_ok() && &hdr == b"ARMovie\n" } @@ -446,8 +446,7 @@ mod test { fn test_armovie_demux() { // a sample from Acorn Replay Demonstration Disc 2 let mut file = File::open("assets/Acorn/CHEMSET2").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 = ARMovieDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); @@ -467,8 +466,7 @@ mod test { fn test_armovie_tca_demux() { // a sample from All About Planes let mut file = File::open("assets/Acorn/wessex").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 = ARMovieDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); diff --git a/nihav-acorn/src/demuxers/tca.rs b/nihav-acorn/src/demuxers/tca.rs index e35e718..16c8cff 100644 --- a/nihav-acorn/src/demuxers/tca.rs +++ b/nihav-acorn/src/demuxers/tca.rs @@ -1,12 +1,12 @@ use nihav_core::demuxers::*; struct TCADemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, tca: TCACoreDemuxer, } impl<'a> TCADemuxer<'a> { - fn new(src: &'a mut ByteReader<'a>) -> Self { + fn new(src: &'a mut dyn ByteIO) -> Self { Self { src, tca: TCACoreDemuxer::default() @@ -38,7 +38,7 @@ impl<'a> NAOptionHandler for TCADemuxer<'a> { pub struct TCADemuxerCreator { } impl DemuxerCreator for TCADemuxerCreator { - 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(TCADemuxer::new(br)) } fn get_name(&self) -> &'static str { "tca" } @@ -57,7 +57,7 @@ pub(crate) struct TCACoreDemuxer { } impl TCACoreDemuxer { - pub(crate) fn open(&mut self, src: &mut ByteReader, strmgr: &mut StreamManager, mut tb_num: u32, mut tb_den: u32) -> DemuxerResult<()> { + pub(crate) fn open(&mut self, src: &mut dyn ByteIO, strmgr: &mut StreamManager, mut tb_num: u32, mut tb_den: u32) -> DemuxerResult<()> { let start_pos = src.tell(); let tag = src.peek_tag()?; let is_acef = &tag == b"ACEF"; @@ -175,7 +175,7 @@ impl TCACoreDemuxer { Ok(()) } - pub(crate) fn get_frame(&mut self, src: &mut ByteReader, strmgr: &mut StreamManager) -> DemuxerResult { + pub(crate) fn get_frame(&mut self, src: &mut dyn ByteIO, strmgr: &mut StreamManager) -> DemuxerResult { let has_video = self.video_pos + 4 < self.data_end; let has_audio = self.audio && self.sound_pos < self.sound_end; @@ -215,7 +215,7 @@ impl TCACoreDemuxer { } } - pub(crate) fn get_frame_raw(&mut self, src: &mut ByteReader, strmgr: &mut StreamManager) -> DemuxerResult { + pub(crate) fn get_frame_raw(&mut self, src: &mut dyn ByteIO, strmgr: &mut StreamManager) -> DemuxerResult { let pkt = self.get_frame(src, strmgr)?; Ok(NARawData::new_from_refbuf(pkt.get_stream(), pkt.get_buffer())) } @@ -230,8 +230,7 @@ mod test { fn test_tca_demux() { // a sample from RISC DISC 3 let mut file = File::open("assets/Acorn/JUMPER").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 = TCADemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); -- 2.39.5