make all codec crates export just register_all functions and document them
[nihav.git] / nihav-rad / src / codecs / binkvid.rs
index 2f95ed6b58c1add29a8d1f437e1043663c06e56e..920d8d560eb74339913fbfc665047a43064c1d2d 100644 (file)
@@ -30,7 +30,7 @@ impl Tree {
             if br.read_bool()? {
                 let len                         = br.read(3)? as usize;
                 let mut present: [bool; 16] = [false; 16];
-                for i in 0..len+1 {
+                for i in 0..=len {
                     self.syms[i]                = br.read(4)? as u8;
                     present[self.syms[i] as usize] = true;
                 }
@@ -44,7 +44,7 @@ impl Tree {
                 let len                         = br.read(2)? as usize;
                 let mut syms: [u8; 16] = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
                 let mut tmp: [u8; 16] = [0; 16];
-                for bits in 0..len+1 {
+                for bits in 0..=len {
                     let size = 1 << bits;
                     for arr in syms.chunks_mut(size * 2) {
                         let mut ptr0 = 0;
@@ -1053,7 +1053,7 @@ fn read_dct_coefficients(br: &mut BitReader, block: &mut [i32; 64], scan: &[usiz
     let q_index = if let Some(qidx) = q { qidx } else { br.read(4)? as usize };
     let qmat = &quant_matrices[q_index];
     block[0] = block[0].wrapping_mul(qmat[0]) >> 11;
-    for idx in coef_idx.into_iter().take(coef_count) {
+    for idx in coef_idx.iter().take(coef_count) {
         block[scan[*idx]] = block[scan[*idx]].wrapping_mul(qmat[*idx]) >> 11;
     }
 
@@ -1149,7 +1149,7 @@ fn read_residue(br: &mut BitReader, block: &mut [i32; 64], mut masks_count: usiz
         }
         mask >>= 1;
     }
-    
+
     Ok(())
 }
 
@@ -1157,7 +1157,7 @@ const BINK_FLAG_ALPHA:  u32 = 0x00100000;
 const BINK_FLAG_GRAY:   u32 = 0x00020000;
 
 impl NADecoder for BinkDecoder {
-    fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
+    fn init(&mut self, _supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> {
         if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
             let w = vinfo.get_width();
             let h = vinfo.get_height();
@@ -1206,10 +1206,10 @@ impl NADecoder for BinkDecoder {
             Err(DecoderError::InvalidData)
         }
     }
-    fn decode(&mut self, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
+    fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
         let src = pkt.get_buffer();
 
-        let mut br = BitReader::new(&src, src.len(), BitReaderMode::LE);
+        let mut br = BitReader::new(&src, BitReaderMode::LE);
 
         let mut buf;
         self.key_frame = pkt.is_keyframe();
@@ -1218,18 +1218,14 @@ impl NADecoder for BinkDecoder {
             if let Some(bbuf) = bufret {
                 buf = bbuf;
             } else {
-                let bufret = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 4);
-                if let Err(_) = bufret { return Err(DecoderError::InvalidData); }
-                let bufinfo = bufret.unwrap();
+                let bufinfo = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 4)?;
                 buf = bufinfo.get_vbuf().unwrap();
                 self.key_frame = true;
                 self.hams.add_frame(buf);
                 buf = self.hams.get_output_frame().unwrap();
             }
         } else {
-            let bufret = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 4);
-            if let Err(_) = bufret { return Err(DecoderError::InvalidData); }
-            let bufinfo = bufret.unwrap();
+            let bufinfo = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 4)?;
             buf = bufinfo.get_vbuf().unwrap();
         }
 
@@ -1260,11 +1256,14 @@ println!("decode frame {} b={} i={}", pkt.get_pts().unwrap(), self.is_ver_b, sel
 
         let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
         frm.set_frame_type(FrameType::P);
-        Ok(Rc::new(RefCell::new(frm)))
+        Ok(frm.into_ref())
+    }
+    fn flush(&mut self) {
+        self.ips.clear();
     }
 }
 
-pub fn get_decoder() -> Box<NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(BinkDecoder::new())
 }
 
@@ -1273,8 +1272,8 @@ mod test {
     use nihav_core::codecs::RegisteredDecoders;
     use nihav_core::demuxers::RegisteredDemuxers;
     use nihav_core::test::dec_video::*;
-    use crate::codecs::rad_register_all_codecs;
-    use crate::demuxers::rad_register_all_demuxers;
+    use crate::rad_register_all_codecs;
+    use crate::rad_register_all_demuxers;
     #[test]
     fn test_binkvid() {
         let mut dmx_reg = RegisteredDemuxers::new();