Make BitReader rely on passed slice size without the additional arguments.
[nihav.git] / nihav-commonfmt / src / codecs / atrac3.rs
index c80bd360ff676ac8c7067025c717914cbced9658..efd608c2916c143b5a7d9bddc3cb2caa29a27cdd 100644 (file)
@@ -622,7 +622,7 @@ impl NADecoder for Atrac3Decoder {
         }
 
         {
-            let mut br = BitReader::new(self.pkt_buf.as_slice(), frame_size, BitReaderMode::BE);
+            let mut br = BitReader::new(&self.pkt_buf[0..frame_size], BitReaderMode::BE);
             let id                                  = br.read(6)?;
             validate!(id == 0x28);
             self.ch_data[0].decode_unit(&mut br, &self.codebooks, &self.scalefactors)?;
@@ -644,7 +644,7 @@ impl NADecoder for Atrac3Decoder {
             } else {
                 off = frame_size / 2;
             }
-            let mut br = BitReader::new(&self.pkt_buf[off..], frame_size - off, BitReaderMode::BE);
+            let mut br = BitReader::new(&self.pkt_buf[off..frame_size], BitReaderMode::BE);
             if self.mode == Mode::JointStereo {
                 let id                                  = br.read(2)?;
                 validate!(id == 0x3);
@@ -687,9 +687,15 @@ impl NADecoder for Atrac3Decoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        for ch_data in self.ch_data.iter_mut() {
+            ch_data.delay = [0.0; 1024];
+            ch_data.qmf_delay = [0.0; 64 * 3];
+        }
+    }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(Atrac3Decoder::new())
 }
 
@@ -709,7 +715,7 @@ mod test {
 
         let file = "assets/RV/rv30_atrc_384x208_realproducer_plus_8.51.rm";
 //        let file = "assets/RV/rv20_svt_atrc_640x352_realproducer_plus_8.51.rm";
-        test_decode_audio("realmedia", file, Some(12000), "atrac3", &dmx_reg, &dec_reg);
+        test_decode_audio("realmedia", file, Some(12000), None/*Some("atrac3")*/, &dmx_reg, &dec_reg);
     }
 }