X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-game%2Fsrc%2Fcodecs%2Fgremlinvideo.rs;h=7e91ea229b44d92593ffd876cff3cbd37568a5e9;hp=67be656be3596fdab79aeb0d7cfabbe00668241c;hb=78fb6560c73965d834b215fb0b49505ae5443288;hpb=f9be4e750dccff762b9a3d894faec50ffdb59233 diff --git a/nihav-game/src/codecs/gremlinvideo.rs b/nihav-game/src/codecs/gremlinvideo.rs index 67be656..7e91ea2 100644 --- a/nihav-game/src/codecs/gremlinvideo.rs +++ b/nihav-game/src/codecs/gremlinvideo.rs @@ -143,17 +143,17 @@ impl GremlinVideoDecoder { let mut sidx = PREAMBLE_SIZE; let mut didx = 0; - for i in 0..768 { dst[paloff + i] = self.pal[i]; } + dst[paloff..][..768].copy_from_slice(&self.pal); if !self.scale_v && !self.scale_h { for _ in 0..h { - for x in 0..w { dst[didx + x] = self.frame[sidx + x]; } + dst[didx..][..w].copy_from_slice(&self.frame[sidx..][..w]); sidx += w; didx += stride; } } else { for y in 0..h { if !self.scale_v { - for x in 0..w { dst[didx + x] = self.frame[sidx + x]; } + dst[didx..][..w].copy_from_slice(&self.frame[sidx..][..w]); } else { for x in 0..w { dst[didx + x] = self.frame[sidx + x/2]; } } @@ -247,6 +247,7 @@ impl GremlinVideoDecoder { Ok(()) } + #[allow(clippy::identity_op)] fn decode_method68(&mut self, br: &mut ByteReader, skip: usize, use8: bool) -> DecoderResult<()> { let mut bits = Bits32::new(); @@ -460,7 +461,13 @@ impl NADecoder for GremlinVideoDecoder { } } -pub fn get_decoder_video() -> Box { +impl NAOptionHandler for GremlinVideoDecoder { + fn get_supported_options(&self) -> &[NAOptionDefinition] { &[] } + fn set_options(&mut self, _options: &[NAOption]) { } + fn query_option_value(&self, _name: &str) -> Option { None } +} + +pub fn get_decoder_video() -> Box { Box::new(GremlinVideoDecoder::new()) } @@ -554,7 +561,13 @@ impl NADecoder for GremlinAudioDecoder { } } -pub fn get_decoder_audio() -> Box { +impl NAOptionHandler for GremlinAudioDecoder { + fn get_supported_options(&self) -> &[NAOptionDefinition] { &[] } + fn set_options(&mut self, _options: &[NAOption]) { } + fn query_option_value(&self, _name: &str) -> Option { None } +} + +pub fn get_decoder_audio() -> Box { Box::new(GremlinAudioDecoder::new()) } @@ -562,16 +575,28 @@ pub fn get_decoder_audio() -> Box { mod test { use nihav_core::codecs::RegisteredDecoders; use nihav_core::demuxers::RegisteredDemuxers; - use nihav_core::test::dec_video::test_file_decoding; - use crate::codecs::game_register_all_codecs; - use crate::demuxers::game_register_all_demuxers; + use nihav_codec_support::test::dec_video::*; + use crate::game_register_all_decoders; + use crate::game_register_all_demuxers; + + #[test] + fn test_gdv_video() { + let mut dmx_reg = RegisteredDemuxers::new(); + game_register_all_demuxers(&mut dmx_reg); + let mut dec_reg = RegisteredDecoders::new(); + game_register_all_decoders(&mut dec_reg); + + test_decoding("gdv", "gdv-video", "assets/Game/intro1.gdv", Some(10), &dmx_reg, &dec_reg, + ExpectedTestResult::MD5([0x7ea302bf, 0xc3e210cf, 0x6e341376, 0x9e976056])); + } #[test] - fn test_gdv() { + fn test_gdv_audio() { let mut dmx_reg = RegisteredDemuxers::new(); game_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - game_register_all_codecs(&mut dec_reg); + game_register_all_decoders(&mut dec_reg); - test_file_decoding("gdv", "assets/Game/intro1.gdv", Some(10), true, false, None, &dmx_reg, &dec_reg); + test_decoding("gdv", "gdv-audio", "assets/Game/intro1.gdv", None, &dmx_reg, &dec_reg, + ExpectedTestResult::MD5([0xd41d8cd9, 0x8f00b204, 0xe9800998, 0xecf8427e])); } }