X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-vivo%2Fsrc%2Fcodecs%2Fvivo.rs;h=64af5ffae9833396c07a162877c8043cc04eb982;hb=7be96acc8d04f0760566255b7ef8c872499889a9;hp=c6620b426a553211a4049c9223102804f382cd11;hpb=6fc1b07379bcbe390a8eaf18387f4d4e56885b7f;p=nihav.git diff --git a/nihav-vivo/src/codecs/vivo.rs b/nihav-vivo/src/codecs/vivo.rs index c6620b4..64af5ff 100644 --- a/nihav-vivo/src/codecs/vivo.rs +++ b/nihav-vivo/src/codecs/vivo.rs @@ -95,7 +95,7 @@ fn gen_clip_tab(clip_tab: &mut [i16; 64], q: u8) { clip_tab[(32 + i) as usize] = i; } for i in lim..q { - let val = q - i; + let val = q - i; clip_tab[(32 - i) as usize] = -val; clip_tab[(32 + i) as usize] = val; } @@ -124,17 +124,17 @@ impl BlockDSP for VivoBlockDSP { blockdsp::copy_block(&mut dst, src.clone(), 0, xpos, ypos, mv.x >> 1, mv.y >> 1, 16, 16, 0, 1, mode, H263_INTERP_FUNCS); blockdsp::copy_block(&mut dst, src.clone(), 1, xpos >> 1, ypos >> 1, mv.x >> 2, mv.y >> 2, 8, 8, 0, 1, cmode, H263_INTERP_FUNCS); - blockdsp::copy_block(&mut dst, src.clone(), 2, xpos >> 1, ypos >> 1, mv.x >> 2, mv.y >> 2, 8, 8, 0, 1, cmode, H263_INTERP_FUNCS); + blockdsp::copy_block(&mut dst, src, 2, xpos >> 1, ypos >> 1, mv.x >> 2, mv.y >> 2, 8, 8, 0, 1, cmode, H263_INTERP_FUNCS); } fn copy_blocks8x8(&self, dst: &mut NAVideoBuffer, src: NAVideoBufferRef, xpos: usize, ypos: usize, mvs: &[MV; 4]) { let mut dst = NASimpleVideoFrame::from_video_buf(dst).unwrap(); - for i in 0..4 { + for (i, mv) in mvs.iter().enumerate() { let xadd = (i & 1) * 8; let yadd = (i & 2) * 4; - let mode = ((mvs[i].x & 1) + (mvs[i].y & 1) * 2) as usize; + let mode = ((mv.x & 1) + (mv.y & 1) * 2) as usize; - blockdsp::copy_block(&mut dst, src.clone(), 0, xpos + xadd, ypos + yadd, mvs[i].x >> 1, mvs[i].y >> 1, 8, 8, 0, 1, mode, H263_INTERP_FUNCS); + blockdsp::copy_block(&mut dst, src.clone(), 0, xpos + xadd, ypos + yadd, mv.x >> 1, mv.y >> 1, 8, 8, 0, 1, mode, H263_INTERP_FUNCS); } let sum_mv = mvs[0] + mvs[1] + mvs[2] + mvs[3]; @@ -153,17 +153,17 @@ impl BlockDSP for VivoBlockDSP { blockdsp::copy_block(&mut dst, src.clone(), 0, xpos, ypos, mv.x >> 1, mv.y >> 1, 16, 16, 0, 1, mode, H263_INTERP_AVG_FUNCS); blockdsp::copy_block(&mut dst, src.clone(), 1, xpos >> 1, ypos >> 1, mv.x >> 2, mv.y >> 2, 8, 8, 0, 1, cmode, H263_INTERP_AVG_FUNCS); - blockdsp::copy_block(&mut dst, src.clone(), 2, xpos >> 1, ypos >> 1, mv.x >> 2, mv.y >> 2, 8, 8, 0, 1, cmode, H263_INTERP_AVG_FUNCS); + blockdsp::copy_block(&mut dst, src, 2, xpos >> 1, ypos >> 1, mv.x >> 2, mv.y >> 2, 8, 8, 0, 1, cmode, H263_INTERP_AVG_FUNCS); } fn avg_blocks8x8(&self, dst: &mut NAVideoBuffer, src: NAVideoBufferRef, xpos: usize, ypos: usize, mvs: &[MV; 4]) { let mut dst = NASimpleVideoFrame::from_video_buf(dst).unwrap(); - for i in 0..4 { + for (i, mv) in mvs.iter().enumerate() { let xadd = (i & 1) * 8; let yadd = (i & 2) * 4; - let mode = ((mvs[i].x & 1) + (mvs[i].y & 1) * 2) as usize; + let mode = ((mv.x & 1) + (mv.y & 1) * 2) as usize; - blockdsp::copy_block(&mut dst, src.clone(), 0, xpos + xadd, ypos + yadd, mvs[i].x >> 1, mvs[i].y >> 1, 8, 8, 0, 1, mode, H263_INTERP_AVG_FUNCS); + blockdsp::copy_block(&mut dst, src.clone(), 0, xpos + xadd, ypos + yadd, mv.x >> 1, mv.y >> 1, 8, 8, 0, 1, mode, H263_INTERP_AVG_FUNCS); } let sum_mv = mvs[0] + mvs[1] + mvs[2] + mvs[3]; @@ -729,6 +729,7 @@ mod test { use nihav_codec_support::test::dec_video::*; use crate::vivo_register_all_decoders; use crate::vivo_register_all_demuxers; + // samples from https://samples.mplayerhq.hu/vivo/ #[test] fn test_vivo1() { let mut dmx_reg = RegisteredDemuxers::new();