X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-duck%2Fsrc%2Fcodecs%2Fvp6.rs;h=82963fadb0a99b88d1c993ae0972687daf813f01;hb=9ceb80a2c9827c890a2e5cd49f81fab24634b2f8;hp=4bbe61fbe7031058cebabec741089fda7bd3b479;hpb=85d7efe32de798ace176528fd1072a63cff46562;p=nihav.git diff --git a/nihav-duck/src/codecs/vp6.rs b/nihav-duck/src/codecs/vp6.rs index 4bbe61f..82963fa 100644 --- a/nihav-duck/src/codecs/vp6.rs +++ b/nihav-duck/src/codecs/vp6.rs @@ -51,6 +51,7 @@ impl VP56Parser for VP6BR { } else { hdr.version = self.vpversion; hdr.profile = self.profile; + hdr.interlaced = self.interlaced; } if hdr.multistream || (hdr.profile == VP6_SIMPLE_PROFILE) { hdr.offset = br.read(16)? as u16; @@ -687,13 +688,7 @@ impl NADecoder for VP6Decoder { let fmt = if !self.has_alpha { YUV420_FORMAT } else { - NAPixelFormaton::new(ColorModel::YUV(YUVSubmodel::YUVJ), - Some(NAPixelChromaton::new(0, 0, false, 8, 0, 0, 1)), - Some(NAPixelChromaton::new(1, 1, false, 8, 0, 1, 1)), - Some(NAPixelChromaton::new(1, 1, false, 8, 0, 2, 1)), - Some(NAPixelChromaton::new(0, 0, false, 8, 0, 3, 1)), - None, - 0, 4) + VP_YUVA420_FORMAT }; let myvinfo = NAVideoInfo::new(vinfo.get_width(), vinfo.get_height(), false, fmt); let myinfo = NACodecTypeInfo::Video(myvinfo.clone()); @@ -742,16 +737,26 @@ mod test { let mut dec_reg = RegisteredDecoders::new(); duck_register_all_codecs(&mut dec_reg); - //let file = "assets/Duck/predator2_vp60.avi"; - //let file = "assets/Duck/predator2_vp61.avi"; - //let file = "assets/Duck/vp6_crash.avi"; - let file = "assets/Duck/vp6_interlaced.avi"; - //let file = "assets/Duck/vp6_vid.avi"; - //let file = "assets/Duck/selection_720x576_300kBit_vp60i.avi"; - //let file = "assets/Duck/selection_720x576_300kBit_flipped_vp60i.avi"; - test_file_decoding("avi", file, Some(17), true, false, None/*Some("vp6")*/, &dmx_reg, &dec_reg); -//panic!("end"); + test_decoding("avi", "vp6", "assets/Duck/selection_720x576_300kBit_vp60i.avi", Some(16), + &dmx_reg, &dec_reg, + ExpectedTestResult::MD5([0x042c3e96, 0x8a9b26a2, 0x4dcbaf66, 0x1b788d03])); } + #[test] + fn test_vp6_huff() { + let mut dmx_reg = RegisteredDemuxers::new(); + generic_register_all_demuxers(&mut dmx_reg); + let mut dec_reg = RegisteredDecoders::new(); + duck_register_all_codecs(&mut dec_reg); + + test_decoding("avi", "vp6", "assets/Duck/vp6_crash.avi", Some(4), + &dmx_reg, &dec_reg, ExpectedTestResult::MD5Frames(vec![ + [0xdcd70fa0, 0x0d075ce2, 0xc9e65077, 0xb003a92e], + [0x334abf96, 0x3a004c7a, 0x5781cd5c, 0x25c3ae5c], + [0x6164b851, 0x528cd8de, 0xecab7328, 0x4b49708a], + [0x11b048ac, 0xedb3e471, 0xd04e9399, 0x64e623e3], + [0x182871b1, 0x2146893a, 0x2912210e, 0x6dd592e8]])); + } + // todo find good sample for vp6a test } const VP6_AC_PROBS: [[[[u8; 11]; 6]; 2]; 3] = [