X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-realmedia%2Fsrc%2Fcodecs%2Frv20.rs;h=333e91a08df53e81885425bd091eb12bf8b39173;hb=e6aaad5c5273cd814b5748b7faf3751835a37217;hp=88b1a600a265cb348d8f0264317ece12703acb6a;hpb=78fb6560c73965d834b215fb0b49505ae5443288;p=nihav.git diff --git a/nihav-realmedia/src/codecs/rv20.rs b/nihav-realmedia/src/codecs/rv20.rs index 88b1a60..333e91a 100644 --- a/nihav-realmedia/src/codecs/rv20.rs +++ b/nihav-realmedia/src/codecs/rv20.rs @@ -140,7 +140,7 @@ impl BlockDSP for RV20BlockDSP { 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(); @@ -169,7 +169,7 @@ impl BlockDSP for RV20BlockDSP { 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(); @@ -257,7 +257,7 @@ impl<'a> RealVideo20BR<'a> { let rl_cb = if sstate.is_iframe { &self.tables.aic_rl_cb } else { &self.tables.rl_cb }; let q = if plane_no == 0 { (quant * 2) as i16 } else { (H263_CHROMA_QUANT[quant as usize] * 2) as i16 }; - let q_add = if q == 0 || sstate.is_iframe { 0i16 } else { (((q >> 1) - 1) | 1) as i16 }; + let q_add = if q == 0 || sstate.is_iframe { 0i16 } else { ((q >> 1) - 1) | 1 }; while idx < 64 { let code = br.read_cb(rl_cb)?; let run; @@ -593,7 +593,7 @@ impl RealVideo20Decoder { h: 0, minor_ver: 0, rpr: RPRInfo { present: false, bits: 0, widths: [0; 8], heights: [0; 8] }, - bdsp: Box::new(RV20BlockDSP::default()), + bdsp: Box::::default(), base_ts: 0, last_ts: 0, next_ts: 0, @@ -626,7 +626,7 @@ impl NADecoder for RealVideo20Decoder { self.rpr.present = false; } else { self.rpr.present = true; - self.rpr.bits = ((rprb >> 1) + 1).min(3) as u8; + self.rpr.bits = ((rprb >> 1) + 1).min(3); let num_dim = ((src.len() - 8) / 2).min(self.rpr.widths.len() - 1); for i in 0..num_dim { self.rpr.widths [i] = (src[i * 2 + 8] as usize) * 4; @@ -702,6 +702,7 @@ mod test { let mut dec_reg = RegisteredDecoders::new(); realmedia_register_all_decoders(&mut dec_reg); + // sample from a private collection test_decoding("realmedia", "realvideo2", "assets/RV/rv20_svt_atrc_640x352_realproducer_plus_8.51.rm", Some(1000), &dmx_reg, &dec_reg, ExpectedTestResult::MD5Frames(vec![