From 00d7160df57b52a5eaf1a98a29b07013f954e327 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sun, 17 Aug 2025 18:58:43 +0200 Subject: [PATCH] nihav_game: switch to ByteIO --- nihav-game/src/codecs/bmv.rs | 3 +-- nihav-game/src/codecs/bmv3.rs | 19 +++++++------- nihav-game/src/codecs/gremlinvideo.rs | 17 ++++++------- nihav-game/src/codecs/kmvc.rs | 3 +-- nihav-game/src/codecs/midivid.rs | 6 ++--- nihav-game/src/codecs/seq.rs | 9 +++---- nihav-game/src/codecs/sga.rs | 14 ++++------- nihav-game/src/codecs/smush/iact.rs | 9 +++---- nihav-game/src/codecs/smush/v1.rs | 36 ++++++++++++--------------- nihav-game/src/codecs/smush/v2.rs | 10 +++----- nihav-game/src/codecs/vmd.rs | 19 ++++++-------- nihav-game/src/demuxers/bmv.rs | 18 ++++++-------- nihav-game/src/demuxers/gdv.rs | 9 +++---- nihav-game/src/demuxers/seq.rs | 9 +++---- nihav-game/src/demuxers/sga.rs | 11 ++++---- nihav-game/src/demuxers/smush.rs | 33 +++++++++++------------- nihav-game/src/demuxers/vmd.rs | 9 +++---- nihav-game/src/muxers/ea.rs | 6 ++--- 18 files changed, 102 insertions(+), 138 deletions(-) diff --git a/nihav-game/src/codecs/bmv.rs b/nihav-game/src/codecs/bmv.rs index ac487b0..a9d4313 100644 --- a/nihav-game/src/codecs/bmv.rs +++ b/nihav-game/src/codecs/bmv.rs @@ -187,8 +187,7 @@ impl NADecoder for BMVVideoDecoder { let src = pkt.get_buffer(); validate!(src.len() > 1); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let flags = br.read_byte()?; if (flags & BMV_COMMAND) != 0 { diff --git a/nihav-game/src/codecs/bmv3.rs b/nihav-game/src/codecs/bmv3.rs index 6d4149f..875285a 100644 --- a/nihav-game/src/codecs/bmv3.rs +++ b/nihav-game/src/codecs/bmv3.rs @@ -33,7 +33,7 @@ impl NibbleReader { fn new() -> Self { Self { nib: 0, has_nib: false } } - fn get_nib(&mut self, br: &mut ByteReader) -> DecoderResult { + fn get_nib(&mut self, br: &mut dyn ByteIO) -> DecoderResult { if self.has_nib { self.has_nib = false; Ok(self.nib) @@ -44,7 +44,7 @@ impl NibbleReader { Ok(b & 0xF) } } - fn get_length(&mut self, br: &mut ByteReader, mut len: usize, mut shift: u8) -> DecoderResult { + fn get_length(&mut self, br: &mut dyn ByteIO, mut len: usize, mut shift: u8) -> DecoderResult { loop { let nib = self.get_nib(br)? as usize; len |= nib << shift; @@ -111,7 +111,7 @@ impl BMV3VideoDecoder { } } #[allow(clippy::identity_op)] - fn decode_frame(&mut self, br: &mut ByteReader) -> DecoderResult<()> { + fn decode_frame(&mut self, br: &mut dyn ByteIO) -> DecoderResult<()> { let mut idx = 0; loop { let op = br.read_byte()?; @@ -258,7 +258,7 @@ impl BMV3VideoDecoder { self.mode = BMV3Mode::Copy; Ok(()) } - fn pixfunc(&mut self, br: &mut ByteReader, len: usize) -> DecoderResult<()> { + fn pixfunc(&mut self, br: &mut dyn ByteIO, len: usize) -> DecoderResult<()> { validate!(len <= self.end - self.pos); for _ in 0..len { let op = BMV_PIXFUNCS_MAP[br.read_byte()? as usize]; @@ -290,7 +290,7 @@ impl BMV3VideoDecoder { Ok(()) } - fn decode_normal(&mut self, br: &mut ByteReader, op: u8) -> DecoderResult<()> { + fn decode_normal(&mut self, br: &mut dyn ByteIO, op: u8) -> DecoderResult<()> { if op < 0x40 { let mode = op & 1; let len = ((op >> 1) & 0x7) as usize; @@ -349,7 +349,7 @@ impl BMV3VideoDecoder { } Ok(()) } - fn decode_copy(&mut self, br: &mut ByteReader, op: u8) -> DecoderResult<()> { + fn decode_copy(&mut self, br: &mut dyn ByteIO, op: u8) -> DecoderResult<()> { if op < 0x40 { let len = ((op >> 1) & 0x7) as usize; if len < 2 { @@ -386,7 +386,7 @@ impl BMV3VideoDecoder { } Ok(()) } - fn decode_mode4(&mut self, br: &mut ByteReader, op: u8) -> DecoderResult<()> { + fn decode_mode4(&mut self, br: &mut dyn ByteIO, op: u8) -> DecoderResult<()> { if (op & 0xF) < 4 { let mut len = ((op & 3) * 2) as usize; if (op & 0xF0) >= 0x20 { @@ -404,7 +404,7 @@ impl BMV3VideoDecoder { } Ok(()) } - fn decode_mode5c(&mut self, br: &mut ByteReader, op: u8) -> DecoderResult<()> { + fn decode_mode5c(&mut self, br: &mut dyn ByteIO, op: u8) -> DecoderResult<()> { if (op & 0xF) < 4 { let mut len = ((op & 3) * 2) as usize; if (op & 0xF0) >= 0x20 { @@ -457,8 +457,7 @@ impl NADecoder for BMV3VideoDecoder { let src = pkt.get_buffer(); validate!(src.len() > 1); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let flags = br.read_byte()?; if (flags & BMV_COMMAND) != 0 { diff --git a/nihav-game/src/codecs/gremlinvideo.rs b/nihav-game/src/codecs/gremlinvideo.rs index ad63796..6db1913 100644 --- a/nihav-game/src/codecs/gremlinvideo.rs +++ b/nihav-game/src/codecs/gremlinvideo.rs @@ -28,7 +28,7 @@ const PREAMBLE_SIZE: usize = 4096; impl Bits8 { fn new() -> Self { Bits8 { queue: 0, fill: 0 } } - fn read_2bits(&mut self, br: &mut ByteReader) -> ByteIOResult { + fn read_2bits(&mut self, br: &mut dyn ByteIO) -> ByteIOResult { if self.fill == 0 { self.queue = br.read_byte()?; self.fill += 8; @@ -42,12 +42,12 @@ impl Bits8 { impl Bits32 { fn new() -> Self { Bits32 { queue: 0, fill: 0 } } - fn fill(&mut self, br: &mut ByteReader) -> ByteIOResult<()> { + fn fill(&mut self, br: &mut dyn ByteIO) -> ByteIOResult<()> { self.queue = br.read_u32le()?; self.fill = 32; Ok(()) } - fn read_bits(&mut self, br: &mut ByteReader, nbits: u8) -> ByteIOResult { + fn read_bits(&mut self, br: &mut dyn ByteIO, nbits: u8) -> ByteIOResult { let res = self.queue & ((1 << nbits) - 1); self.queue >>= nbits; self.fill -= nbits; @@ -271,7 +271,7 @@ impl GremlinVideoDecoder { } } - fn decode_method2(&mut self, br: &mut ByteReader) -> DecoderResult<()> { + fn decode_method2(&mut self, br: &mut dyn ByteIO) -> DecoderResult<()> { let mut bits = Bits8::new(); let mut size = self.info.get_properties().get_video_info().unwrap().get_width() * @@ -309,7 +309,7 @@ impl GremlinVideoDecoder { Ok(()) } - fn decode_method2_16bit(&mut self, br: &mut ByteReader) -> DecoderResult<()> { + fn decode_method2_16bit(&mut self, br: &mut dyn ByteIO) -> DecoderResult<()> { let mut bits = Bits8::new(); if self.frame16[8] != 64 { @@ -351,7 +351,7 @@ impl GremlinVideoDecoder { Ok(()) } - fn decode_method5(&mut self, br: &mut ByteReader, skip: usize) -> DecoderResult<()> { + fn decode_method5(&mut self, br: &mut dyn ByteIO, skip: usize) -> DecoderResult<()> { let mut bits = Bits8::new(); let mut size = self.info.get_properties().get_video_info().unwrap().get_width() * @@ -396,7 +396,7 @@ impl GremlinVideoDecoder { } #[allow(clippy::identity_op)] - fn decode_method68(&mut self, br: &mut ByteReader, + fn decode_method68(&mut self, br: &mut dyn ByteIO, skip: usize, use8: bool) -> DecoderResult<()> { let mut bits = Bits32::new(); @@ -564,8 +564,7 @@ impl NADecoder for GremlinVideoDecoder { } 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); let flags = br.read_u32le()?; let w = self.info.get_properties().get_video_info().unwrap().get_width(); let h = self.info.get_properties().get_video_info().unwrap().get_height(); diff --git a/nihav-game/src/codecs/kmvc.rs b/nihav-game/src/codecs/kmvc.rs index 88cb7f4..f1a3ab1 100644 --- a/nihav-game/src/codecs/kmvc.rs +++ b/nihav-game/src/codecs/kmvc.rs @@ -288,8 +288,7 @@ impl NADecoder for KMVCDecoder { } } - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let header = br.read_byte()?; let method = header & 0xF; diff --git a/nihav-game/src/codecs/midivid.rs b/nihav-game/src/codecs/midivid.rs index 1e3b858..3ce4f62 100644 --- a/nihav-game/src/codecs/midivid.rs +++ b/nihav-game/src/codecs/midivid.rs @@ -75,10 +75,8 @@ fn decode_frame(frm: &mut NASimpleVideoFrame, src: &[u8], width: usize, heig validate!(src.len() > idx_start); let src1 = if num_vec > 256 { &src[idx_start + (nblocks + 7)/8..] } else { &src[idx_start..] }; - let mut mr = MemoryReader::new_read(src1); - let mut idx_br = ByteReader::new(&mut mr); - let mut mr = MemoryReader::new_read(&src[idx_start..]); - let mut idx9_br = ByteReader::new(&mut mr); + let mut idx_br = MemoryReader::new_read(src1); + let mut idx9_br = MemoryReader::new_read(&src[idx_start..]); let mut hi9 = 0u8; let mut bits = 0u8; for y in (0..height).step_by(2) { diff --git a/nihav-game/src/codecs/seq.rs b/nihav-game/src/codecs/seq.rs index 5968423..d0c03dd 100644 --- a/nihav-game/src/codecs/seq.rs +++ b/nihav-game/src/codecs/seq.rs @@ -54,8 +54,7 @@ impl NADecoder for SequenceDecoder { let src = pkt.get_buffer(); validate!(src.len() > FRAME_HEADER); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let width = br.read_u16le()? as usize; let height = br.read_u16le()? as usize; @@ -83,10 +82,8 @@ impl NADecoder for SequenceDecoder { }, 1 | 11 => { validate!(!opcodes.is_empty()); - let mut mr = MemoryReader::new_read(opcodes); - let mut ops = ByteReader::new(&mut mr); - let mut mr = MemoryReader::new_read(clr_data); - let mut clr = ByteReader::new(&mut mr); + let mut ops = MemoryReader::new_read(opcodes); + let mut clr = MemoryReader::new_read(clr_data); let mut x = xoff; let mut y = yoff; diff --git a/nihav-game/src/codecs/sga.rs b/nihav-game/src/codecs/sga.rs index f8cff3e..4339fd6 100644 --- a/nihav-game/src/codecs/sga.rs +++ b/nihav-game/src/codecs/sga.rs @@ -31,7 +31,7 @@ impl DPVideoDecoder { height: 0, } } - fn decode_81(&mut self, br: &mut ByteReader) -> DecoderResult<()> { + fn decode_81(&mut self, br: &mut dyn ByteIO) -> DecoderResult<()> { let mut pat = [0; 8]; let mut cur_clr = [0; 16]; let mut off = 0; @@ -171,10 +171,8 @@ impl DPVideoDecoder { Ok(()) } fn decode_85(&mut self, clr_src: &[u8], op_src: &[u8]) -> DecoderResult<()> { - let mut mr = MemoryReader::new_read(clr_src); - let mut clrs = ByteReader::new(&mut mr); - let mut mr = MemoryReader::new_read(op_src); - let mut ops = ByteReader::new(&mut mr); + let mut clrs = MemoryReader::new_read(clr_src); + let mut ops = MemoryReader::new_read(op_src); let mut pat = [0; 8]; let mut cur_clr = [0; 16]; @@ -444,8 +442,7 @@ impl NADecoder for DPVideoDecoder { match self.subtype { 0x81 | 0x8A => { validate!(src.len() > 12); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let stype = br.read_byte()?; validate!(stype == 0x81 || stype == 0x8A); br.read_byte()?; @@ -469,8 +466,7 @@ impl NADecoder for DPVideoDecoder { }, 0x85 | 0x86 | 0x89 => { validate!(src.len() > 6); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let pal_offset = usize::from(br.read_u16be()?); let pal_size = usize::from(br.read_u16be()?); diff --git a/nihav-game/src/codecs/smush/iact.rs b/nihav-game/src/codecs/smush/iact.rs index 7dccff4..ae2886a 100644 --- a/nihav-game/src/codecs/smush/iact.rs +++ b/nihav-game/src/codecs/smush/iact.rs @@ -51,8 +51,7 @@ impl NADecoder for IACTDecoder { } let _left = read_u32le(&src[14..])?; let offset = if self.tot_size == 0 { - let mut mr = MemoryReader::new_read(&src[18..]); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src[18..]); let tag = br.read_tag()?; if &tag == b"iMUS" { self.tot_size = br.read_u32be()?; @@ -82,8 +81,7 @@ impl NADecoder for IACTDecoder { } let nsamples = (match self.bits { _ if self.old => { - let mut mr = MemoryReader::new_read(&self.queued); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&self.queued); let mut nblocks = 0; while br.left() > 0 { let len = br.read_u16be()? as usize; @@ -106,8 +104,7 @@ impl NADecoder for IACTDecoder { let adata = adata.get_data_mut().unwrap(); match self.bits { _ if self.old => { - let mut mr = MemoryReader::new_read(&self.queued); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&self.queued); for dst in adata.chunks_exact_mut(1024 * 2) { let len = br.read_u16be()? as usize; let end = br.tell() + (len as u64); diff --git a/nihav-game/src/codecs/smush/v1.rs b/nihav-game/src/codecs/smush/v1.rs index dbee752..46778e3 100644 --- a/nihav-game/src/codecs/smush/v1.rs +++ b/nihav-game/src/codecs/smush/v1.rs @@ -130,7 +130,7 @@ impl Glyphs { } } } - fn read_additional(&mut self, br: &mut ByteReader, add: u16) -> DecoderResult<()> { + fn read_additional(&mut self, br: &mut dyn ByteIO, add: u16) -> DecoderResult<()> { if add > 0 { validate!(add <= 256); let mut gbuf = [0; 8]; @@ -284,7 +284,7 @@ fn do_mc(dst: &mut [u8], src: &[u8], stride: usize, xoff: isize, yoff: isize, w: } #[allow(clippy::too_many_arguments)] -fn do_block47(br: &mut ByteReader, dst: &mut [u8], frm1: &[u8], frm2: &[u8], x: usize, y: usize, stride: usize, bsize: usize, clr: &[u8; 6], glyphs: &Glyphs) -> DecoderResult<()> { +fn do_block47(br: &mut dyn ByteIO, dst: &mut [u8], frm1: &[u8], frm2: &[u8], x: usize, y: usize, stride: usize, bsize: usize, clr: &[u8; 6], glyphs: &Glyphs) -> DecoderResult<()> { let op = br.read_byte()?; match op { 0xFF if bsize > 2 => { @@ -413,7 +413,7 @@ impl Smush1Decoder { } } - fn decode_rle(br: &mut ByteReader, dst: &mut [u8], w: usize, h: usize, stride: usize) -> DecoderResult<()> { + fn decode_rle(br: &mut dyn ByteIO, dst: &mut [u8], w: usize, h: usize, stride: usize) -> DecoderResult<()> { let mut x = 0; let mut y = 0; let mut len = 0; @@ -445,7 +445,7 @@ impl Smush1Decoder { Ok(()) } - fn decode_1(&mut self, br: &mut ByteReader, x: i16, y: i16, w: usize, h: usize, transparent: bool) -> DecoderResult<()> { + fn decode_1(&mut self, br: &mut dyn ByteIO, x: i16, y: i16, w: usize, h: usize, transparent: bool) -> DecoderResult<()> { for yy in 0..h { let len = u64::from(br.read_u16le()?); let end = br.tell() + len; @@ -478,7 +478,7 @@ impl Smush1Decoder { Ok(()) } - fn decode_2(&mut self, br: &mut ByteReader, x: i16, y: i16, _w: usize, _h: usize, len: usize) -> DecoderResult<()> { + fn decode_2(&mut self, br: &mut dyn ByteIO, x: i16, y: i16, _w: usize, _h: usize, len: usize) -> DecoderResult<()> { validate!((len & 3) == 0); let mut xpos = x; @@ -495,7 +495,7 @@ impl Smush1Decoder { Ok(()) } #[allow(clippy::too_many_arguments)] - fn decode_4(&mut self, br: &mut ByteReader, x: i16, y: i16, w: usize, h: usize, mode: u8, add: u16) -> DecoderResult<()> { + fn decode_4(&mut self, br: &mut dyn ByteIO, x: i16, y: i16, w: usize, h: usize, mode: u8, add: u16) -> DecoderResult<()> { self.glyphs.make_glyphs_4(mode); self.glyphs.read_additional(br, add)?; @@ -535,7 +535,7 @@ impl Smush1Decoder { Ok(()) } #[allow(clippy::too_many_arguments)] - fn decode_5(&mut self, br: &mut ByteReader, x: i16, y: i16, w: usize, h: usize, mode: u8, add: u16) -> DecoderResult<()> { + fn decode_5(&mut self, br: &mut dyn ByteIO, x: i16, y: i16, w: usize, h: usize, mode: u8, add: u16) -> DecoderResult<()> { self.glyphs.make_glyphs_5(mode); self.glyphs.read_additional(br, add)?; @@ -571,7 +571,7 @@ impl Smush1Decoder { Ok(()) } - fn decode_21(&mut self, br: &mut ByteReader, x: i16, y: i16, w: usize, h: usize, size: usize) -> DecoderResult<()> { + fn decode_21(&mut self, br: &mut dyn ByteIO, x: i16, y: i16, w: usize, h: usize, size: usize) -> DecoderResult<()> { let end = br.tell() + (size as u64); for yy in 0..h { if br.tell() >= end { break; } @@ -601,7 +601,7 @@ impl Smush1Decoder { Ok(()) } #[allow(clippy::too_many_arguments)] - fn decode_23(&mut self, br: &mut ByteReader, x: i16, y: i16, w: usize, h: usize, bias: u8, add: u16, old: bool) -> DecoderResult<()> { + fn decode_23(&mut self, br: &mut dyn ByteIO, x: i16, y: i16, w: usize, h: usize, bias: u8, add: u16, old: bool) -> DecoderResult<()> { let mut lut = [0; 256]; if old { for (i, el) in lut.iter_mut().enumerate() { @@ -637,7 +637,7 @@ impl Smush1Decoder { Ok(()) } - fn decode_37(&mut self, br: &mut ByteReader, x: i16, y: i16, mut w: usize, mut h: usize) -> DecoderResult<()> { + fn decode_37(&mut self, br: &mut dyn ByteIO, x: i16, y: i16, mut w: usize, mut h: usize) -> DecoderResult<()> { let compr = br.read_byte()?; let mv_off = br.read_byte()? as usize; validate!(mv_off <= 2); @@ -788,7 +788,7 @@ impl Smush1Decoder { Ok(()) } - fn decode_47(&mut self, br: &mut ByteReader, x: i16, y: i16, w: usize, h: usize) -> DecoderResult<()> { + fn decode_47(&mut self, br: &mut dyn ByteIO, x: i16, y: i16, w: usize, h: usize) -> DecoderResult<()> { let seq = br.read_u16le()?; let compr = br.read_byte()?; let reorder = br.read_byte()?; @@ -871,7 +871,7 @@ impl Smush1Decoder { Ok(()) } - fn decode_48(&mut self, br: &mut ByteReader, x: i16, y: i16, mut w: usize, mut h: usize) -> DecoderResult<()> { + fn decode_48(&mut self, br: &mut dyn ByteIO, x: i16, y: i16, mut w: usize, mut h: usize) -> DecoderResult<()> { let compr = br.read_byte()?; let mvsel = br.read_byte()? as usize; validate!(mvsel < 2); @@ -1019,8 +1019,7 @@ impl NADecoder for Smush1Decoder { 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 mut store = false; while br.left() > 0 { @@ -1092,22 +1091,19 @@ impl NADecoder for Smush1Decoder { 37 => { let start = br.tell() as usize; let end = start + size - 14; - let mut mr = MemoryReader::new_read(&src[start..end]); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src[start..end]); self.decode_37(&mut br, x, y, w, h)?; }, 47 => { let start = br.tell() as usize; let end = start + size - 14; - let mut mr = MemoryReader::new_read(&src[start..end]); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src[start..end]); self.decode_47(&mut br, x, y, w, h)?; }, 48 => { let start = br.tell() as usize; let end = start + size - 14; - let mut mr = MemoryReader::new_read(&src[start..end]); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src[start..end]); self.decode_48(&mut br, x, y, w, h)?; }, _ => return Err(DecoderError::NotImplemented), diff --git a/nihav-game/src/codecs/smush/v2.rs b/nihav-game/src/codecs/smush/v2.rs index ddf8f77..76db1e9 100644 --- a/nihav-game/src/codecs/smush/v2.rs +++ b/nihav-game/src/codecs/smush/v2.rs @@ -57,7 +57,7 @@ impl FrameData { } } -fn decode_rle(br: &mut ByteReader, dst: &mut [u8]) -> DecoderResult<()> { +fn decode_rle(br: &mut dyn ByteIO, dst: &mut [u8]) -> DecoderResult<()> { let mut len = 0; let mut clr = 0; let mut run = false; @@ -117,7 +117,7 @@ fn draw_glyph(dst: &mut [u16], stride: usize, bsize: usize, glyph: &[u8], clr2: } } -fn do_block2(br: &mut ByteReader, dst: &mut [u16], x: usize, y: usize, bsize: usize, bdata: &BlockData) -> DecoderResult<()> { +fn do_block2(br: &mut dyn ByteIO, dst: &mut [u16], x: usize, y: usize, bsize: usize, bdata: &BlockData) -> DecoderResult<()> { let stride = bdata.stride; let op = br.read_byte()?; match op { @@ -228,8 +228,7 @@ impl NADecoder for Smush2Decoder { 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 mut reorder = 0; while br.left() > 0 { @@ -270,8 +269,7 @@ impl NADecoder for Smush2Decoder { validate!(br.tell() < tend); let start = br.tell() as usize; br.seek(SeekFrom::Start(tend))?; - let mut mr = MemoryReader::new_read(&src[start..(tend as usize)]); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src[start..(tend as usize)]); if seq == 0 { for el in self.pic.frm1.iter_mut() { diff --git a/nihav-game/src/codecs/vmd.rs b/nihav-game/src/codecs/vmd.rs index 06cc63b..02c76dd 100644 --- a/nihav-game/src/codecs/vmd.rs +++ b/nihav-game/src/codecs/vmd.rs @@ -23,7 +23,7 @@ macro_rules! lz_op { $off = ($off + 1) & 0xFFF; }; } -fn lz_unpack(br: &mut ByteReader, dst: &mut [u8]) -> DecoderResult<()> { +fn lz_unpack(br: &mut dyn ByteIO, dst: &mut [u8]) -> DecoderResult<()> { let mut window: [u8; 0x1000] = [0x20; 0x1000]; let dst_size = br.read_u32le()? as usize; @@ -70,7 +70,7 @@ fn lz_unpack(br: &mut ByteReader, dst: &mut [u8]) -> DecoderResult<()> { Ok(()) } -fn rle_unpack(br: &mut ByteReader, len: usize, dst: &mut [u8]) -> DecoderResult<()> { +fn rle_unpack(br: &mut dyn ByteIO, len: usize, dst: &mut [u8]) -> DecoderResult<()> { let end = br.tell() + (len as u64); let mut dpos = 0; if (len & 1) != 0 { @@ -97,7 +97,7 @@ fn rle_unpack(br: &mut ByteReader, len: usize, dst: &mut [u8]) -> DecoderResult< Ok(()) } -fn decode_frame_data(br: &mut ByteReader, dst: &mut [u8], mut dpos: usize, stride: usize, w: usize, h: usize, method: u8) -> DecoderResult { +fn decode_frame_data(br: &mut dyn ByteIO, dst: &mut [u8], mut dpos: usize, stride: usize, w: usize, h: usize, method: u8) -> DecoderResult { match method { 1 => { for _ in 0..h { @@ -182,7 +182,7 @@ impl VMDVideoDecoder { ver2: 0, } } - fn decode_frame(&mut self, br: &mut ByteReader) -> DecoderResult { + fn decode_frame(&mut self, br: &mut dyn ByteIO) -> DecoderResult { let frame_x = br.read_u16le()? as usize; let frame_y = br.read_u16le()? as usize; let frame_r = br.read_u16le()? as usize; @@ -223,8 +223,7 @@ impl VMDVideoDecoder { let is_intra = if (method & 0x80) != 0 { validate!(!self.buf.is_empty()); lz_unpack(br, &mut self.buf)?; - let mut mr = MemoryReader::new_read(&self.buf); - let mut buf_br = ByteReader::new(&mut mr); + let mut buf_br = MemoryReader::new_read(&self.buf); decode_frame_data(&mut buf_br, &mut self.framebuf, dpos, stride, w, h, method & 0x7F)? } else { decode_frame_data(br, &mut self.framebuf, dpos, stride, w, h, method & 0x7F)? @@ -294,8 +293,7 @@ impl NADecoder for VMDVideoDecoder { let src = pkt.get_buffer(); validate!(src.len() >= 10); - let mut mr = MemoryReader::new_read(&src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&src); let is_intra = self.decode_frame(&mut br)?; @@ -400,7 +398,7 @@ impl VMDAudioDecoder { ch: 0, } } - fn decode_16bit(&self, dst: &mut [i16], off1: usize, br: &mut ByteReader, nblocks: usize, mut mask: u32) -> DecoderResult<()> { + fn decode_16bit(&self, dst: &mut [i16], off1: usize, br: &mut dyn ByteIO, nblocks: usize, mut mask: u32) -> DecoderResult<()> { let channels = self.chmap.num_channels(); let mut off = [0, off1]; for _ in 0..nblocks { @@ -493,8 +491,7 @@ impl NADecoder for VMDAudioDecoder { if let NACodecTypeInfo::Audio(_) = info.get_properties() { let pktbuf = pkt.get_buffer(); validate!(pktbuf.len() >= 6); - let mut mr = MemoryReader::new_read(&pktbuf); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&pktbuf); let blk_type = br.read_byte()?; br.read_skip(9)?; let mask; diff --git a/nihav-game/src/demuxers/bmv.rs b/nihav-game/src/demuxers/bmv.rs index d276897..913b8e8 100644 --- a/nihav-game/src/demuxers/bmv.rs +++ b/nihav-game/src/demuxers/bmv.rs @@ -2,7 +2,7 @@ use nihav_core::frame::*; use nihav_core::demuxers::*; struct BMVDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, vid_id: usize, aud_id: usize, vpos: u64, @@ -78,7 +78,7 @@ impl<'a> NAOptionHandler for BMVDemuxer<'a> { } impl<'a> BMVDemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { Self { src: io, vid_id: 0, @@ -93,14 +93,14 @@ impl<'a> BMVDemuxer<'a> { pub struct BMVDemuxerCreator { } impl DemuxerCreator for BMVDemuxerCreator { - 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(BMVDemuxer::new(br)) } fn get_name(&self) -> &'static str { "bmv" } } struct BMV3Demuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, vid_id: usize, aud_id: usize, vpos: u64, @@ -223,7 +223,7 @@ impl<'a> NAOptionHandler for BMV3Demuxer<'a> { } impl<'a> BMV3Demuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { Self { src: io, vid_id: 0, @@ -240,7 +240,7 @@ impl<'a> BMV3Demuxer<'a> { pub struct BMV3DemuxerCreator { } impl DemuxerCreator for BMV3DemuxerCreator { - 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(BMV3Demuxer::new(br)) } fn get_name(&self) -> &'static str { "bmv3" } @@ -255,8 +255,7 @@ mod test { #[test] fn test_bmv_demux() { let mut file = File::open("assets/Game/DW2-MOUSE.BMV").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 = BMVDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); @@ -274,8 +273,7 @@ mod test { #[test] fn test_bmv3_demux() { let mut file = File::open("assets/Game/DW3-Loffnote.bmv").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 = BMV3Demuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); diff --git a/nihav-game/src/demuxers/gdv.rs b/nihav-game/src/demuxers/gdv.rs index fc25600..9d9efc4 100644 --- a/nihav-game/src/demuxers/gdv.rs +++ b/nihav-game/src/demuxers/gdv.rs @@ -8,7 +8,7 @@ enum GDVState { } struct GremlinVideoDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, frames: u16, cur_frame: u16, asize: usize, @@ -117,7 +117,7 @@ impl<'a> NAOptionHandler for GremlinVideoDemuxer<'a> { fn query_option_value(&self, _name: &str) -> Option { None } } impl<'a> GremlinVideoDemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { GremlinVideoDemuxer { cur_frame: 0, frames: 0, @@ -155,7 +155,7 @@ impl<'a> GremlinVideoDemuxer<'a> { pub struct GDVDemuxerCreator { } impl DemuxerCreator for GDVDemuxerCreator { - 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(GremlinVideoDemuxer::new(br)) } fn get_name(&self) -> &'static str { "gdv" } @@ -170,8 +170,7 @@ mod test { fn test_gdv_demux() { // sample from Normality game let mut file = File::open("assets/Game/intro1.gdv").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 = GremlinVideoDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); diff --git a/nihav-game/src/demuxers/seq.rs b/nihav-game/src/demuxers/seq.rs index cbd1bdc..eeb9c78 100644 --- a/nihav-game/src/demuxers/seq.rs +++ b/nihav-game/src/demuxers/seq.rs @@ -2,7 +2,7 @@ use nihav_core::frame::*; use nihav_core::demuxers::*; struct SequenceDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, nframes: usize, frame_no: usize, } @@ -64,7 +64,7 @@ impl<'a> NAOptionHandler for SequenceDemuxer<'a> { fn query_option_value(&self, _name: &str) -> Option { None } } impl<'a> SequenceDemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { SequenceDemuxer { src: io, frame_no: 0, @@ -76,7 +76,7 @@ impl<'a> SequenceDemuxer<'a> { pub struct SequenceDemuxerCreator { } impl DemuxerCreator for SequenceDemuxerCreator { - 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(SequenceDemuxer::new(br)) } fn get_name(&self) -> &'static str { "sierra-seq" } @@ -91,8 +91,7 @@ mod test { #[test] fn test_seq() { let mut file = File::open("assets/Game/sierra/FS1.SEQ").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 = SequenceDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); diff --git a/nihav-game/src/demuxers/sga.rs b/nihav-game/src/demuxers/sga.rs index de37b72..6c82708 100644 --- a/nihav-game/src/demuxers/sga.rs +++ b/nihav-game/src/demuxers/sga.rs @@ -9,7 +9,7 @@ const RGB555_FORMAT: NAPixelFormaton = NAPixelFormaton { model: ColorModel::RGB( None, None], elem_size: 2, be: false, alpha: false, palette: false }; struct SGADemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, subtype: u8, apts: u64, abuf: Vec, @@ -20,7 +20,7 @@ struct SGADemuxer<'a> { } impl<'a> SGADemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { Self { src: io, subtype: 0, @@ -53,7 +53,7 @@ fn parse_smpte_time(src: &[u8], ntsc: bool) -> DemuxerResult { Ok(tot_sec * if ntsc { 60 } else { 30 } + u64::from(frame)) } -fn get_smpte_time(src: &mut ByteReader, ntsc: bool) -> DemuxerResult { +fn get_smpte_time(src: &mut dyn ByteIO, ntsc: bool) -> DemuxerResult { let mut buf = [0; 4]; src.read_buf(&mut buf)?; parse_smpte_time(&buf, ntsc) @@ -359,7 +359,7 @@ impl<'a> NAOptionHandler for SGADemuxer<'a> { pub struct SGADemuxerCreator { } impl DemuxerCreator for SGADemuxerCreator { - 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(SGADemuxer::new(br)) } fn get_name(&self) -> &'static str { "sga" } @@ -372,8 +372,7 @@ mod test { fn test_sga_demux(name: &str) { let mut file = File::open(name).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 = SGADemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); diff --git a/nihav-game/src/demuxers/smush.rs b/nihav-game/src/demuxers/smush.rs index 3cc5fbc..92eb19a 100644 --- a/nihav-game/src/demuxers/smush.rs +++ b/nihav-game/src/demuxers/smush.rs @@ -2,7 +2,7 @@ use nihav_core::frame::*; use nihav_core::demuxers::*; struct SmushDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, old: bool, size: u64, @@ -15,7 +15,7 @@ struct SmushDemuxer<'a> { asize: u64, } -fn parse_iact(br: &mut ByteReader, end: u64, arate: &mut u32, abits: &mut u8, chans: &mut u8, mcmp: bool) -> DemuxerResult<()> { +fn parse_iact(br: &mut dyn ByteIO, end: u64, arate: &mut u32, abits: &mut u8, chans: &mut u8, mcmp: bool) -> DemuxerResult<()> { if !mcmp { br.read_skip(14)?; } @@ -65,7 +65,7 @@ fn parse_iact(br: &mut ByteReader, end: u64, arate: &mut u32, abits: &mut u8, ch } impl<'a> SmushDemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { SmushDemuxer { src: io, @@ -149,7 +149,7 @@ impl<'a> SmushDemuxer<'a> { let opcode = src.read_u16le()?; let flags = src.read_u16le()?; if (opcode == 8) && (flags == 0x2E) { - if parse_iact(src, end, &mut arate, &mut abits, &mut chans, false).is_ok() { + if parse_iact(*src, end, &mut arate, &mut abits, &mut chans, false).is_ok() { aname = "smush-iact"; } validate!(src.tell() <= end); @@ -489,7 +489,7 @@ impl<'a> NAOptionHandler for SmushDemuxer<'a> { pub struct SmushDemuxerCreator { } impl DemuxerCreator for SmushDemuxerCreator { - 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(SmushDemuxer::new(br)) } fn get_name(&self) -> &'static str { "smush" } @@ -497,7 +497,7 @@ impl DemuxerCreator for SmushDemuxerCreator { struct MCMPDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, cur_frame: usize, offsets: Vec, @@ -507,7 +507,7 @@ struct MCMPDemuxer<'a> { } impl<'a> MCMPDemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { MCMPDemuxer { src: io, cur_frame: 0, @@ -571,7 +571,7 @@ impl<'a> DemuxCore<'a> for MCMPDemuxer<'a> { arate = self.src.read_u32le()?; validate!(arate > 0); } else { - parse_iact(self.src, data_start, &mut arate, &mut abits, &mut chans, true)?; + parse_iact(&mut *self.src, data_start, &mut arate, &mut abits, &mut chans, true)?; } if chans == 2 { for (samp, pts) in self.samples.iter_mut().zip(self.pts.iter_mut()) { @@ -637,7 +637,7 @@ impl<'a> NAOptionHandler for MCMPDemuxer<'a> { pub struct MCMPDemuxerCreator { } impl DemuxerCreator for MCMPDemuxerCreator { - 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(MCMPDemuxer::new(br)) } fn get_name(&self) -> &'static str { "smush-mcmp" } @@ -653,8 +653,7 @@ mod test { fn test_smush_demux_anim_v1() { // sample from Rebel Assault game let mut file = File::open("assets/Game/smush/c1block.anm").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 = SmushDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); @@ -673,8 +672,7 @@ mod test { fn test_smush_demux_anim_v2() { // sample from The Dig let mut file = File::open("assets/Game/smush/PIGOUT.SAN").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 = SmushDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); @@ -693,8 +691,7 @@ mod test { fn test_smush_demux_sanm() { // sample from Grim Fandango let mut file = File::open("assets/Game/smush/lol.snm").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 = SmushDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); @@ -713,8 +710,7 @@ mod test { fn test_mcmp_demux_imus() { // sample from Grim Fandango let mut file = File::open("assets/Game/smush/1104 - Lupe.IMC").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 = MCMPDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); @@ -733,8 +729,7 @@ mod test { fn test_mcmp_demux_wav() { // sample from Grim Fandango let mut file = File::open("assets/Game/smush/breadpor.WAV").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 = MCMPDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); diff --git a/nihav-game/src/demuxers/vmd.rs b/nihav-game/src/demuxers/vmd.rs index 4e85dea..fd48a66 100644 --- a/nihav-game/src/demuxers/vmd.rs +++ b/nihav-game/src/demuxers/vmd.rs @@ -21,7 +21,7 @@ struct FrameRec { } struct VMDDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, vid_id: usize, aud_id: usize, fno: usize, @@ -192,7 +192,7 @@ impl<'a> NAOptionHandler for VMDDemuxer<'a> { } impl<'a> VMDDemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { Self { src: io, vid_id: 0, @@ -208,7 +208,7 @@ impl<'a> VMDDemuxer<'a> { pub struct VMDDemuxerCreator { } impl DemuxerCreator for VMDDemuxerCreator { - 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(VMDDemuxer::new(br)) } fn get_name(&self) -> &'static str { "vmd" } @@ -224,8 +224,7 @@ mod test { // sample: https://samples.mplayerhq.hu/game-formats/sierra-vmd/Lighthouse/128.vmd let mut file = File::open("assets/Game/sierra/128.vmd").unwrap(); //let mut file = File::open("assets/Game/1491.VMD").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 = VMDDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); diff --git a/nihav-game/src/muxers/ea.rs b/nihav-game/src/muxers/ea.rs index 3aa4212..141af73 100644 --- a/nihav-game/src/muxers/ea.rs +++ b/nihav-game/src/muxers/ea.rs @@ -1,14 +1,14 @@ use nihav_core::muxers::*; struct EAMuxer<'a> { - bw: &'a mut ByteWriter<'a>, + bw: &'a mut dyn ByteIO, has_alpha: bool, nframes: u32, max_size: [u32; 2], } impl<'a> EAMuxer<'a> { - fn new(bw: &'a mut ByteWriter<'a>) -> Self { + fn new(bw: &'a mut dyn ByteIO) -> Self { Self { bw, has_alpha: false, @@ -118,7 +118,7 @@ impl<'a> NAOptionHandler for EAMuxer<'a> { pub struct EAMuxerCreator {} impl MuxerCreator for EAMuxerCreator { - fn new_muxer<'a>(&self, bw: &'a mut ByteWriter<'a>) -> Box + 'a> { + fn new_muxer<'a>(&self, bw: &'a mut dyn ByteIO) -> Box + 'a> { Box::new(EAMuxer::new(bw)) } fn get_name(&self) -> &'static str { "ea" } -- 2.39.5