X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-game%2Fsrc%2Fcodecs%2Fmidivid3.rs;h=aebd11814ecfa364a4bd5d98614f890179f3c47e;hp=7ffb04548b31f3c28d17ab1d5c9dd04035fc0c49;hb=HEAD;hpb=7d57ae2f680d7a1eba7af2ee831f305b2f0f9324 diff --git a/nihav-game/src/codecs/midivid3.rs b/nihav-game/src/codecs/midivid3.rs index 7ffb045..aebd118 100644 --- a/nihav-game/src/codecs/midivid3.rs +++ b/nihav-game/src/codecs/midivid3.rs @@ -211,7 +211,7 @@ impl Midivid3Decoder { let src = &ref_frm.get_data()[ref_frm.get_offset(0) + (src_x as usize) + (src_y as usize) * sstride..]; let dst = &mut frm.data[ydst + x..]; for (dst, src) in dst.chunks_mut(frm.stride[0]).zip(src.chunks(sstride)).take(16) { - (&mut dst[..16]).copy_from_slice(&src[..16]); + dst[..16].copy_from_slice(&src[..16]); } let xoff = (src_x as usize) >> 1; let yoff = (src_y as usize) >> 1; @@ -220,7 +220,7 @@ impl Midivid3Decoder { let src = &ref_frm.get_data()[ref_frm.get_offset(plane) + xoff + yoff * sstride..]; let dst = &mut frm.data[if plane == 1 { udst } else { vdst } + x / 2..]; for (dst, src) in dst.chunks_mut(frm.stride[plane]).zip(src.chunks(sstride)).take(8) { - (&mut dst[..8]).copy_from_slice(&src[..8]); + dst[..8].copy_from_slice(&src[..8]); } } if has_residue { @@ -275,7 +275,7 @@ fn decode_values(br: &mut BitReader, dst: &mut [i16], cb: &Codebook) -> Dec *el = 0; zero_run -= 1; } else { - let val = br.read_cb(&cb)? as u8; + let val = br.read_cb(cb)? as u8; if val == 0 { zero_run = if br.read_bool()? { br.read(6)? as usize + 8 @@ -297,11 +297,11 @@ fn decode_values(br: &mut BitReader, dst: &mut [i16], cb: &Codebook) -> Dec } fn dequant(val: i16, q: i16) -> i32 { - (val as i32) * (q as i32) + i32::from(val) * i32::from(q) } fn scale_coef(val: i32, scale: i16) -> i32 { - ((val as i32) * (scale as i32)) >> 8 + (val * i32::from(scale)) >> 8 } macro_rules! idct_1d { @@ -334,6 +334,8 @@ macro_rules! idct_1d { } } +#[allow(clippy::erasing_op)] +#[allow(clippy::identity_op)] fn idct(blk: &mut [i32; 64]) { for i in 0..8 { idct_1d!(blk[i + 0 * 8], blk[i + 1 * 8], blk[i + 2 * 8], blk[i + 3 * 8], @@ -343,7 +345,7 @@ fn idct(blk: &mut [i32; 64]) { idct_1d!(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7]); } for el in blk.iter_mut() { - *el = *el >> 5; + *el >>= 5; } } @@ -394,7 +396,7 @@ fn decode_block_inter(dst: &mut [u8], stride: usize, btype: usize, coeffs: &[i16 let dc = dequant(coeffs[0], qmat[0]) >> 5; for line in dst.chunks_mut(stride).take(8) { for el in line.iter_mut().take(8) { - *el = ((*el as i32) + dc).max(0).min(255) as u8; + *el = (i32::from(*el) + dc).max(0).min(255) as u8; } } }, @@ -407,7 +409,7 @@ fn decode_block_inter(dst: &mut [u8], stride: usize, btype: usize, coeffs: &[i16 idct(&mut blk); for (line, row) in dst.chunks_mut(stride).zip(blk.chunks(8)).take(8) { for (dst, coef) in line.iter_mut().zip(row.iter()).take(8) { - *dst = (*dst as i32 + *coef).max(0).min(255) as u8; + *dst = (i32::from(*dst) + *coef).max(0).min(255) as u8; } } }, @@ -419,7 +421,7 @@ fn decode_block_inter(dst: &mut [u8], stride: usize, btype: usize, coeffs: &[i16 idct(&mut blk); for (line, row) in dst.chunks_mut(stride).zip(blk.chunks(8)).take(8) { for (dst, coef) in line.iter_mut().zip(row.iter()).take(8) { - *dst = (*dst as i32 + *coef).max(0).min(255) as u8; + *dst = (i32::from(*dst) + *coef).max(0).min(255) as u8; } } }, @@ -428,13 +430,13 @@ fn decode_block_inter(dst: &mut [u8], stride: usize, btype: usize, coeffs: &[i16 fn init_quant(qmat: &mut [i16; 64], base_qmat: &[u8; 64], quant: u8) { let q = if quant < 50 { - 5000 / (quant.max(1) as i32) + 5000 / i32::from(quant.max(1)) } else { - ((100 - quant.min(100)) * 2) as i32 + i32::from((100 - quant.min(100)) * 2) }; for (inq, (outq, scale)) in base_qmat.iter().zip(qmat.iter_mut().zip(QUANT_MATRIX.iter())) { - let val = (((*inq as i32) * q + 50) / 100).max(1).min(0x7FFF); - *outq = ((val * (*scale as i32) + 0x800) >> 12) as i16; + let val = ((i32::from(*inq) * q + 50) / 100).max(1).min(0x7FFF); + *outq = ((val * i32::from(*scale) + 0x800) >> 12) as i16; } } @@ -525,15 +527,16 @@ mod test { use nihav_core::codecs::RegisteredDecoders; use nihav_core::demuxers::RegisteredDemuxers; use nihav_codec_support::test::dec_video::*; - use crate::game_register_all_codecs; + use crate::game_register_all_decoders; use nihav_commonfmt::generic_register_all_demuxers; #[test] fn test_midivid3_video() { let mut dmx_reg = RegisteredDemuxers::new(); generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - game_register_all_codecs(&mut dec_reg); + game_register_all_decoders(&mut dec_reg); + // sample: https://samples.mplayerhq.hu/V-codecs/mv30.avi test_decoding("avi", "midivid3", "assets/Game/mv30.avi", Some(16), &dmx_reg, &dec_reg, ExpectedTestResult::MD5Frames(vec![ [0x0f4f2377, 0xe017458f, 0xebf6d59d, 0x238a3e64],