X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-duck%2Fsrc%2Fcodecs%2Ftruemotion1.rs;h=44ff668f6ba1d02370d56c07826eab8f4ffb75ba;hb=8a7352c04dd848eea6519f0d775d98d547b90a39;hp=c205b3cb9fee5fa51952f836338d60ecc4cb4fd5;hpb=3fc28ece6664a34af9b7f6a52dbf8a8809fa9204;p=nihav.git diff --git a/nihav-duck/src/codecs/truemotion1.rs b/nihav-duck/src/codecs/truemotion1.rs index c205b3c..44ff668 100644 --- a/nihav-duck/src/codecs/truemotion1.rs +++ b/nihav-duck/src/codecs/truemotion1.rs @@ -203,7 +203,7 @@ impl TM1Decoder { let cfdt = DUCK_C_FAT_DELTAS[delta_set]; let vec = DUCK_VECTABLES[table_idx - 1]; - let mut vec_iter = vec.into_iter(); + let mut vec_iter = vec.iter(); for i in 0..256 { let len = (*vec_iter.next().unwrap() as usize) >> 1; for j in 0..len { @@ -315,9 +315,9 @@ impl TM1Decoder { _ => unreachable!(), }; } else { - let cur = (dst[off + x + 0] as u32) | ((dst[off + x + 1] as u32) << 16); + let cur = u32::from(dst[off + x + 0]) | (u32::from(dst[off + x + 1]) << 16); self.vert_pred[(x >> 1) + 0] = cur; - let cur = (dst[off + x + 2] as u32) | ((dst[off + x + 3] as u32) << 16); + let cur = u32::from(dst[off + x + 2]) | (u32::from(dst[off + x + 3]) << 16); hor_pred = cur.wrapping_sub(self.vert_pred[(x >> 1) + 1]); self.vert_pred[(x >> 1) + 1] = cur; } @@ -490,15 +490,15 @@ impl TM1Decoder { _ => unreachable!(), }; } else { - let cur = (dst[off + x*4 + 0] as u32) - | ((dst[off + x*4 + 1] as u32) << 8) - | ((dst[off + x*4 + 2] as u32) << 16) - | ((dst[off + x*4 + 3] as u32) << 24); + let cur = u32::from(dst[off + x*4 + 0]) + | (u32::from(dst[off + x*4 + 1]) << 8) + | (u32::from(dst[off + x*4 + 2]) << 16) + | (u32::from(dst[off + x*4 + 3]) << 24); self.vert_pred[x + 0] = cur; - let cur = (dst[off + x*4 + 4] as u32) - | ((dst[off + x*4 + 5] as u32) << 8) - | ((dst[off + x*4 + 6] as u32) << 16) - | ((dst[off + x*4 + 7] as u32) << 24); + let cur = u32::from(dst[off + x*4 + 4]) + | (u32::from(dst[off + x*4 + 5]) << 8) + | (u32::from(dst[off + x*4 + 6]) << 16) + | (u32::from(dst[off + x*4 + 7]) << 24); hor_pred = cur.wrapping_sub(self.vert_pred[x + 1]); self.vert_pred[x + 1] = cur; } @@ -515,7 +515,7 @@ impl TM1Decoder { } impl NADecoder for TM1Decoder { - fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> { + fn init(&mut self, _supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> { if let NACodecTypeInfo::Video(vinfo) = info.get_properties() { let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(vinfo.get_width(), vinfo.get_height(), false, YUV410_FORMAT)); self.info = NACodecInfo::new_ref(info.get_name(), myinfo, info.get_extradata()).into_ref(); @@ -524,7 +524,7 @@ impl NADecoder for TM1Decoder { Err(DecoderError::InvalidData) } } - fn decode(&mut self, pkt: &NAPacket) -> DecoderResult { + fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult { let src = pkt.get_buffer(); validate!(src.len() > 10); let hdr_size = (src[0].rotate_left(3) & 0x7F) as usize; @@ -605,9 +605,7 @@ impl NADecoder for TM1Decoder { if is_intra || is_sprite { let fmt = if is_24bit { BGR0_FORMAT } else { RGB555_FORMAT }; let myinfo = NAVideoInfo::new(out_width, height, false, fmt); - let bufret = alloc_video_buffer(myinfo, 2); - if let Err(_) = bufret { return Err(DecoderError::InvalidData); } - let bufinfo = bufret.unwrap(); + let bufinfo = alloc_video_buffer(myinfo, 2)?; self.lastframe.reset(); if !is_24bit { self.lastframe.set16(bufinfo.get_vbuf16().unwrap()); @@ -640,17 +638,15 @@ impl NADecoder for TM1Decoder { } else { return Err(DecoderError::MissingReference); } - } else { - if let Some(mut buf) = self.lastframe.get24() { - let stride = buf.get_stride(0); - { - let data = buf.get_data_mut().unwrap(); - self.decode_24bit(data.as_mut_slice(), stride, out_width, height, &mut mask, &mut index)?; - } - bufinfo = NABufferType::VideoPacked(buf); - } else { - return Err(DecoderError::MissingReference); + } else if let Some(mut buf) = self.lastframe.get24() { + let stride = buf.get_stride(0); + { + let data = buf.get_data_mut().unwrap(); + self.decode_24bit(data.as_mut_slice(), stride, out_width, height, &mut mask, &mut index)?; } + bufinfo = NABufferType::VideoPacked(buf); + } else { + return Err(DecoderError::MissingReference); } let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo); @@ -660,7 +656,7 @@ impl NADecoder for TM1Decoder { } } -pub fn get_decoder() -> Box { +pub fn get_decoder() -> Box { Box::new(TM1Decoder::new()) }