X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-realmedia%2Fsrc%2Fcodecs%2Frv10.rs;h=be4c76d113366349742a2d461d3b6e5b178cd261;hb=f8b4bb7b585c736a76aabc2af6757978fce649ad;hp=93dcb39bade7cd96ec0a5723b0fad9fd30dc3b68;hpb=4cb54b21adce43aa8656f1f240ec53c9a41c6007;p=nihav.git diff --git a/nihav-realmedia/src/codecs/rv10.rs b/nihav-realmedia/src/codecs/rv10.rs index 93dcb39..be4c76d 100644 --- a/nihav-realmedia/src/codecs/rv10.rs +++ b/nihav-realmedia/src/codecs/rv10.rs @@ -258,6 +258,7 @@ impl<'a> BlockDecoder for RealVideo10BR<'a> { if dquant { let idx = br.read(2)? as usize; q = ((q as i16) + (H263_DQUANT_TAB[idx] as i16)) as u8; + validate!(q < 32); } Ok(BlockInfo::new(Type::I, cbp, q)) }, @@ -276,6 +277,7 @@ impl<'a> BlockDecoder for RealVideo10BR<'a> { if dquant { let idx = br.read(2)? as usize; q = ((q as i16) + (H263_DQUANT_TAB[idx] as i16)) as u8; + validate!(q < 32); } let binfo = BlockInfo::new(Type::I, cbp, q); return Ok(binfo); @@ -289,6 +291,7 @@ impl<'a> BlockDecoder for RealVideo10BR<'a> { if dquant { let idx = br.read(2)? as usize; q = ((q as i16) + (H263_DQUANT_TAB[idx] as i16)) as u8; + validate!(q < 32); } let mut binfo = BlockInfo::new(Type::P, cbp, q); if !is_4x4 { @@ -431,6 +434,9 @@ impl NADecoder for RealVideo10Decoder { println!("ver {:06X} -> {}", ver, mic_ver); validate!(maj_ver == 1); self.new_ver = mic_ver > 1; + if mic_ver == 2 { + self.dec = H263BaseDecoder::new_with_opts(H263DEC_OPT_HAS_OBMC); + } if (src[3] & 1) != 0 { self.mvmode = MVMode::UMV; }