X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-indeo%2Fsrc%2Fcodecs%2Findeo4.rs;h=ce6bc35632da07dccd3586cc0d6f732eb628b69a;hb=f2af8ecaeed8ec8c1fa6b3c2cfdb075d64994b7a;hp=6311dc9975a2584454d949c2225866f11bf6a01b;hpb=1678d59a37c619e7a3a2604f4bd23bb10c1769f6;p=nihav.git diff --git a/nihav-indeo/src/codecs/indeo4.rs b/nihav-indeo/src/codecs/indeo4.rs index 6311dc9..ce6bc35 100644 --- a/nihav-indeo/src/codecs/indeo4.rs +++ b/nihav-indeo/src/codecs/indeo4.rs @@ -1,5 +1,3 @@ -use std::rc::Rc; -use std::cell::{Ref, RefCell}; use nihav_core::io::bitreader::*; use nihav_core::formats; use nihav_core::frame::*; @@ -372,10 +370,10 @@ impl IndeoXParser for Indeo4Parser { let hh = (h / 2) as isize; let mut band0 = src.as_ptr(); let mut band1 = band0.offset(hw); - let mut band2 = band0.offset(((h / 2) * sstride) as isize); + let mut band2 = band0.add((h / 2) * sstride); let mut band3 = band2.offset(hw); let mut dst0 = dst.as_mut_ptr(); - let mut dst1 = dst0.offset(dstride as isize); + let mut dst1 = dst0.add(dstride); for _ in 0..hh { let mut b0_ptr = band0; let mut b1_ptr = band1; @@ -384,10 +382,10 @@ impl IndeoXParser for Indeo4Parser { let mut d0_ptr = dst0; let mut d1_ptr = dst1; for _ in 0..hw { - let p0 = *b0_ptr as i32; - let p1 = *b1_ptr as i32; - let p2 = *b2_ptr as i32; - let p3 = *b3_ptr as i32; + let p0 = i32::from(*b0_ptr); + let p1 = i32::from(*b1_ptr); + let p2 = i32::from(*b2_ptr); + let p3 = i32::from(*b3_ptr); let s0 = p0.wrapping_add(p2); let s1 = p1.wrapping_add(p3); let d0 = p0.wrapping_sub(p2); @@ -407,19 +405,19 @@ impl IndeoXParser for Indeo4Parser { d0_ptr = d0_ptr.offset(2); d1_ptr = d1_ptr.offset(2); } - band0 = band0.offset(sstride as isize); - band1 = band1.offset(sstride as isize); - band2 = band2.offset(sstride as isize); - band3 = band3.offset(sstride as isize); - dst0 = dst0.offset((dstride * 2) as isize); - dst1 = dst1.offset((dstride * 2) as isize); + band0 = band0.add(sstride); + band1 = band1.add(sstride); + band2 = band2.add(sstride); + band3 = band3.add(sstride); + dst0 = dst0.add(dstride * 2); + dst1 = dst1.add(dstride * 2); } } } } struct Indeo4Decoder { - info: Rc, + info: NACodecInfoRef, dec: IVIDecoder, } @@ -433,20 +431,20 @@ impl Indeo4Decoder { } impl NADecoder for Indeo4Decoder { - fn init(&mut self, info: Rc) -> DecoderResult<()> { + fn init(&mut self, _supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> { if let NACodecTypeInfo::Video(vinfo) = info.get_properties() { let w = vinfo.get_width(); let h = vinfo.get_height(); let f = vinfo.is_flipped(); let fmt = formats::YUV410_FORMAT; let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, f, 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 { 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(); let mut br = BitReader::new(src.as_slice(), src.len(), BitReaderMode::LE); @@ -455,7 +453,7 @@ impl NADecoder for Indeo4Decoder { let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo); frm.set_keyframe(self.dec.is_intra()); frm.set_frame_type(self.dec.get_frame_type()); - Ok(Rc::new(RefCell::new(frm))) + Ok(frm.into_ref()) } } @@ -760,7 +758,7 @@ const INDEO4_Q4_INTER: [&[u16; 16]; 5] = [ &INDEO4_QUANT4X4_INTER[3], &INDEO4_QUANT4X4_INTER[4] ]; -pub fn get_decoder() -> Box { +pub fn get_decoder() -> Box { Box::new(Indeo4Decoder::new()) }