X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;ds=sidebyside;f=nihav-indeo%2Fsrc%2Fcodecs%2Findeo3.rs;h=ea302abd3dc82f2e0296369c09f6e348f4af2565;hb=e64739f87a35f29be0bbbce366876180ba3eb57e;hp=c9296f6d1515ade6c91a1725fc325b613f301c9e;hpb=3bc2f5a46543f7c599bac482ef49f633ce4e15eb;p=nihav.git diff --git a/nihav-indeo/src/codecs/indeo3.rs b/nihav-indeo/src/codecs/indeo3.rs index c9296f6..ea302ab 100644 --- a/nihav-indeo/src/codecs/indeo3.rs +++ b/nihav-indeo/src/codecs/indeo3.rs @@ -732,8 +732,12 @@ impl NADecoder for Indeo3Decoder { validate!((width >= 16) && (width <= 640)); validate!((height >= 16) && (height <= 640)); validate!(((width & 3) == 0) && ((height & 3) == 0)); + let vinfo; if (self.bufs.width != (width as usize)) || (self.bufs.height != (height as usize)) { self.bufs.alloc(width as usize, height as usize); + vinfo = NAVideoInfo::new(width as usize, height as usize, false, formats::YUV410_FORMAT); + } else { + vinfo = self.info.get_properties().get_video_info().unwrap(); } self.width = width; self.height = height; @@ -759,9 +763,6 @@ impl NADecoder for Indeo3Decoder { if (uoff < vend) && (uoff > voff) { vend = uoff; } let intraframe = (flags & FLAG_KEYFRAME) != 0; - let vinfo = self.info.get_properties().get_video_info().unwrap(); - validate!((vinfo.get_width() & !3) == (self.width & !3).into()); - validate!((vinfo.get_height() & !3) == (self.height & !3).into()); let bufinfo = alloc_video_buffer(vinfo, 4)?; let mut buf = bufinfo.get_vbuf().unwrap(); let ystart = data_start + u64::from(yoff); @@ -800,8 +801,8 @@ mod test { use nihav_core::codecs::RegisteredDecoders; use nihav_core::demuxers::RegisteredDemuxers; use nihav_core::test::dec_video::*; - use crate::codecs::indeo_register_all_codecs; - use nihav_commonfmt::demuxers::generic_register_all_demuxers; + use crate::indeo_register_all_codecs; + use nihav_commonfmt::generic_register_all_demuxers; #[test] fn test_indeo3() { let mut dmx_reg = RegisteredDemuxers::new(); @@ -809,7 +810,19 @@ mod test { let mut dec_reg = RegisteredDecoders::new(); indeo_register_all_codecs(&mut dec_reg); - test_file_decoding("avi", "assets/Indeo/iv32_example.avi", Some(10), true, false, None, &dmx_reg, &dec_reg); + test_decoding("avi", "indeo3", "assets/Indeo/iv32_example.avi", Some(10), + &dmx_reg, &dec_reg, ExpectedTestResult::MD5Frames(vec![ + [0x90be698e, 0x326db071, 0x08e8c6a5, 0x39349acc], + [0x25d677fc, 0x63f96aaa, 0xd412ca98, 0x61416313], + [0xc4368250, 0x63e7b6bc, 0xffcff950, 0x11f13239], + [0x7e869758, 0x027abc2e, 0x25204bca, 0x93fbaa03], + [0x5a1e822c, 0x2b1a4cd5, 0x72059843, 0xe5689ad1], + [0x3a971cce, 0x5ec22135, 0x1a45f802, 0x0f5f9264], + [0x0a65f782, 0xd8767cf3, 0x878b4b8d, 0xfc94c88b], + [0x4ac70139, 0x3300eac1, 0xba84b068, 0x47f5ff29], + [0x3e8c8ec4, 0x9421b38c, 0x580abbbd, 0x92792d19], + [0x9096ee9b, 0x8dd9fb14, 0x981e31e3, 0x3ffd7d29], + [0x22dc71ec, 0x3d8f6f7e, 0x1a198982, 0x41d17ecc]])); } }