X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-game%2Fsrc%2Fcodecs%2Fbmv.rs;h=79b8745b17cdd529017e9e2e74b240eb5bc39355;hp=cea10eb272784e045b06d06dc447112678c44bb0;hb=2422d9699cd56cbb86ac32b3e8dd026e20a89db5;hpb=9067c1f81447fe27bfa7e292e2dd21b29f5959cd diff --git a/nihav-game/src/codecs/bmv.rs b/nihav-game/src/codecs/bmv.rs index cea10eb..79b8745 100644 --- a/nihav-game/src/codecs/bmv.rs +++ b/nihav-game/src/codecs/bmv.rs @@ -101,16 +101,15 @@ impl<'a> BMVWriter<'a> { } struct BMVVideoDecoder { - info: Rc, + info: NACodecInfoRef, pal: [u8; 768], frame: [u8; FRAME_W * FRAME_H], } impl BMVVideoDecoder { fn new() -> Self { - let dummy_info = Rc::new(DUMMY_CODEC_INFO); Self { - info: dummy_info, pal: [0; 768], frame: [0; FRAME_W * FRAME_H], + info: NACodecInfoRef::default(), pal: [0; 768], frame: [0; FRAME_W * FRAME_H], } } fn decode_frame(&mut self, src: &[u8], bufinfo: &mut NABufferType, line: i16) -> DecoderResult<()> { @@ -118,7 +117,7 @@ impl BMVVideoDecoder { let mut buf = bufo.unwrap(); let paloff = buf.get_offset(1); let stride = buf.get_stride(0); - let mut data = buf.get_data_mut(); + let data = buf.get_data_mut().unwrap(); let dst = data.as_mut_slice(); let fwd = (line <= -640) || (line >= 0); @@ -170,7 +169,7 @@ impl BMVVideoDecoder { } impl NADecoder for BMVVideoDecoder { - fn init(&mut self, info: Rc) -> DecoderResult<()> { + fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> { if let NACodecTypeInfo::Video(_vinfo) = info.get_properties() { let fmt = NAPixelFormaton::new(ColorModel::RGB(RGBSubmodel::RGB), Some(NAPixelChromaton::new(0, 0, true, 8, 0, 0, 3)), @@ -179,7 +178,7 @@ impl NADecoder for BMVVideoDecoder { None, None, FORMATON_FLAG_PALETTE, 3); let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(FRAME_W, FRAME_H, false, fmt)); - self.info = Rc::new(NACodecInfo::new_ref(info.get_name(), myinfo, info.get_extradata())); + self.info = NACodecInfo::new_ref(info.get_name(), myinfo, info.get_extradata()).into_ref(); Ok(()) } else { @@ -258,7 +257,7 @@ fn scale_sample(samp: u8, scale: i32) -> i16 { } impl NADecoder for BMVAudioDecoder { - fn init(&mut self, info: Rc) -> DecoderResult<()> { + fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> { if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() { self.ainfo = NAAudioInfo::new(ainfo.get_sample_rate(), ainfo.get_channels(), formats::SND_S16P_FORMAT, 32); self.chmap = NAChannelMap::from_str("L,R").unwrap(); @@ -275,10 +274,10 @@ impl NADecoder for BMVAudioDecoder { let nblocks = pktbuf[0] as usize; validate!(pktbuf.len() == 1 + 65 * nblocks); let samples = nblocks * 32; - let mut abuf = alloc_audio_buffer(self.ainfo, samples, self.chmap.clone())?; + let abuf = alloc_audio_buffer(self.ainfo, samples, self.chmap.clone())?; let mut adata = abuf.get_abuf_i16().unwrap(); let off1 = adata.get_offset(1); - let mut dst = adata.get_data_mut(); + let dst = adata.get_data_mut().unwrap(); let psrc = &pktbuf[1..]; for (n, src) in psrc.chunks_exact(65).enumerate() { let code = src[0].rotate_right(1); @@ -320,9 +319,9 @@ mod test { let mut dec_reg = RegisteredDecoders::new(); game_register_all_codecs(&mut dec_reg); -// let file = "assets/PERFECT.BMV"; -// let file = "assets/DW2-MOUSE.BMV"; - let file = "assets/WILDCAT.BMV"; +// let file = "assets/Game/PERFECT.BMV"; +// let file = "assets/Game/DW2-MOUSE.BMV"; + let file = "assets/Game/WILDCAT.BMV"; test_file_decoding("bmv", file, Some(40), true, false, None, &dmx_reg, &dec_reg); } #[test] @@ -332,9 +331,9 @@ mod test { let mut dec_reg = RegisteredDecoders::new(); game_register_all_codecs(&mut dec_reg); - let file = "assets/PERFECT.BMV"; -// let file = "assets/DW2-MOUSE.BMV"; -// let file = "assets/WILDCAT.BMV"; + let file = "assets/Game/PERFECT.BMV"; +// let file = "assets/Game/DW2-MOUSE.BMV"; +// let file = "assets/Game/WILDCAT.BMV"; test_decode_audio("bmv", file, None, "bmv", &dmx_reg, &dec_reg); } }