level = code.get_level();
last = code.is_last();
if br.read_bool().unwrap() { level = -level; }
- level = (level * q) + q_add;
+ if (idx != 0) || !sstate.is_iframe {
+ level = (level * q) + q_add;
+ } else {
+ level = level * (H263_DC_SCALES[quant as usize] as i16);
+ }
} else {
last = br.read_bool().unwrap();
run = br.read(6).unwrap() as u8;
let top = br.read_s(6).unwrap() as i16;
level = (top << 5) | low;
}
- level = (level * q) + q_add;
+ if (idx != 0) || !sstate.is_iframe {
+ level = (level * q) + q_add;
+ } else {
+ level = level * (H263_DC_SCALES[quant as usize] as i16);
+ }
if level < -2048 { level = -2048; }
if level > 2047 { level = 2047; }
}
w = self.w;
h = self.h;
} else {
- w = self.rpr.widths[rpr];
- h = self.rpr.heights[rpr];
+ w = self.rpr.widths[rpr - 1];
+ h = self.rpr.heights[rpr - 1];
validate!((w != 0) && (h != 0));
}
} else {
self.rpr.present = false;
} else {
self.rpr.present = true;
- self.rpr.bits = rprb as u8;
+ self.rpr.bits = ((rprb >> 1) + 1) as u8;
for i in 4..(src.len()/2) {
self.rpr.widths [i - 4] = (src[i * 2] as usize) * 4;
self.rpr.heights[i - 4] = (src[i * 2 + 1] as usize) * 4;
}
Ok(())
} else {
-println!(".unwrap().unwrap().unwrap()");
Err(DecoderError::InvalidData)
}
}
use test::dec_video::test_file_decoding;
#[test]
fn test_rv20() {
- test_file_decoding("realmedia", "assets/RV/rv20_cook_640x352_realproducer_plus_8.51.rm", /*None*/Some(1000), true, false, Some("rv20"));
+ test_file_decoding("realmedia", "assets/RV/rv20_svt_atrc_640x352_realproducer_plus_8.51.rm", None, true, false, Some("rv20"));
+// test_file_decoding("realmedia", "assets/RV/rv20_cook_640x352_realproducer_plus_8.51.rm", /*None*/Some(1000), true, false, Some("rv20"));
}
}