X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-rad%2Fsrc%2Fcodecs%2Fbink2.rs;h=9ae02a710468ddaa349d0f004dc1e2d526557424;hp=8c094789b460b3549c041883b6f68ccb71173712;hb=78fb6560c73965d834b215fb0b49505ae5443288;hpb=7e6086e50dce8780e59c8d9c0d2d74aa25aaae9e diff --git a/nihav-rad/src/codecs/bink2.rs b/nihav-rad/src/codecs/bink2.rs index 8c09478..9ae02a7 100644 --- a/nihav-rad/src/codecs/bink2.rs +++ b/nihav-rad/src/codecs/bink2.rs @@ -4,6 +4,7 @@ use nihav_core::io::byteio::*; use nihav_core::io::bitreader::*; use nihav_core::io::codebook::*; use nihav_core::io::intcode::*; +use nihav_codec_support::codecs::{IPShuffler, MV, ZERO_MV}; macro_rules! mktag { ($a:expr, $b:expr, $c:expr, $d:expr) => ({ @@ -278,7 +279,7 @@ impl Bink2DSP { 0 => { let src = &ppix[poff..]; for (out, row) in dst.chunks_mut(stride).take(16).zip(src.chunks(pstride)) { - for i in 0..16 { out[i] = row[i]; } + out[..16].copy_from_slice(&row[..16]); } }, 1 => { @@ -337,7 +338,7 @@ impl Bink2DSP { if (mx == 0) && (my == 0) { let inpix = &ppix[poff..]; for (out, src) in dst.chunks_mut(stride).take(8).zip(inpix.chunks(pstride)) { - for i in 0..8 { out[i] = src[i]; } + out[..8].copy_from_slice(&src[..8]); } } else if my == 0 { chroma_interp!(dst, stride, 8, u8, &ppix[poff..], pstride, 1, mx, 2); @@ -973,7 +974,7 @@ struct Bink2Codes { } fn map_ac(idx: usize) -> u8 { idx as u8 } -fn map_mv(idx: usize) -> i8 { BINK2_MV_SYMS[idx] } +fn map_mv(idx: usize) -> i8 { BINK2_MV_SYMS[idx] } impl Default for Bink2Codes { fn default() -> Self { @@ -1026,6 +1027,7 @@ impl Bink2Decoder { Self::default() } + #[allow(clippy::cyclomatic_complexity)] fn decode_frame_new(&mut self, br: &mut BitReader, buf: &mut NAVideoBuffer, is_intra: bool) -> DecoderResult<()> { let (stride_y, stride_u, stride_v, stride_a) = (buf.get_stride(0), buf.get_stride(1), buf.get_stride(2), buf.get_stride(3)); let (mut off_y, mut off_u, mut off_v, mut off_a) = (buf.get_offset(0), buf.get_offset(1), buf.get_offset(2), buf.get_offset(3)); @@ -1921,7 +1923,7 @@ impl NADecoder for Bink2Decoder { fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult { let src = pkt.get_buffer(); - let mut br = BitReader::new(&src, src.len(), BitReaderMode::LE); + let mut br = BitReader::new(&src, BitReaderMode::LE); let mut buf; self.key_frame = pkt.is_keyframe(); @@ -1937,9 +1939,18 @@ impl NADecoder for Bink2Decoder { frm.set_frame_type(if self.key_frame { FrameType::I } else { FrameType::P }); Ok(frm.into_ref()) } + fn flush(&mut self) { + self.ips.clear(); + } +} + +impl NAOptionHandler for Bink2Decoder { + 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 { +pub fn get_decoder() -> Box { Box::new(Bink2Decoder::new()) } @@ -1947,15 +1958,15 @@ pub fn get_decoder() -> Box { mod test { use nihav_core::codecs::RegisteredDecoders; use nihav_core::demuxers::RegisteredDemuxers; - use nihav_core::test::dec_video::*; - use crate::codecs::rad_register_all_codecs; - use crate::demuxers::rad_register_all_demuxers; + use nihav_codec_support::test::dec_video::*; + use crate::rad_register_all_decoders; + use crate::rad_register_all_demuxers; #[test] fn test_bink2() { let mut dmx_reg = RegisteredDemuxers::new(); rad_register_all_demuxers(&mut dmx_reg); let mut dec_reg = RegisteredDecoders::new(); - rad_register_all_codecs(&mut dec_reg); + rad_register_all_decoders(&mut dec_reg); //let file = "assets/RAD/Open_Logos_partial.bik"; //let file = "assets/RAD/sc13_01_partial.bk2";