X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-commonfmt%2Fsrc%2Fcodecs%2Fcinepak.rs;h=d7a80dcade4e3b82ebcd8eaa4ec8ae57b355f45c;hb=792f490c44355c95e72d18010f7dc2c8c8449e59;hp=23903dd0417b7742899d2fbca298d1b023c73113;hpb=310cf8bdc1b89ab871a6e2b142a24b4bcfbde76e;p=nihav.git diff --git a/nihav-commonfmt/src/codecs/cinepak.rs b/nihav-commonfmt/src/codecs/cinepak.rs index 23903dd..d7a80dc 100644 --- a/nihav-commonfmt/src/codecs/cinepak.rs +++ b/nihav-commonfmt/src/codecs/cinepak.rs @@ -111,6 +111,7 @@ impl CinepakDecoder { let mut idx_pos = 0; let mut idx_size = 0; let mut v1_only = false; + let mut intra_mode = true; while br.left() > 0 { let id = br.read_byte()?; if (id & 0xF0) == 0x20 && is_intra_strip { @@ -136,6 +137,7 @@ impl CinepakDecoder { 0x31 => { // inter indices validate!(!is_intra); validate!(idx_pos == 0); + intra_mode = false; idx_pos = br.tell() as usize; idx_size = size - 4; br.read_skip(idx_size)?; @@ -161,7 +163,7 @@ impl CinepakDecoder { let mut flags = if !v1_only { br.read_u32be()? } else { 0x00000000 }; let mut mask = 1 << 31; while mask > 0 { - if !is_intra { + if !intra_mode { let skip = (flags & mask) == 0; mask >>= 1; if skip { @@ -413,6 +415,7 @@ mod test { generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); generic_register_all_decoders(&mut dec_reg); + // sample: https://samples.mplayerhq.hu/V-codecs/CVID/ot171.avi test_decoding("avi", "cinepak", "assets/Misc/ot171.avi", Some(10), &dmx_reg, &dec_reg, ExpectedTestResult::MD5Frames(vec![ [0xd58326b0, 0xdbfc1dcc, 0x6d66a04c, 0x08a21bbb], @@ -433,6 +436,7 @@ mod test { generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); generic_register_all_decoders(&mut dec_reg); + // sample: https://samples.mplayerhq.hu/V-codecs/CVID/grayscale/dday.mov test_decoding("mov", "cinepak", "assets/Misc/dday.mov", Some(10), &dmx_reg, &dec_reg, ExpectedTestResult::MD5Frames(vec![ [0x2ab229bc, 0xb71308aa, 0x979511c6, 0xcef3ea92], @@ -453,6 +457,7 @@ mod test { generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); generic_register_all_decoders(&mut dec_reg); + // sample: https://samples.mplayerhq.hu/V-codecs/CVID/palette/catfight%20Tag%20team%20DT.mov test_decoding("mov", "cinepak", "assets/Misc/catfight Tag team DT.mov", Some(10), &dmx_reg, &dec_reg, ExpectedTestResult::MD5Frames(vec![ [0x3f7ec8ea, 0x873a2bc6, 0xcc58336e, 0xe88c4ffd],