X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-game%2Fsrc%2Fcodecs%2Fvmd.rs;h=1f4964e7d2d9f487ce2faf514fbec8f51ad2a5c3;hb=e64739f87a35f29be0bbbce366876180ba3eb57e;hp=ea6c31dad92d84105ebe01fc1546c06a0a660d57;hpb=6011e20199143f519881660144a4ca95ba77fd2d;p=nihav.git diff --git a/nihav-game/src/codecs/vmd.rs b/nihav-game/src/codecs/vmd.rs index ea6c31d..1f4964e 100644 --- a/nihav-game/src/codecs/vmd.rs +++ b/nihav-game/src/codecs/vmd.rs @@ -142,7 +142,7 @@ fn decode_frame_data(br: &mut ByteReader, dst: &mut [u8], mut dpos: usize, strid } Ok(false) }, - _ => return Err(DecoderError::InvalidData), + _ => Err(DecoderError::InvalidData), } } @@ -202,7 +202,7 @@ impl VMDVideoDecoder { let method = br.read_byte()?; let is_intra; if (method & 0x80) != 0 { - validate!(self.buf.len() > 0); + validate!(!self.buf.is_empty()); lz_unpack(br, &mut self.buf)?; let mut mr = MemoryReader::new_read(&self.buf); let mut buf_br = ByteReader::new(&mut mr); @@ -251,9 +251,7 @@ impl NADecoder for VMDVideoDecoder { if let Some(bbuf) = bufret { buf = bbuf; } else { - let bufret = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 4); - if let Err(_) = bufret { return Err(DecoderError::InvalidData); } - let bufinfo = bufret.unwrap(); + let bufinfo = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 4)?; buf = bufinfo.get_vbuf().unwrap(); self.hams.add_frame(buf); buf = self.hams.get_output_frame().unwrap(); @@ -266,10 +264,13 @@ impl NADecoder for VMDVideoDecoder { frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P }); Ok(frm.into_ref()) } + fn flush(&mut self) { + self.hams.clear(); + } } -pub fn get_decoder_video() -> Box { +pub fn get_decoder_video() -> Box { Box::new(VMDVideoDecoder::new()) } @@ -324,7 +325,7 @@ impl VMDAudioDecoder { } else { let mut pred: [i32; 2] = [0; 2]; for ch in 0..channels { - pred[ch] = br.read_u16le()? as i32; + pred[ch] = i32::from(br.read_u16le()?); dst[off[ch]] = pred[ch] as i16; off[ch] += 1; } @@ -333,9 +334,9 @@ impl VMDAudioDecoder { for _ in channels..self.blk_align*channels { let b = br.read_byte()? as usize; if (b & 0x80) != 0 { - pred[ch] -= SOL_AUD_STEPS16[b & 0x7F] as i32; + pred[ch] -= i32::from(SOL_AUD_STEPS16[b & 0x7F]); } else { - pred[ch] += SOL_AUD_STEPS16[b & 0x7F] as i32; + pred[ch] += i32::from(SOL_AUD_STEPS16[b & 0x7F]); } //pred[ch] = pred[ch].max(-32768).min(32767); dst[off[ch]] = pred[ch] as i16; @@ -438,9 +439,11 @@ impl NADecoder for VMDAudioDecoder { Err(DecoderError::InvalidData) } } + fn flush(&mut self) { + } } -pub fn get_decoder_audio() -> Box { +pub fn get_decoder_audio() -> Box { Box::new(VMDAudioDecoder::new()) } @@ -449,8 +452,8 @@ mod test { use nihav_core::codecs::RegisteredDecoders; use nihav_core::demuxers::RegisteredDemuxers; use nihav_core::test::dec_video::*; - use crate::codecs::game_register_all_codecs; - use crate::demuxers::game_register_all_demuxers; + use crate::game_register_all_codecs; + use crate::game_register_all_demuxers; #[test] fn test_vmd_video() { let mut dmx_reg = RegisteredDemuxers::new(); @@ -473,6 +476,6 @@ mod test { let file = "assets/Game/128.vmd"; // let file = "assets/Game/1000.VMD"; // let file = "assets/Game/235.VMD"; - test_decode_audio("vmd", file, None, "vmd", &dmx_reg, &dec_reg); + test_decode_audio("vmd", file, None, None/*Some("vmd")*/, &dmx_reg, &dec_reg); } }