]> git.nihav.org Git - nihav.git/blobdiff - nihav-itu/src/codecs/h264/mod.rs
h264: cache frame width/height
[nihav.git] / nihav-itu / src / codecs / h264 / mod.rs
index df46760a08c4945d46b1e2be83546cda51b27f64..a0a94a4e3095c91a46de0a137871278474e291f2 100644 (file)
@@ -187,7 +187,7 @@ struct H264Decoder {
 
     ipcm_buf:   [u8; 256 + 64 + 64],
 
-    avg_buf:    NAVideoBufferRef<u8>,
+    mc_dsp:     H264MC,
 
     transform_8x8_mode: bool,
 }
@@ -254,7 +254,7 @@ impl H264Decoder {
 
             ipcm_buf:   [0; 256 + 64 + 64],
 
-            avg_buf,
+            mc_dsp:     H264MC::new(avg_buf),
 
             transform_8x8_mode: false,
         }
@@ -315,6 +315,7 @@ println!(" chroma fmt {} bits {}/{}", sps.chroma_format_idc, sps.bit_depth_luma,
                     self.width  = sps.pic_width_in_mbs  << 4;
                     self.height = sps.pic_height_in_mbs << 4;
                     self.num_mbs = sps.pic_width_in_mbs * sps.pic_height_in_mbs;
+                    self.mc_dsp.set_dimensions(self.width, self.height);
 
                     self.is_mbaff = sps.mb_adaptive_frame_field && !slice_hdr.field_pic;
                     if self.is_mbaff {
@@ -593,7 +594,7 @@ println!("PAFF?");
                     } else {
                         0
                     };
-                recon_mb(&mut frm, slice_hdr, &mb_info, &mut self.sstate, &self.frame_refs, &mut self.avg_buf, weight_mode);
+                recon_mb(&mut frm, slice_hdr, &mb_info, &mut self.sstate, &self.frame_refs, &mut self.mc_dsp, weight_mode);
             } else {
                 for (dline, src) in frm.data[frm.offset[0] + xpos + ypos * frm.stride[0]..].chunks_mut(frm.stride[0]).take(16).zip(self.ipcm_buf.chunks(16)) {
                     dline[..16].copy_from_slice(src);