replace vec.truncate(0) with vec.clear()
[nihav.git] / nihav-indeo / src / codecs / ivibr.rs
index 53ee9e91cad6d3be1c320ea4411be6ad5003cad7..8ce4d1b03d1729538c4447b6cc0417e488f45cb1 100644 (file)
@@ -171,6 +171,7 @@ fn read_trans_band_header(br: &mut BitReader, w: usize, h: usize, dst: &mut [i16
     for i in 0..cb.len {
         cb.bits[i] = br.read(4)? as u8;
     }
+    cb = cb.init();
     br.align();
 
 let tile_start = br.tell();
@@ -227,7 +228,8 @@ let tile_end = tile_start + len * 8;
     Ok(())
 }
 
-fn decode_block8x8(br: &mut BitReader, blk_cb: &IVICodebook, rvmap: &RVMap, tables: &TxParams8x8, is_intra: bool, is_2d: bool, prev_dc: &mut i32, quant: u8, coeffs: &mut [i32; 64], transform: &TrFunc) -> DecoderResult<()> {
+#[allow(clippy::cast_lossless)]
+fn decode_block8x8(br: &mut BitReader, blk_cb: &IVICodebook, rvmap: &RVMap, tables: &TxParams8x8, is_intra: bool, is_2d: bool, prev_dc: &mut i32, quant: u8, coeffs: &mut [i32; 64], transform: TrFunc) -> DecoderResult<()> {
     let mut idx: isize = -1;
     let quant_mat = if is_intra { tables.quant_intra } else { tables.quant_inter };
     while idx <= 64 {
@@ -277,7 +279,8 @@ fn decode_block8x8(br: &mut BitReader, blk_cb: &IVICodebook, rvmap: &RVMap, tabl
     (transform)(coeffs);
     Ok(())
 }
-fn decode_block4x4(br: &mut BitReader, blk_cb: &IVICodebook, rvmap: &RVMap, tables: &TxParams4x4, is_intra: bool, is_2d: bool, prev_dc: &mut i32, quant: u8, coeffs: &mut [i32; 64], transform: &TrFunc) -> DecoderResult<()> {
+#[allow(clippy::cast_lossless)]
+fn decode_block4x4(br: &mut BitReader, blk_cb: &IVICodebook, rvmap: &RVMap, tables: &TxParams4x4, is_intra: bool, is_2d: bool, prev_dc: &mut i32, quant: u8, coeffs: &mut [i32; 64], transform: TrFunc) -> DecoderResult<()> {
     let mut idx: isize = -1;
     let quant_mat = if is_intra { tables.quant_intra } else { tables.quant_inter };
     while idx <= 64 {
@@ -507,8 +510,8 @@ impl IVIDecoder {
     fn realloc(&mut self, pic_hdr: &PictureHeader) -> DecoderResult<()> {
         let planes = if pic_hdr.transparent { 4 } else { 3 };
 
-        //self.bands.truncate(0);
-        self.tiles.truncate(0);
+        //self.bands.clear();
+        self.tiles.clear();
         self.num_tiles  = [[0; 4]; 4];
         self.tile_start = [[0; 4]; 4];
         let mut tstart: usize = 0;
@@ -549,7 +552,7 @@ impl IVIDecoder {
         }
         Ok(())
     }
-    fn decode_band(&mut self, pic_hdr: &PictureHeader, dec: &mut IndeoXParser, br: &mut BitReader, plane_no: usize, band_no: usize) -> DecoderResult<()> {
+    fn decode_band(&mut self, pic_hdr: &PictureHeader, dec: &mut dyn IndeoXParser, br: &mut BitReader, plane_no: usize, band_no: usize) -> DecoderResult<()> {
         let bidx = match plane_no {
             0 => { band_no },
             _ => { pic_hdr.luma_bands + plane_no - 1 },
@@ -579,7 +582,7 @@ impl IVIDecoder {
                 let mb_h = (tile.h + mb_size - 1) / mb_size;
                 tile.mb_w = mb_w;
                 tile.mb_h = mb_h;
-                tile.mb.truncate(0);
+                tile.mb.clear();
                 tile.mb.resize(mb_w * mb_h, MB::new(0, 0));
             }
 
@@ -619,7 +622,7 @@ impl IVIDecoder {
                     dec.decode_mb_info(br, pic_hdr, &band, tile, ref_tile, mv_scale)?;
                 }
 
-                self.decode_tile(br, &band, tile_no, &tr, &tr_dc)?;
+                self.decode_tile(br, &band, tile_no, tr, tr_dc)?;
 let skip_part = tile_end - br.tell();
 br.skip(skip_part as u32)?;
             } else {
@@ -662,14 +665,14 @@ br.skip(skip_part as u32)?;
                         }
                     }
                 }
-                self.decode_tile(br, &band, tile_no, &tr, &tr_dc)?;
+                self.decode_tile(br, &band, tile_no, tr, tr_dc)?;
             }
         }
         self.bands[bidx] = band;
         br.align();
         Ok(())
     }
-    fn decode_tile(&mut self, br: &mut BitReader, band: &BandHeader, tile_no: usize, tr: &TrFunc, transform_dc: &TrFuncDC) -> DecoderResult<()> {
+    fn decode_tile(&mut self, br: &mut BitReader, band: &BandHeader, tile_no: usize, tr: TrFunc, transform_dc: TrFuncDC) -> DecoderResult<()> {
         let mut mb_idx = 0;
         let mut prev_dc: i32 = 0;
         let tile = &mut self.tiles[tile_no];
@@ -824,7 +827,7 @@ br.skip(skip_part as u32)?;
         unreachable!();
     }
 
-    fn decode_single_frame<'a>(&mut self, dec: &mut IndeoXParser, br: &mut BitReader<'a>) -> DecoderResult<NABufferType> {
+    fn decode_single_frame<'a>(&mut self, dec: &mut dyn IndeoXParser, br: &mut BitReader<'a>) -> DecoderResult<NABufferType> {
         let pic_hdr = dec.decode_picture_header(br)?;
         self.ftype = pic_hdr.ftype;
         if pic_hdr.ftype.is_null() {
@@ -902,13 +905,16 @@ br.skip(skip_part as u32)?;
                     self.iref_0   = self.cur_frame;
                     self.scal_ref = self.cur_frame;
                 },
+            IVIFrameType::InterScal => {
+                    self.scal_ref = self.cur_frame;
+                },
             _ => {},
         };
 
         Ok(buftype)
     }
 
-    pub fn decode_frame<'a>(&mut self, dec: &mut IndeoXParser, br: &mut BitReader<'a>) -> DecoderResult<NABufferType> {
+    pub fn decode_frame<'a>(&mut self, dec: &mut dyn IndeoXParser, br: &mut BitReader<'a>) -> DecoderResult<NABufferType> {
         let res = self.decode_single_frame(dec, br);
         if res.is_err() { return res; }
         if (self.ftype == IVIFrameType::Intra) && (br.left() > 16) {
@@ -925,8 +931,8 @@ br.skip(skip_part as u32)?;
                 let seq = br.peek(21);
                 if seq == 0xBFFF8 {
                     let res2 = self.decode_single_frame(dec, br);
-                    if res2.is_ok() {
-                        self.bref = Some(res2.unwrap());
+                    if let Ok(res) = res2 {
+                        self.bref = Some(res);
                     }
                 }
                 self.ftype = IVIFrameType::Intra;