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;
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 {
*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
}
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 {
}
}
+#[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],
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;
}
}
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;
}
}
},
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;
}
}
},
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;
}
}
},
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;
}
}
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],