-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<()> {
-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<()> {
plane_buf: [Vec::new(), Vec::new(), Vec::new(), Vec::new()],
plane_stride: [0, 0, 0, 0],
pic_hdr: PictureHeader::new_null(IVIFrameType::Intra),
plane_buf: [Vec::new(), Vec::new(), Vec::new(), Vec::new()],
plane_stride: [0, 0, 0, 0],
pic_hdr: PictureHeader::new_null(IVIFrameType::Intra),
}
fn realloc(&mut self, pic_hdr: &PictureHeader) -> DecoderResult<()> {
let width = align(pic_hdr.width, 6);
}
fn realloc(&mut self, pic_hdr: &PictureHeader) -> DecoderResult<()> {
let width = align(pic_hdr.width, 6);
pub trait IndeoXParser {
fn decode_picture_header(&mut self, br: &mut BitReader) -> DecoderResult<PictureHeader>;
fn decode_band_header(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, plane: usize, band: usize) -> DecoderResult<BandHeader>;
pub trait IndeoXParser {
fn decode_picture_header(&mut self, br: &mut BitReader) -> DecoderResult<PictureHeader>;
fn decode_band_header(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, plane: usize, band: usize) -> DecoderResult<BandHeader>;
- fn decode_mb_info(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, band_hdr: &BandHeader, tile: &mut IVITile, ref_tile: Option<Ref<IVITile>>, mv_scale: u8) -> DecoderResult<()>;
+ fn decode_mb_info(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, band_hdr: &BandHeader, tile: &mut IVITile, ref_tile: Option<&IVITile>, mv_scale: u8) -> DecoderResult<()>;
fn recombine_plane(&mut self, src: &[i16], sstride: usize, dst: &mut [u8], dstride: usize, w: usize, h: usize);
}
fn recombine_plane(&mut self, src: &[i16], sstride: usize, dst: &mut [u8], dstride: usize, w: usize, h: usize);
}
num_tiles: [[usize; 4]; 4],
tile_start: [[usize; 4]; 4],
}
num_tiles: [[usize; 4]; 4],
tile_start: [[usize; 4]; 4],
}
while x < band_w {
let cur_w = if x + tile_w <= band_w { tile_w } else { band_w - x };
let tile = IVITile::new(band_xoff + x, band_yoff + y, cur_w, cur_h);
while x < band_w {
let cur_w = if x + tile_w <= band_w { tile_w } else { band_w - x };
let tile = IVITile::new(band_xoff + x, band_yoff + y, cur_w, cur_h);
- 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 },
let bidx = match plane_no {
0 => { band_no },
_ => { pic_hdr.luma_bands + plane_no - 1 },
let mv_scale;
if (plane_no == 0) && (band_no == 0) {
mv_scale = 0;
} else {
mv_scale = (((self.bands[0].mb_size >> 3) as i8) - ((band.mb_size >> 3) as i8)) as u8;
}
let mv_scale;
if (plane_no == 0) && (band_no == 0) {
mv_scale = 0;
} else {
mv_scale = (((self.bands[0].mb_size >> 3) as i8) - ((band.mb_size >> 3) as i8)) as u8;
}
- dec.decode_mb_info(br, pic_hdr, &band, &mut tile, ref_tile, mv_scale)?;
+ 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 mv_scale;
if (plane_no == 0) && (band_no == 0) {
mv_scale = 0;
} else {
mv_scale = (((self.bands[0].mb_size >> 3) as i8) - ((band.mb_size >> 3) as i8)) as u8;
}
let mv_scale;
if (plane_no == 0) && (band_no == 0) {
mv_scale = 0;
} else {
mv_scale = (((self.bands[0].mb_size >> 3) as i8) - ((band.mb_size >> 3) as i8)) as u8;
}
- self.decode_tile(br, &band, tile_no, &tr, &tr_dc)?;
+ self.decode_tile(br, &band, tile_no, tr, tr_dc)?;
- 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 tile = self.tiles[tile_no].borrow_mut();
- let mut frame = self.frames[self.cur_frame].borrow_mut();
+ let tile = &mut self.tiles[tile_no];
+ let mut frame = self.frames[self.cur_frame].clone();
do_mc(&mut dst[dstidx + boff..], stride,
&pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
pos_x + mb_x * band.mb_size + (blk_no & 1) * band.blk_size,
do_mc(&mut dst[dstidx + boff..], stride,
&pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
pos_x + mb_x * band.mb_size + (blk_no & 1) * band.blk_size,
pos_x, pos_x + tile_w, pos_y, pos_y + tile_h,
mb.mv_x, mb.mv_y, band.halfpel, band.blk_size);
} else {
pos_x, pos_x + tile_w, pos_y, pos_y + tile_h,
mb.mv_x, mb.mv_y, band.halfpel, band.blk_size);
} else {
do_mc_b(&mut dst[dstidx + boff..], stride,
&pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
&nf.plane_buf[band.plane_no], nf.plane_stride[band.plane_no],
do_mc_b(&mut dst[dstidx + boff..], stride,
&pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
&nf.plane_buf[band.plane_no], nf.plane_stride[band.plane_no],
do_mc(&mut dst[dstidx + mb_x * band.blk_size..], stride,
&pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
pos_x + mb_x * band.mb_size,
do_mc(&mut dst[dstidx + mb_x * band.blk_size..], stride,
&pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
pos_x + mb_x * band.mb_size,
pos_x, pos_x + tile_w, pos_y, pos_y + tile_h,
mb.mv_x, mb.mv_y, band.halfpel, band.blk_size);
} else {
pos_x, pos_x + tile_w, pos_y, pos_y + tile_h,
mb.mv_x, mb.mv_y, band.halfpel, band.blk_size);
} else {
do_mc_b(&mut dst[dstidx + mb_x * band.blk_size..], stride,
&pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
&nf.plane_buf[band.plane_no], nf.plane_stride[band.plane_no],
do_mc_b(&mut dst[dstidx + mb_x * band.blk_size..], stride,
&pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
&nf.plane_buf[band.plane_no], nf.plane_stride[band.plane_no],
- 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() {
let pic_hdr = dec.decode_picture_header(br)?;
self.ftype = pic_hdr.ftype;
if pic_hdr.ftype.is_null() {
vinfo.set_height(pic_hdr.height);
let mut buftype = alloc_video_buffer(vinfo, 0)?;
self.realloc(&pic_hdr)?;
vinfo.set_height(pic_hdr.height);
let mut buftype = alloc_video_buffer(vinfo, 0)?;
self.realloc(&pic_hdr)?;
self.decode_band(&pic_hdr, dec, br, plane, band)?;
}
if let NABufferType::Video(ref mut vb) = buftype {
self.decode_band(&pic_hdr, dec, br, plane, band)?;
}
if let NABufferType::Video(ref mut vb) = buftype {
let stride = frame.plane_stride[3];
read_trans_band_header(br, pic_hdr.width, pic_hdr.height, &mut frame.plane_buf[3], stride)?;
if let NABufferType::Video(ref mut vb) = buftype {
let stride = frame.plane_stride[3];
read_trans_band_header(br, pic_hdr.width, pic_hdr.height, &mut frame.plane_buf[3], stride)?;
if let NABufferType::Video(ref mut vb) = buftype {
self.iref_1 = self.iref_0;
self.iref_0 = self.cur_frame;
self.scal_ref = self.cur_frame;
self.iref_1 = self.iref_0;
self.iref_0 = self.cur_frame;
self.scal_ref = self.cur_frame;
- 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) {
let res = self.decode_single_frame(dec, br);
if res.is_err() { return res; }
if (self.ftype == IVIFrameType::Intra) && (br.left() > 16) {