]> git.nihav.org Git - nihav.git/commitdiff
nihav_misc: switch to ByteIO
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 17 Aug 2025 17:30:06 +0000 (19:30 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 18 Aug 2025 17:02:41 +0000 (19:02 +0200)
nihav-misc/src/codecs/mwv1.rs
nihav-misc/src/codecs/pgvv.rs
nihav-misc/src/codecs/pivc.rs
nihav-misc/src/codecs/qpeg.rs
nihav-misc/src/codecs/tealvid.rs
nihav-misc/src/demuxers/mvi.rs
nihav-misc/src/demuxers/qpeg.rs
nihav-misc/src/demuxers/tealmov.rs

index fd9b8b44f7fff6b492b682850e291f82ba77968c..532b892d113595588d4e9ab607dad672da7f4e29 100644 (file)
@@ -1,4 +1,4 @@
-use nihav_core::io::byteio::{ByteReader,MemoryReader};
+use nihav_core::io::byteio::{ByteIO,MemoryReader};
 use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use nihav_core::codecs::*;
@@ -254,8 +254,7 @@ impl NADecoder for MWV1Decoder {
         if let NACodecTypeInfo::Video(_vinfo) = info.get_properties() {
             if let Some(edata) = info.get_extradata() {
                 validate!(edata.len() >= 64);
-                let mut mr = MemoryReader::new_read(edata.as_slice());
-                let mut br = ByteReader::new(&mut mr);
+                let mut br = MemoryReader::new_read(edata.as_slice());
                 let len                 = br.read_u32be()? as usize;
                 validate!(edata.len() == len);
                 let _                   = br.read_u32be()?; //always 7?
index e9825402d0d12737882a282b437ec43640e2a973..21e15bd71da79cf954da3431a0742537b6470cf7 100644 (file)
@@ -1,7 +1,7 @@
 // Somewhat simplified JPEG decoder
 // TODO: move common JPEG decoding into codec-support
 
-use nihav_core::io::byteio::{ByteReader,MemoryReader};
+use nihav_core::io::byteio::{ByteIO,MemoryReader};
 use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use nihav_core::codecs::*;
@@ -363,8 +363,7 @@ impl NADecoder for RadiusStudioDecoder {
     fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
         let src = pkt.get_buffer();
         if src.len() < 2048 { return Err(DecoderError::ShortData); }
-        let mut mr = MemoryReader::new_read(&src);
-        let mut br = ByteReader::new(&mut mr);
+        let mut br = MemoryReader::new_read(&src);
         let _size_v0            = br.read_u32be()? as usize;
         let field2_size         = br.read_u32be()? as usize;
         if field2_size != 0 {
index a34241153064c2cbb2e0a05414162050b59495fd..dd45c11411af4b7889c7860bc644f47ec4b8e015 100644 (file)
@@ -124,7 +124,7 @@ impl PIFrame {
         self.stride = (w + tile_size - 1) / tile_size * tile_size;
         self.frame = vec![0; self.stride * ((h + tile_size - 1) / tile_size * tile_size)];
     }
-    fn decode_tile_intra(&mut self, xpos: usize, ypos: usize, tsize: usize, flags: &mut ByteReader, pixels: &mut ByteReader) -> DecoderResult<()> {
+    fn decode_tile_intra(&mut self, xpos: usize, ypos: usize, tsize: usize, flags: &mut dyn ByteIO, pixels: &mut dyn ByteIO) -> DecoderResult<()> {
         let mut flg = flags.read_u16le()?;
         for yoff in (0..tsize).step_by(tsize / 4) {
             for xoff in (0..tsize).step_by(tsize / 4) {
@@ -151,7 +151,7 @@ impl PIFrame {
         }
         Ok(())
     }
-    fn decode_intra(&mut self, flags: &mut ByteReader, pixels: &mut ByteReader) -> DecoderResult<()> {
+    fn decode_intra(&mut self, flags: &mut dyn ByteIO, pixels: &mut dyn ByteIO) -> DecoderResult<()> {
         for y in (0..self.height).step_by(self.tile_size) {
             for x in (0..self.width).step_by(self.tile_size) {
                 self.decode_tile_intra(x, y, self.tile_size, flags, pixels)?;
@@ -160,7 +160,7 @@ impl PIFrame {
         Ok(())
     }
 
-    fn decode_tile_inter(&mut self, xpos: usize, ypos: usize, tsize: usize, flags: &mut ByteReader, pixels: &mut ByteReader) -> DecoderResult<()> {
+    fn decode_tile_inter(&mut self, xpos: usize, ypos: usize, tsize: usize, flags: &mut dyn ByteIO, pixels: &mut dyn ByteIO) -> DecoderResult<()> {
         let mut flg = flags.read_u16le()?;
         for yoff in (0..tsize).step_by(tsize / 4) {
             for xoff in (0..tsize).step_by(tsize / 4) {
@@ -189,7 +189,7 @@ impl PIFrame {
         }
         Ok(())
     }
-    fn decode_inter(&mut self, flags: &mut ByteReader, pixels: &mut ByteReader) -> DecoderResult<()> {
+    fn decode_inter(&mut self, flags: &mut dyn ByteIO, pixels: &mut dyn ByteIO) -> DecoderResult<()> {
         for y in (0..self.height).step_by(self.tile_size) {
             for x in (0..self.width).step_by(self.tile_size) {
                 self.decode_tile_inter(x, y, self.tile_size, flags, pixels)?;
@@ -286,11 +286,8 @@ impl NADecoder for PIVideoDecoder {
                 &self.ubuf
             };
 
-        let mut mr = MemoryReader::new_read(tree_flags);
-        let mut flags = ByteReader::new(&mut mr);
-
-        let mut mr = MemoryReader::new_read(pixel_data);
-        let mut pixels = ByteReader::new(&mut mr);
+        let mut flags = MemoryReader::new_read(tree_flags);
+        let mut pixels = MemoryReader::new_read(pixel_data);
 
         let is_intra = (frame_flags & 1) == 0;
 
index e9702f16b4dfacf8ee02c52a83258241179df903..b0e05d743d67effcfcdc8aeecc07fb4bfafcd3c2 100644 (file)
@@ -1,4 +1,4 @@
-use nihav_core::io::byteio::{ByteReader,MemoryReader};
+use nihav_core::io::byteio::{ByteIO,MemoryReader};
 use nihav_core::codecs::*;
 
 struct DVCDecoder {
@@ -42,8 +42,7 @@ impl NADecoder for DVCDecoder {
     }
     fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
         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 mut pos = 0;
         let mut is_intra = true;
index 09ff3a319328c937b2d282ce76c417581b49fc48..e37ec8def72785136952ecfd0c9392f6b4dd4db4 100644 (file)
@@ -1,4 +1,4 @@
-use nihav_core::io::byteio::{ByteReader,MemoryReader};
+use nihav_core::io::byteio::{ByteIO,MemoryReader};
 use nihav_core::codecs::*;
 use nihav_codec_support::codecs::imaadpcm::*;
 
@@ -17,7 +17,7 @@ struct FrameContext {
 }
 
 impl FrameContext {
-    fn decode_block2(&mut self, br: &mut ByteReader, dst: &mut [u8], xpos: usize, ypos: usize) -> DecoderResult<()> {
+    fn decode_block2(&mut self, br: &mut dyn ByteIO, dst: &mut [u8], xpos: usize, ypos: usize) -> DecoderResult<()> {
         let op = if self.sub2op_run > 0 {
                 self.sub2op_run -= 1;
                 self.sub2op_val
@@ -76,7 +76,7 @@ impl FrameContext {
         }
         Ok(())
     }
-    fn decode_block4(&mut self, br: &mut ByteReader, dst: &mut [u8], xpos: usize, ypos: usize, split: bool) -> DecoderResult<()> {
+    fn decode_block4(&mut self, br: &mut dyn ByteIO, dst: &mut [u8], xpos: usize, ypos: usize, split: bool) -> DecoderResult<()> {
         let op = if split {
                 0xFF
             } else if self.subop_run > 0 {
@@ -149,7 +149,7 @@ impl FrameContext {
         }
         Ok(())
     }
-    fn unpack_frame(&mut self, br: &mut ByteReader, dst: &mut [u8]) -> DecoderResult<()> {
+    fn unpack_frame(&mut self, br: &mut dyn ByteIO, dst: &mut [u8]) -> DecoderResult<()> {
         self.op_run = 0;
         self.op_val = 0;
         self.subop_run = 0;
@@ -251,7 +251,7 @@ impl FrameDecoder {
         self.frame  = vec![0; self.fctx.width * self.fctx.height];
         self.fctx.pframe = vec![0; self.fctx.width * self.fctx.height];
     }
-    fn load_raw_frame(&mut self, br: &mut ByteReader) -> DecoderResult<()> {
+    fn load_raw_frame(&mut self, br: &mut dyn ByteIO) -> DecoderResult<()> {
         if self.fctx.width == 160 {
             br.read_buf(&mut self.frame)?;
         } else {
@@ -364,8 +364,7 @@ impl NADecoder for TealVideoDecoder {
     }
     fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
         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 frm_type = br.read_u16be()?;
         let _is_last = (br.read_u16be()? & 1) == 0;
index 99af37c6561a24f9a1abf68f65eeec124482385f..48856acb18081500dae4bedeab30640afd2bccc2 100644 (file)
@@ -1,7 +1,7 @@
 use nihav_core::demuxers::*;
 
 struct MVIDemuxer<'a> {
-    src:            &'a mut ByteReader<'a>,
+    src:            &'a mut dyn ByteIO,
     is_large:       bool,
     vpacket:        Option<NAPacket>,
     aframe:         usize,
@@ -13,7 +13,7 @@ struct MVIDemuxer<'a> {
 }
 
 impl<'a> MVIDemuxer<'a> {
-    fn new(src: &'a mut ByteReader<'a>) -> Self {
+    fn new(src: &'a mut dyn ByteIO) -> Self {
         MVIDemuxer {
             src,
             is_large:   false,
@@ -134,7 +134,7 @@ impl<'a> NAOptionHandler for MVIDemuxer<'a> {
 pub struct MVIDemuxerCreator { }
 
 impl DemuxerCreator for MVIDemuxerCreator {
-    fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box<dyn DemuxCore<'a> + 'a> {
+    fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box<dyn DemuxCore<'a> + 'a> {
         Box::new(MVIDemuxer::new(br))
     }
     fn get_name(&self) -> &'static str { "mvi" }
@@ -149,8 +149,7 @@ mod test {
     fn test_mvi_demux() {
         // sample from AD&D Core Rules CD
         let mut file = File::open("assets/Misc/MP/avtest.mvi").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 = MVIDemuxer::new(&mut br);
         let mut sm = StreamManager::new();
         let mut si = SeekIndex::new();
index a80a01ad441a3193062120e803bdc38e33873e13..c43fc863a3695c1cb8fc7a230101ac1e4aa6a5fb 100644 (file)
@@ -1,12 +1,12 @@
 use nihav_core::demuxers::*;
 
 struct QPEGDemuxer<'a> {
-    src:            &'a mut ByteReader<'a>,
+    src:            &'a mut dyn ByteIO,
     frameno:        u32,
 }
 
 impl<'a> QPEGDemuxer<'a> {
-    fn new(src: &'a mut ByteReader<'a>) -> Self {
+    fn new(src: &'a mut dyn ByteIO) -> Self {
         QPEGDemuxer {
             src,
             frameno:    0,
@@ -68,7 +68,7 @@ impl<'a> NAOptionHandler for QPEGDemuxer<'a> {
 pub struct QPEGDemuxerCreator { }
 
 impl DemuxerCreator for QPEGDemuxerCreator {
-    fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box<dyn DemuxCore<'a> + 'a> {
+    fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box<dyn DemuxCore<'a> + 'a> {
         Box::new(QPEGDemuxer::new(br))
     }
     fn get_name(&self) -> &'static str { "qpeg" }
@@ -83,8 +83,7 @@ mod test {
     fn test_qpeg_demux() {
         // sample from Inside Multimedia 1994 October
         let mut file = File::open("assets/Misc/club01.dvc").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 = QPEGDemuxer::new(&mut br);
         let mut sm = StreamManager::new();
         let mut si = SeekIndex::new();
index 283b7955320738927f9119d12ba0354fc8e7ec47..0634c96eca9adbd516f91b66e2ffa18e8d39623e 100644 (file)
@@ -1,7 +1,7 @@
 use nihav_core::demuxers::*;
 
 struct TealMovieDemuxer<'a> {
-    src:            &'a mut ByteReader<'a>,
+    src:            &'a mut dyn ByteIO,
     frameno:        usize,
     offsets:        Vec<u32>,
     afrm_start:     usize,
@@ -15,7 +15,7 @@ struct TealMovieDemuxer<'a> {
 }
 
 impl<'a> TealMovieDemuxer<'a> {
-    fn new(src: &'a mut ByteReader<'a>) -> Self {
+    fn new(src: &'a mut dyn ByteIO) -> Self {
         TealMovieDemuxer {
             src,
             frameno:        0,
@@ -30,7 +30,7 @@ impl<'a> TealMovieDemuxer<'a> {
             height:         0,
         }
     }
-    fn skip_block2(br: &mut ByteReader, b2_run: &mut usize, b2_type: &mut u8) -> DemuxerResult<()> {
+    fn skip_block2(br: &mut dyn ByteIO, b2_run: &mut usize, b2_type: &mut u8) -> DemuxerResult<()> {
         let op = if *b2_run > 0 {
                 *b2_run -= 1;
                 *b2_type
@@ -58,7 +58,7 @@ impl<'a> TealMovieDemuxer<'a> {
         }
         Ok(())
     }
-    fn skip_block4(br: &mut ByteReader, split: bool, b4_run: &mut usize, b4_type: &mut u8, b2_run: &mut usize, b2_type: &mut u8) -> DemuxerResult<()> {
+    fn skip_block4(br: &mut dyn ByteIO, split: bool, b4_run: &mut usize, b4_type: &mut u8, b2_run: &mut usize, b2_type: &mut u8) -> DemuxerResult<()> {
         let op = if split {
                 0xFF
             } else if *b4_run > 0 {
@@ -93,7 +93,7 @@ impl<'a> TealMovieDemuxer<'a> {
         }
         Ok(())
     }
-    fn find_type2_size(br: &mut ByteReader, width: usize, height: usize) -> DemuxerResult<usize> {
+    fn find_type2_size(br: &mut dyn ByteIO, width: usize, height: usize) -> DemuxerResult<usize> {
         let mut b8_type = 0;
         let mut b8_run  = 0;
         let mut b4_type = 0;
@@ -144,8 +144,7 @@ impl<'a> TealMovieDemuxer<'a> {
         Ok(br.tell() as usize)
     }
     fn parse_frame(&mut self) -> DemuxerResult<(bool, Vec<u8>)> {
-        let mut mr = MemoryReader::new_read(&self.buf[self.ppos..]);
-        let mut br = ByteReader::new(&mut mr);
+        let mut br = MemoryReader::new_read(&self.buf[self.ppos..]);
         let ftype = br.read_u16be()?;
         let flags = br.read_u16be()?;
         if (flags & 1) == 0 {
@@ -319,7 +318,7 @@ impl<'a> NAOptionHandler for TealMovieDemuxer<'a> {
 pub struct TealMovieDemuxerCreator { }
 
 impl DemuxerCreator for TealMovieDemuxerCreator {
-    fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box<dyn DemuxCore<'a> + 'a> {
+    fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box<dyn DemuxCore<'a> + 'a> {
         Box::new(TealMovieDemuxer::new(br))
     }
     fn get_name(&self) -> &'static str { "tealmov" }
@@ -334,8 +333,7 @@ mod test {
     fn test_teal_movie_demux() {
         // sample bundled with TealMovie software
         let mut file = File::open("assets/Misc/ASTRONUT.PDB").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 = TealMovieDemuxer::new(&mut br);
         let mut sm = StreamManager::new();
         let mut si = SeekIndex::new();