X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-ms%2Fsrc%2Fcodecs%2Fmsvideo1enc.rs;h=8a6281d6217718985cb00bbe8ba41586abce1a6e;hb=25fd05c73b167f37e58ec5601846f9b77e2d03a4;hp=5b130ff3c25e52f1f8ac157ce4807136671e3335;hpb=c8db9313866c4d7bcf34e45e486d2f909daa16d9;p=nihav.git diff --git a/nihav-ms/src/codecs/msvideo1enc.rs b/nihav-ms/src/codecs/msvideo1enc.rs index 5b130ff..8a6281d 100644 --- a/nihav-ms/src/codecs/msvideo1enc.rs +++ b/nihav-ms/src/codecs/msvideo1enc.rs @@ -6,7 +6,7 @@ use nihav_codec_support::vq::*; struct Pixel16(u16); impl Pixel16 { - fn unpack(&self) -> (u8, u8, u8) { + fn unpack(self) -> (u8, u8, u8) { (((self.0 >> 10) & 0x1F) as u8, ((self.0 >> 5) & 0x1F) as u8, (self.0 & 0x1F) as u8) } fn pack(r: u8, g: u8, b: u8) -> Self { @@ -50,7 +50,8 @@ impl VQElement for Pixel16 { for i in 0..31 { offs[i + 1] = offs[i] + counts[i]; } - let mut dst = vec![Pixel16(0); arr.len()]; + let mut dst = [Pixel16(0); 16]; + assert!(dst.len() >= arr.len()); for pix in arr.iter() { let (r, g, b) = pix.unpack(); let idx = match component { @@ -61,7 +62,8 @@ impl VQElement for Pixel16 { dst[offs[idx]] = *pix; offs[idx] += 1; } - arr.copy_from_slice(dst.as_slice()); + let len = arr.len(); + arr.copy_from_slice(&dst[..len]); } fn max_dist_component(min: &Self, max: &Self) -> usize { let (r0, g0, b0) = max.unpack(); @@ -409,7 +411,7 @@ impl NAEncoder for MSVideo1Encoder { ofmt.format = NACodecTypeInfo::Video(NAVideoInfo::new(0, 0, true, RGB555_FORMAT)); Ok(ofmt) }, - NACodecTypeInfo::Audio(_) => return Err(EncoderError::FormatError), + NACodecTypeInfo::Audio(_) => Err(EncoderError::FormatError), NACodecTypeInfo::Video(vinfo) => { let outinfo = NAVideoInfo::new((vinfo.width + 3) & !3, (vinfo.height + 3) & !3, true, RGB555_FORMAT); let mut ofmt = *encinfo; @@ -431,11 +433,11 @@ impl NAEncoder for MSVideo1Encoder { } let out_info = NAVideoInfo::new(vinfo.width, vinfo.height, true, RGB555_FORMAT); - let info = NACodecInfo::new("msvideo1", NACodecTypeInfo::Video(out_info.clone()), None); - let mut stream = NAStream::new(StreamType::Video, stream_id, info, encinfo.tb_num, encinfo.tb_den); + let info = NACodecInfo::new("msvideo1", NACodecTypeInfo::Video(out_info), None); + let mut stream = NAStream::new(StreamType::Video, stream_id, info, encinfo.tb_num, encinfo.tb_den, 0); stream.set_num(stream_id as usize); let stream = stream.into_ref(); - if let Err(_) = self.pool.prealloc_video(out_info, 2) { + if self.pool.prealloc_video(out_info, 2).is_err() { return Err(EncoderError::AllocError); } @@ -534,8 +536,8 @@ mod test { let mut dmx_reg = RegisteredDemuxers::new(); generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - generic_register_all_codecs(&mut dec_reg); - ms_register_all_codecs(&mut dec_reg); + generic_register_all_decoders(&mut dec_reg); + ms_register_all_decoders(&mut dec_reg); let mut mux_reg = RegisteredMuxers::new(); generic_register_all_muxers(&mut mux_reg); let mut enc_reg = RegisteredEncoders::new(); @@ -545,7 +547,7 @@ mod test { demuxer: "avi", in_name: "assets/Misc/TalkingHead_352x288.avi", stream_type: StreamType::Video, - limit: Some(32), + limit: Some(3), dmx_reg, dec_reg, }; let enc_config = EncoderTestParams { @@ -559,6 +561,7 @@ mod test { height: 0, format: RGB555_FORMAT, flipped: true, + bits: 16, }; let enc_params = EncodeParameters { format: NACodecTypeInfo::Video(dst_vinfo), @@ -568,6 +571,8 @@ mod test { tb_den: 0, flags: 0, }; - test_encoding_to_file(&dec_config, &enc_config, enc_params); + //test_encoding_to_file(&dec_config, &enc_config, enc_params); + test_encoding_md5(&dec_config, &enc_config, enc_params, + &[0x0fc27a11, 0x04337f5d, 0xb8037362, 0xc4f69d8b]); } }