]> git.nihav.org Git - nihav.git/commitdiff
nihav_duck: switch to ByteIO
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 17 Aug 2025 16:33:26 +0000 (18:33 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 17 Aug 2025 16:33:26 +0000 (18:33 +0200)
13 files changed:
nihav-duck/src/codecs/dkadpcm.rs
nihav-duck/src/codecs/truemotion1.rs
nihav-duck/src/codecs/truemotion1enc.rs
nihav-duck/src/codecs/truemotion2.rs
nihav-duck/src/codecs/truemotion2x.rs
nihav-duck/src/codecs/truemotionrtenc.rs
nihav-duck/src/codecs/vp6enc/coder.rs
nihav-duck/src/codecs/vp6enc/huff.rs
nihav-duck/src/codecs/vp6enc/mod.rs
nihav-duck/src/codecs/vp7enc/coder.rs
nihav-duck/src/codecs/vp7enc/mod.rs
nihav-duck/src/codecs/vpenc/coder.rs
nihav-duck/src/demuxers/ivf.rs

index 5de91d546cb4fddf65aec0e373b1319afce280c9..695b8ffa1ec8bf9c03881abc59cb56390d8e90af 100644 (file)
@@ -58,8 +58,7 @@ impl NADecoder for DuckADPCMDecoder {
             let dst = adata.get_data_mut().unwrap();
 
             for blk in pktbuf.chunks_exact(self.block_len) {
-                let mut mr = MemoryReader::new_read(blk);
-                let mut br = ByteReader::new(&mut mr);
+                let mut br = MemoryReader::new_read(blk);
                 if self.is_dk3 {
                     let _typeid                 = br.read_byte()?;
                     let _version                = br.read_byte()?;
index 1eb880f315d53332ee4539887c203536894b97e7..a5fec8580b2520c383e146cf66dc316116086304 100644 (file)
@@ -519,8 +519,7 @@ impl NADecoder for TM1Decoder {
         for i in 1..hdr_size {
             hdr[i - 1] = src[i] ^ src[i + 1];
         }
-        let mut mr = MemoryReader::new_read(&hdr[0..hdr_size-1]);
-        let mut br = ByteReader::new(&mut mr);
+        let mut br = MemoryReader::new_read(&hdr[0..hdr_size-1]);
 
         let tm1type                             = br.read_byte()? as usize;
         let delta_set                           = br.read_byte()? as usize;
index ec97b0d647a3a0b20d671048461f106690751a54..2ebd56709676d067e73fd4841c98157dd23acc15 100644 (file)
@@ -639,8 +639,7 @@ impl NAEncoder for TM1Encoder {
         }
 
         let mut dbuf = Vec::with_capacity(4);
-        let mut gw   = GrowableMemoryWriter::new_write(&mut dbuf);
-        let mut bw   = ByteWriter::new(&mut gw);
+        let mut bw   = GrowableMemoryWriter::new_write(&mut dbuf);
 
         self.tm1type = match (self.is16, self.block_mode) {
                 (true,  BlockMode::FourByFour) => 2,
index 281b7b7c79267e0c3f3a4611282da0f795449b60..1bdb0dd644b0ef4a4e3ada0af9ed89642328cf57 100644 (file)
@@ -38,7 +38,7 @@ trait ReadLenEsc {
 
 const TM2_ESCAPE: usize = 0x80000000;
 
-impl<'a> ReadLenEsc for ByteReader<'a> {
+impl<T: ?Sized + ByteIO> ReadLenEsc for T {
     fn read_len_esc(&mut self) -> DecoderResult<usize> {
         let len                                 = self.read_u32le()? as usize;
         if len == TM2_ESCAPE {
@@ -102,7 +102,7 @@ impl Default for TM2Stream {
 }
 
 impl TM2Stream {
-    fn read_header(&mut self, src: &[u8], br: &mut ByteReader) -> DecoderResult<()> {
+    fn read_header(&mut self, src: &[u8], br: &mut dyn ByteIO) -> DecoderResult<()> {
         self.tokens.clear();
         self.pos = 0;
 
@@ -546,8 +546,7 @@ impl NADecoder for TM2Decoder {
     fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
         let src = pkt.get_buffer();
         validate!(src.len() >= 40 + (TM2StreamType::Num as usize) * 4 + 4);
-        let mut mr = MemoryReader::new_read(&src);
-        let mut br = ByteReader::new(&mut mr);
+        let mut br = MemoryReader::new_read(&src);
 
         let magic                               = br.read_u32be()?;
         validate!(magic == 0x100 || magic == 0x101);
index 3e57b55c1883bc953cb200c4ca0ced620b11bd85..be776efb47447b09d308e1b468e2fe47eb0057bd 100644 (file)
@@ -39,13 +39,13 @@ struct Deltas {
 }
 
 impl Deltas {
-    fn reset(&mut self, br: &mut ByteReader) -> DecoderResult<()> {
+    fn reset(&mut self, br: &mut dyn ByteIO) -> DecoderResult<()> {
         let b                               = br.read_byte()? as usize;
         self.vq_idx = b;
         self.vq_pos = 0;
         Ok(())
     }
-    fn get_val(&mut self, br: &mut ByteReader) -> DecoderResult<u8> {
+    fn get_val(&mut self, br: &mut dyn ByteIO) -> DecoderResult<u8> {
         if self.vq_idx > self.codebook.len() { return Err(DecoderError::ShortData); }
         let ret = self.codebook[self.vq_idx][self.vq_pos];
         self.vq_pos += 1;
@@ -66,7 +66,7 @@ impl Deltas {
             -1 - hval
         }
     }
-    fn get_int(&mut self, br: &mut ByteReader) -> DecoderResult<i16> {
+    fn get_int(&mut self, br: &mut dyn ByteIO) -> DecoderResult<i16> {
         let b = self.get_val(br)?;
         if b != self.vq_esc - 1 {
             return Ok(Self::remap(u16::from(b)));
@@ -91,11 +91,11 @@ impl Deltas {
         }
         Ok(Self::remap(val))
     }
-    fn get_dy(&mut self, br: &mut ByteReader) -> DecoderResult<i16> {
+    fn get_dy(&mut self, br: &mut dyn ByteIO) -> DecoderResult<i16> {
         let b = self.get_val(br)?;
         Ok(self.tabs[1][b as usize])
     }
-    fn get_dc(&mut self, br: &mut ByteReader) -> DecoderResult<i16> {
+    fn get_dc(&mut self, br: &mut dyn ByteIO) -> DecoderResult<i16> {
         let b = self.get_val(br)?;
         Ok(self.tabs[0][b as usize])
     }
@@ -202,8 +202,7 @@ impl TM2XDecoder {
     fn parse_init(&mut self, version: u8) -> DecoderResult<()> {
         self.version = version;
 
-        let mut mr = MemoryReader::new_read(&self.dec_buf);
-        let mut br = ByteReader::new(&mut mr);
+        let mut br = MemoryReader::new_read(&self.dec_buf);
         if version > 4 {
             let _smth                   = br.read_u32be()?;
         }
@@ -231,8 +230,7 @@ impl TM2XDecoder {
         Ok(())
     }
     fn parse_tabs(&mut self) -> DecoderResult<()> {
-        let mut mr = MemoryReader::new_read(&self.dec_buf);
-        let mut br = ByteReader::new(&mut mr);
+        let mut br = MemoryReader::new_read(&self.dec_buf);
 
         let idx                         = br.read_byte()? as usize;
         validate!(idx < self.deltas.tabs.len());
@@ -245,8 +243,7 @@ impl TM2XDecoder {
         Ok(())
     }
     fn parse_cb_desc(&mut self, version: u8) -> DecoderResult<()> {
-        let mut mr = MemoryReader::new_read(&self.dec_buf);
-        let mut br = ByteReader::new(&mut mr);
+        let mut br = MemoryReader::new_read(&self.dec_buf);
 
         if version == 0x0A {
             self.deltas.vq_esc          = br.read_byte()?;
@@ -278,8 +275,7 @@ impl TM2XDecoder {
     #[allow(clippy::cognitive_complexity)]
     #[allow(clippy::identity_op)]
     fn decode_frame(&mut self, src: &[u8]) -> DecoderResult<()> {
-        let mut mr = MemoryReader::new_read(src);
-        let mut br = ByteReader::new(&mut mr);
+        let mut br = MemoryReader::new_read(src);
 
         self.deltas.reset(&mut br)?;
         let bw = self.width / 8;
@@ -578,8 +574,7 @@ impl NADecoder for TM2XDecoder {
     fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
         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 dec = Decryptor::default();
 
         let mut initialised = false;
index f2cfd5d0fb621d0589f439e695bcfab8d842b18e..da02ba844983cb18863449540c69d531f86a0df8 100644 (file)
@@ -213,8 +213,7 @@ impl NAEncoder for TMRTEncoder {
         let buf = frm.get_buffer();
         if let Some(ref vbuf) = buf.get_vbuf() {
             let mut dbuf = Vec::with_capacity(4);
-            let mut gw   = GrowableMemoryWriter::new_write(&mut dbuf);
-            let mut bw   = ByteWriter::new(&mut gw);
+            let mut bw   = GrowableMemoryWriter::new_write(&mut dbuf);
 
             bw.write_byte(0)?; // header size
             bw.write_byte(17)?;
index 1fc6659bbbcb575514c13350268711314ce11938..b1b02661c5f75c66c3d64a4b68902207aad093f4 100644 (file)
@@ -120,7 +120,7 @@ pub trait EncoderTrait {
     fn write_zero_run(&mut self, val: usize, probs: &[u8; 14]) -> EncoderResult<()>;
 }
 
-impl<'a, 'b> EncoderTrait for BoolEncoder<'a, 'b> {
+impl<'a> EncoderTrait for BoolEncoder<'a> {
     fn write_cat(&mut self, cat: i8, tree: &[TokenSeq<i8>], tok_probs: &[u8], val_probs: &[u8; 11]) -> EncoderResult<()> {
         for entry in tree.iter() {
             if entry.val == cat {
index 43b6d6578d1c69e3f3baf17200d9bdbe1a14cf3f..7dcf387431bedbfd5a631b05cf57e08776aa7af5 100644 (file)
@@ -18,14 +18,14 @@ impl HuffState {
 
 pub const MAX_EOB_RUN: usize = 63 + 10;
 
-pub struct HuffEncoder<'a, 'b> {
-    bw:         &'a mut ByteWriter<'b>,
+pub struct HuffEncoder<'a> {
+    bw:         &'a mut dyn ByteIO,
     bitbuf:     u32,
     bits:       u8,
 }
 
-impl<'a, 'b> HuffEncoder<'a, 'b> {
-    pub fn new(bw: &'a mut ByteWriter<'b>) -> Self {
+impl<'a> HuffEncoder<'a> {
+    pub fn new(bw: &'a mut dyn ByteIO) -> Self {
         Self {
             bitbuf:     0,
             bits:       0,
index 4c18d5426bc7f40f471fa880e39ea93bffe8652b..6c5cfdcdea4c7924e1a44cf6b3c7b0701618027c 100644 (file)
@@ -22,9 +22,9 @@ mod rdo;
 
 const VERSION_VP61: u8 = VERSION_VP60 + 1;
 
-enum VP6Writer<'a, 'b> {
-    BoolCoder(BoolEncoder<'a, 'b>),
-    Huffman(HuffEncoder<'a, 'b>),
+enum VP6Writer<'a> {
+    BoolCoder(BoolEncoder<'a>),
+    Huffman(HuffEncoder<'a>),
 }
 
 #[derive(Default)]
@@ -407,7 +407,7 @@ impl VP6Encoder {
             }
         }
     }
-    fn encode_intra(&mut self, bw: &mut ByteWriter, quant: usize) -> EncoderResult<bool> {
+    fn encode_intra(&mut self, bw: &mut dyn ByteIO, quant: usize) -> EncoderResult<bool> {
         self.models.reset(false);
         self.models.reset_mbtype_models();
         self.stats.reset();
@@ -462,7 +462,7 @@ impl VP6Encoder {
         self.encode_coeffs(writer)?;
         Ok(true)
     }
-    fn encode_inter(&mut self, bw: &mut ByteWriter, quant: usize) -> EncoderResult<bool> {
+    fn encode_inter(&mut self, bw: &mut dyn ByteIO, quant: usize) -> EncoderResult<bool> {
         self.stats.reset();
 
         let multistream = self.huffman || self.version != VERSION_VP60;
@@ -484,7 +484,7 @@ impl VP6Encoder {
 
         Ok(golden_frame)
     }
-    fn write_inter_frame(&mut self, bw: &mut ByteWriter, quant: usize, multistream: bool, loop_filter: bool, golden_frame: bool) -> EncoderResult<()> {
+    fn write_inter_frame(&mut self, bw: &mut dyn ByteIO, quant: usize, multistream: bool, loop_filter: bool, golden_frame: bool) -> EncoderResult<()> {
         self.estimate_blocks(false);
 
         self.stats.generate(&mut self.models, false);
@@ -566,7 +566,7 @@ impl VP6Encoder {
 
         Ok(())
     }
-    fn encode_inter_fast(&mut self, bw: &mut ByteWriter, quant: usize) -> EncoderResult<bool> {
+    fn encode_inter_fast(&mut self, bw: &mut dyn ByteIO, quant: usize) -> EncoderResult<bool> {
         self.stats.reset();
 
         let multistream = self.huffman || self.version != VERSION_VP60;
@@ -721,8 +721,7 @@ impl NAEncoder for VP6Encoder {
         let buf = frm.get_buffer();
         if let Some(ref vbuf) = buf.get_vbuf() {
             let mut dbuf = Vec::with_capacity(4);
-            let mut gw   = GrowableMemoryWriter::new_write(&mut dbuf);
-            let mut bw   = ByteWriter::new(&mut gw);
+            let mut bw   = GrowableMemoryWriter::new_write(&mut dbuf);
 
             // todo integrate with rate control
             let is_intra = (self.frmcount == 0) || self.decide_encoding();
index f8664b5f16ce0829a09fd29257e17ecb6c8e807e..a2cd433dd97475e61e2de84cf6052a39a1f0adde 100644 (file)
@@ -112,7 +112,7 @@ pub trait VP7BoolEncoder {
     fn encode_mb_type(&mut self, is_intra: bool, mb_type: &MBType, models: &VP7Models) -> EncoderResult<()>;
 }
 
-impl<'a, 'b> VP7BoolEncoder for BoolEncoder<'a, 'b> {
+impl<'a> VP7BoolEncoder for BoolEncoder<'a> {
     fn put_byte(&mut self, val: u8) -> EncoderResult<()> {
         self.put_bits(u32::from(val), 8)
     }
index e3f6beccaf765a8359ad7d533f93e8de791c0555..f5257e460ee09081ab4bb06f4a34e12507aefc1f 100644 (file)
@@ -102,8 +102,7 @@ impl VP7Encoder {
             self.fenc.load_frame(vbuf);
 
             let mut dbuf = Vec::with_capacity(4);
-            let mut gw   = GrowableMemoryWriter::new_write(&mut dbuf);
-            let mut bw   = ByteWriter::new(&mut gw);
+            let mut bw   = GrowableMemoryWriter::new_write(&mut dbuf);
 
             let is_intra = self.frmcount == 0;
             let golden_frame = is_intra;
index d6715fa35ed7b47048a2cd162ac1e6d496b41dd6..1e1a3489a721f95aed2f64ef59db68a22ac365f6 100644 (file)
@@ -33,8 +33,8 @@ macro_rules! bit_seq {
     };
 }
 
-pub struct BoolEncoder<'a, 'b> {
-    bw:     &'a mut ByteWriter<'b>,
+pub struct BoolEncoder<'a> {
+    bw:     &'a mut dyn ByteIO,
     val:    u32,
     range:  u32,
     bits:   u8,
@@ -42,8 +42,8 @@ pub struct BoolEncoder<'a, 'b> {
     run:    usize,
 }
 
-impl<'a, 'b> BoolEncoder<'a, 'b> {
-    pub fn new(bw: &'a mut ByteWriter<'b>) -> Self {
+impl<'a> BoolEncoder<'a> {
+    pub fn new(bw: &'a mut dyn ByteIO) -> Self {
         Self {
             bw,
             val:    0,
index 1ed7bfe21bd8d487725c03266ee9cf6de91ede1f..982461286332f1cf6af1e16af5d0441872a82939 100644 (file)
@@ -1,13 +1,13 @@
 use nihav_core::demuxers::*;
 
 struct IVFDemuxer<'a> {
-    src:            &'a mut ByteReader<'a>,
+    src:            &'a mut dyn ByteIO,
     nframes:        u32,
     frameno:        u32,
 }
 
 impl<'a> IVFDemuxer<'a> {
-    fn new(src: &'a mut ByteReader<'a>) -> Self {
+    fn new(src: &'a mut dyn ByteIO) -> Self {
         IVFDemuxer {
             src,
             nframes:    0,
@@ -83,7 +83,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<dyn DemuxCore<'a> + 'a> {
+    fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box<dyn DemuxCore<'a> + 'a> {
         Box::new(IVFDemuxer::new(br))
     }
     fn get_name(&self) -> &'static str { "dkivf" }
@@ -98,8 +98,7 @@ mod test {
     fn test_ivf_demux() {
         // sample is from the official VP8 test bitstream set
         let mut file = File::open("assets/Duck/VP8/vp80-00-comprehensive-001.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();