]> git.nihav.org Git - nihav.git/blobdiff - nihav-core/src/codecs/h263/decoder.rs
core/frame: remove unneeded FrameFromPacket trait
[nihav.git] / nihav-core / src / codecs / h263 / decoder.rs
index fd828fe09a7c1e1db4c8970d1d38aef51287a99e..494c0e353e4ce2f959232ddeb465105e9c5415c0 100644 (file)
@@ -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 mut bufinfo = bufret.unwrap();
+        let bufinfo = alloc_video_buffer(vinfo, 4)?;
         let mut buf = bufinfo.get_vbuf().unwrap();
 
         let mut slice = if self.is_gob {
@@ -522,22 +520,23 @@ impl H263BaseDecoder {
 
         Ok(bufinfo)
     }
+    pub fn flush(&mut self) {
+        self.ipbs.clear();
+    }
 
     pub fn get_bframe(&mut self, bdsp: &BlockDSP) -> DecoderResult<NABufferType> {
-        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 mut 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 +545,7 @@ impl H263BaseDecoder {
 }
 
 fn recon_b_frame(b_buf: &mut NAVideoBuffer<u8>, bck_buf: &NAVideoBuffer<u8>, fwd_buf: &NAVideoBuffer<u8>,
-                 mb_w: usize, mb_h: usize, b_data: &Vec<BMB>, 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);