X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fcodecs%2Fh263%2Fdecoder.rs;h=2a841ba0d6097511353636a57b94f5d2c076a43d;hb=23eeced96736873d96bcdab904cd21244643ed99;hp=a0e7ce4232cc6b42f4283c95db3b107b791b15df;hpb=b70cc0062fd4d791ee20f23439a3b08a04921835;p=nihav.git diff --git a/nihav-core/src/codecs/h263/decoder.rs b/nihav-core/src/codecs/h263/decoder.rs index a0e7ce4..2a841ba 100644 --- a/nihav-core/src/codecs/h263/decoder.rs +++ b/nihav-core/src/codecs/h263/decoder.rs @@ -162,8 +162,8 @@ impl H263BaseDecoder { last_ts: 0, next_ts: 0, tsdiff: 0, has_b: false, b_data: Vec::new(), pred_coeffs: Vec::new(), - is_gob: is_gob, slice_reset: slice_reset, - may_have_b_frames: may_have_b_frames, + is_gob, slice_reset, + may_have_b_frames, mv_data: Vec::new(), } } @@ -219,9 +219,7 @@ impl H263BaseDecoder { let fmt = formats::YUV420_FORMAT; let vinfo = NAVideoInfo::new(self.w, self.h, false, fmt); - let bufret = alloc_video_buffer(vinfo, 4); - if let Err(_) = bufret { return Err(DecoderError::InvalidData); } - let bufinfo = bufret.unwrap(); + let bufinfo = alloc_video_buffer(vinfo, 4)?; let mut buf = bufinfo.get_vbuf().unwrap(); let mut slice = if self.is_gob { @@ -524,20 +522,18 @@ impl H263BaseDecoder { } pub fn get_bframe(&mut self, bdsp: &BlockDSP) -> DecoderResult { - if !self.has_b || !self.ipbs.get_lastref().is_some() || !self.ipbs.get_nextref().is_some() { + if !self.has_b || self.ipbs.get_lastref().is_none() || self.ipbs.get_nextref().is_none() { return Err(DecoderError::MissingReference); } self.has_b = false; let fmt = formats::YUV420_FORMAT; let vinfo = NAVideoInfo::new(self.w, self.h, false, fmt); - let bufret = alloc_video_buffer(vinfo, 4); - if let Err(_) = bufret { return Err(DecoderError::InvalidData); } - let bufinfo = bufret.unwrap(); + let bufinfo = alloc_video_buffer(vinfo, 4)?; let mut b_buf = bufinfo.get_vbuf().unwrap(); if let (Some(ref bck_buf), Some(ref fwd_buf)) = (self.ipbs.get_nextref(), self.ipbs.get_lastref()) { - recon_b_frame(&mut b_buf, fwd_buf, bck_buf, self.mb_w, self.mb_h, &self.b_data, bdsp); + recon_b_frame(&mut b_buf, fwd_buf, bck_buf, self.mb_w, self.mb_h, self.b_data.as_slice(), bdsp); } self.b_data.truncate(0); @@ -546,7 +542,7 @@ impl H263BaseDecoder { } fn recon_b_frame(b_buf: &mut NAVideoBuffer, bck_buf: &NAVideoBuffer, fwd_buf: &NAVideoBuffer, - mb_w: usize, mb_h: usize, b_data: &Vec, bdsp: &BlockDSP) { + mb_w: usize, mb_h: usize, b_data: &[BMB], bdsp: &BlockDSP) { let mut cbpi = CBPInfo::new(); let mut cur_mb = 0; cbpi.reset(mb_w);