for plane in self.cframe.plane.iter() {
checksum ^= plane.checksum();
}
- write_u16le(&mut dbuf[26..], checksum)?;
+ write_u16le(&mut dbuf[26..], checksum * 2)?;
let size = (dbuf.len() - OS_HEADER_SIZE) as u32;
write_u32le(&mut dbuf[8..], self.frameno ^ HDR_FIELD_2 ^ FRMH_TAG ^ size)?;
// prepare plane data structure
for &planeno in PLANE_ORDER.iter() {
let ref_plane = &self.pframe.plane[planeno];
- let tree = self.cframe.plane[planeno].find_cells(is_intra, ref_plane, &self.mv_est);
+ let mut tree = self.cframe.plane[planeno].find_cells(is_intra, ref_plane, &self.mv_est);
if self.debug_tree {
println!(" tree for plane {}:", planeno);
tree.print();
}
- trees.push(tree);
let mvs = &mut self.cframe.plane[planeno].mvs;
- compact_mvs(mvs);
+ if mvs.len() > 256 {
+ compact_mvs(mvs);
+ self.cframe.plane[planeno].prune_extra_mvs(&mut tree);
+ }
+ trees.push(tree);
}
self.encode_planes(&mut dbuf, &trees, is_intra)?;
let enc_options = &[
NAOption { name: super::TRY_AGAIN_OPTION, value: NAValue::Bool(true) },
];
- encode_test("indeo3.avi", enc_options, Some(4), &[0x4cc927d3, 0x9872f824, 0x92dee9cb, 0xaf912ecc]);
+ encode_test("indeo3.avi", enc_options, Some(4), &[0xc23464a1, 0xd319a38f, 0x7421165e, 0x42786e50]);
}
/*#[test]
fn test_indeo3_roundtrip() {
}
let info = NACodecInfo::new("indeo3", NACodecTypeInfo::Video(dst_vinfo), None).into_ref();
let frm = NAFrame::new(NATimeInfo::new(Some(0), None, None, 1, 12), FrameType::I, true, info.clone(), buffer);
+ //ienc.set_options(&[NAOption{ name: super::DEBUG_FRAME_OPTION, value: NAValue::Bool(true) }]);
ienc.encode(&frm).unwrap();
let pkt = ienc.get_packet().unwrap().unwrap();
println!(" pkt size {}", pkt.get_buffer().len());
let mut dec = (decfunc)();
let mut dsupp = Box::new(NADecoderSupport::new());
dec.init(&mut dsupp, info).unwrap();
+ dec.set_options(&[NAOption{ name: "checksum", value: NAValue::Bool(true) }]);
let dst = dec.decode(&mut dsupp, &pkt).unwrap();
if let NABufferType::Video(ref vbuf) = dst.get_buffer() {
for plane in 0..3 {