X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-ms%2Fsrc%2Fcodecs%2Fmsvideo1.rs;h=2fb77130cb2ce84c18f99e810857651e9efeba3e;hp=b7bea58439286ed50102b0787067e0e7d136c58d;hb=78fb6560c73965d834b215fb0b49505ae5443288;hpb=4abcd84283e5d7168cc495e41cbc443710bfbd5e diff --git a/nihav-ms/src/codecs/msvideo1.rs b/nihav-ms/src/codecs/msvideo1.rs index b7bea58..2fb7713 100644 --- a/nihav-ms/src/codecs/msvideo1.rs +++ b/nihav-ms/src/codecs/msvideo1.rs @@ -2,36 +2,6 @@ use nihav_core::codecs::*; use nihav_core::io::byteio::*; use nihav_codec_support::codecs::HAMShuffler; -struct HAMShuffler16 { - lastframe: Option>, -} - -impl HAMShuffler16 { - fn clear(&mut self) { self.lastframe = None; } - fn add_frame(&mut self, buf: NAVideoBufferRef) { - self.lastframe = Some(buf); - } - fn clone_ref(&mut self) -> Option> { - if let Some(ref mut frm) = self.lastframe { - let newfrm = frm.copy_buffer(); - *frm = newfrm.clone().into_ref(); - Some(newfrm.into_ref()) - } else { - None - } - } - fn get_output_frame(&mut self) -> Option> { - match self.lastframe { - Some(ref frm) => Some(frm.clone()), - None => None, - } - } -} - -impl Default for HAMShuffler16 { - fn default() -> Self { Self { lastframe: None } } -} - const RGB555_FORMAT: NAPixelFormaton = NAPixelFormaton { model: ColorModel::RGB(RGBSubmodel::RGB), components: 3, comp_info: [ @@ -44,8 +14,8 @@ const RGB555_FORMAT: NAPixelFormaton = NAPixelFormaton { #[derive(Default)] struct Video1Decoder { info: NACodecInfoRef, - hams: HAMShuffler, - hams16: HAMShuffler16, + hams: HAMShuffler, + hams16: HAMShuffler, width: usize, height: usize, is_16bit: bool, @@ -192,7 +162,6 @@ impl Video1Decoder { impl NADecoder for Video1Decoder { fn init(&mut self, _supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> { if let NACodecTypeInfo::Video(vinfo) = info.get_properties() { -println!("fmt {}", vinfo.get_format()); self.is_16bit = !vinfo.get_format().palette; let fmt = if !self.is_16bit { PAL8_FORMAT } else { RGB555_FORMAT }; self.width = vinfo.get_width(); @@ -205,6 +174,7 @@ println!("fmt {}", vinfo.get_format()); Err(DecoderError::InvalidData) } } + #[allow(clippy::identity_op)] fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult { let src = pkt.get_buffer(); validate!(src.len() >= 2); @@ -278,6 +248,12 @@ if !found_pal { } } +impl NAOptionHandler for Video1Decoder { + 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() -> Box { Box::new(Video1Decoder::new()) } @@ -287,14 +263,14 @@ mod test { use nihav_core::codecs::RegisteredDecoders; use nihav_core::demuxers::RegisteredDemuxers; use nihav_codec_support::test::dec_video::*; - use crate::ms_register_all_codecs; + use crate::ms_register_all_decoders; use nihav_commonfmt::generic_register_all_demuxers; #[test] fn test_ms_video1_8bit() { let mut dmx_reg = RegisteredDemuxers::new(); generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - ms_register_all_codecs(&mut dec_reg); + ms_register_all_decoders(&mut dec_reg); test_decoding("avi", "msvideo1", "assets/MS/toon.avi", Some(66), &dmx_reg, &dec_reg, ExpectedTestResult::MD5([0x0c26ec42, 0xb75bfea7, 0x1e6342ae, 0xb14dcfa3])); @@ -304,7 +280,7 @@ mod test { let mut dmx_reg = RegisteredDemuxers::new(); generic_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - ms_register_all_codecs(&mut dec_reg); + ms_register_all_decoders(&mut dec_reg); test_decoding("avi", "msvideo1", "assets/MS/clock-cram16.avi", None, &dmx_reg, &dec_reg, ExpectedTestResult::MD5([0x03381fa4, 0x5b294fec, 0xb97a7575, 0xa1a3ffe9]));