- fn decode_strip(&mut self, src: &[u8], is_intra: bool, is_intra_strip: bool, xoff: usize, yoff: usize, xend: usize, yend: usize, frm: &mut NASimpleVideoFrame<u8>) -> DecoderResult<()> {
+ fn decode_strip(&mut self, src: &[u8], sno: usize, is_intra: bool, is_intra_strip: bool, xoff: usize, yoff: usize, xend: usize, yend: usize, frm: &mut NASimpleVideoFrame<u8>) -> DecoderResult<()> {
- 0x20 => Self::read_cb (&mut br, size, &mut self.cb_v4, true)?,
- 0x21 => Self::read_cb_upd(&mut br, size, &mut self.cb_v4, true)?,
- 0x22 => Self::read_cb (&mut br, size, &mut self.cb_v1, true)?,
- 0x23 => Self::read_cb_upd(&mut br, size, &mut self.cb_v1, true)?,
- 0x24 => Self::read_cb (&mut br, size, &mut self.cb_v4, false)?,
- 0x25 => Self::read_cb_upd(&mut br, size, &mut self.cb_v4, false)?,
- 0x26 => Self::read_cb (&mut br, size, &mut self.cb_v1, false)?,
- 0x27 => Self::read_cb_upd(&mut br, size, &mut self.cb_v1, false)?,
+ 0x20 => Self::read_cb (&mut br, size, &mut self.cb_v4[sno], true)?,
+ 0x21 => Self::read_cb_upd(&mut br, size, &mut self.cb_v4[sno], true)?,
+ 0x22 => Self::read_cb (&mut br, size, &mut self.cb_v1[sno], true)?,
+ 0x23 => Self::read_cb_upd(&mut br, size, &mut self.cb_v1[sno], true)?,
+ 0x24 => Self::read_cb (&mut br, size, &mut self.cb_v4[sno], false)?,
+ 0x25 => Self::read_cb_upd(&mut br, size, &mut self.cb_v4[sno], false)?,
+ 0x26 => Self::read_cb (&mut br, size, &mut self.cb_v1[sno], false)?,
+ 0x27 => Self::read_cb_upd(&mut br, size, &mut self.cb_v1[sno], false)?,
block[ 0] = cb[0]; block[ 1] = cb[0]; block[ 2] = cb[1]; block[ 3] = cb[1];
block[ 4] = cb[0]; block[ 5] = cb[0]; block[ 6] = cb[1]; block[ 7] = cb[1];
block[ 8] = cb[2]; block[ 9] = cb[2]; block[10] = cb[3]; block[11] = cb[3];
block[ 0] = cb[0]; block[ 1] = cb[0]; block[ 2] = cb[1]; block[ 3] = cb[1];
block[ 4] = cb[0]; block[ 5] = cb[0]; block[ 6] = cb[1]; block[ 7] = cb[1];
block[ 8] = cb[2]; block[ 9] = cb[2]; block[10] = cb[3]; block[11] = cb[3];
block[ 0] = cb0[0]; block[ 1] = cb0[1]; block[ 2] = cb1[0]; block[ 3] = cb1[1];
block[ 4] = cb0[2]; block[ 5] = cb0[3]; block[ 6] = cb1[2]; block[ 7] = cb1[3];
block[ 8] = cb2[0]; block[ 9] = cb2[1]; block[10] = cb3[0]; block[11] = cb3[1];
block[ 0] = cb0[0]; block[ 1] = cb0[1]; block[ 2] = cb1[0]; block[ 3] = cb1[1];
block[ 4] = cb0[2]; block[ 5] = cb0[3]; block[ 6] = cb1[2]; block[ 7] = cb1[3];
block[ 8] = cb2[0]; block[ 9] = cb2[1]; block[10] = cb3[0]; block[11] = cb3[1];
- self.decode_strip(strip_data, is_intra, is_intra_strip, 0, last_y, xend, last_y + yend, &mut frm)?;
+ if is_intra && i > 0 {
+ self.cb_v1[i] = self.cb_v1[i - 1];
+ self.cb_v4[i] = self.cb_v4[i - 1];
+ }
+ self.decode_strip(strip_data, i, is_intra, is_intra_strip, 0, last_y, xend, last_y + yend, &mut frm)?;
use crate::generic_register_all_demuxers;
#[test]
fn test_cinepak() {
let mut dmx_reg = RegisteredDemuxers::new();
generic_register_all_demuxers(&mut dmx_reg);
let mut dec_reg = RegisteredDecoders::new();
use crate::generic_register_all_demuxers;
#[test]
fn test_cinepak() {
let mut dmx_reg = RegisteredDemuxers::new();
generic_register_all_demuxers(&mut dmx_reg);
let mut dec_reg = RegisteredDecoders::new();
test_decoding("avi", "cinepak", "assets/Misc/ot171.avi", Some(10), &dmx_reg,
&dec_reg, ExpectedTestResult::MD5Frames(vec![
[0xd58326b0, 0xdbfc1dcc, 0x6d66a04c, 0x08a21bbb],
test_decoding("avi", "cinepak", "assets/Misc/ot171.avi", Some(10), &dmx_reg,
&dec_reg, ExpectedTestResult::MD5Frames(vec![
[0xd58326b0, 0xdbfc1dcc, 0x6d66a04c, 0x08a21bbb],
test_decoding("mov", "cinepak", "assets/Misc/dday.mov", Some(10), &dmx_reg,
&dec_reg, ExpectedTestResult::MD5Frames(vec![
[0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
test_decoding("mov", "cinepak", "assets/Misc/dday.mov", Some(10), &dmx_reg,
&dec_reg, ExpectedTestResult::MD5Frames(vec![
[0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
- [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
- [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
- [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
- [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
- [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
- [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
- [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
- [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
- [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92],
+ [0x94f227d5, 0xbaa646ef, 0xab78f751, 0x8e1f50da],
+ [0x555de93a, 0x625e77f0, 0x95611bae, 0xbd715e9d],
+ [0xb31b9ba7, 0xba6327f8, 0x5698954f, 0xc16fad2a],
+ [0xda86ffb6, 0x58deb79d, 0x59f62c5b, 0x1bd2a2c5],
+ [0x2f46c7eb, 0x8950ac76, 0xbc68c470, 0x12e3247a],
+ [0x77d73950, 0xf76b28b0, 0x3552bb52, 0x38900a51],
+ [0xf4f45bef, 0x91146af2, 0xdcf4d44e, 0x713bf36e],
+ [0x8e06d350, 0x787f245e, 0x32426903, 0xf35f7dd3],
+ [0x0e35ebc1, 0xfdb6c520, 0x2bf484dc, 0xcec78b63],
test_decoding("mov", "cinepak", "assets/Misc/catfight Tag team DT.mov", Some(10), &dmx_reg,
&dec_reg, ExpectedTestResult::MD5Frames(vec![
[0x3f7ec8ea, 0x873a2bc6, 0xcc58336e, 0xe88c4ffd],
test_decoding("mov", "cinepak", "assets/Misc/catfight Tag team DT.mov", Some(10), &dmx_reg,
&dec_reg, ExpectedTestResult::MD5Frames(vec![
[0x3f7ec8ea, 0x873a2bc6, 0xcc58336e, 0xe88c4ffd],