ipcm_buf: [u8; 256 + 64 + 64],
- avg_buf: NAVideoBufferRef<u8>,
+ mc_dsp: H264MC,
transform_8x8_mode: bool,
}
ipcm_buf: [0; 256 + 64 + 64],
- avg_buf,
+ mc_dsp: H264MC::new(avg_buf),
transform_8x8_mode: false,
}
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 {
} 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);
];
let mut mb_idx = slice_hdr.first_mb_in_slice as usize;
- let mut mb_info = CurrentMBInfo::default();
- mb_info.qp_y = slice_hdr.slice_qp;
+ let mut mb_info = CurrentMBInfo { qp_y: slice_hdr.slice_qp, ..Default::default() };
let skip_type = if slice_hdr.slice_type.is_p() { MBType::PSkip } else { MBType::BSkip };
while br.tell() < full_size && mb_idx < self.num_mbs {
mb_info.coded = [false; 25];
let skip_type = if slice_hdr.slice_type.is_p() { MBType::PSkip } else { MBType::BSkip };
let mut last_qp_diff = false;
- let mut mb_info = CurrentMBInfo::default();
- mb_info.qp_y = slice_hdr.slice_qp;
+ let mut mb_info = CurrentMBInfo { qp_y: slice_hdr.slice_qp, ..Default::default() };
while mb_idx < self.num_mbs {
mb_info.coded = [false; 25];
if self.is_mbaff && (((mb_idx & 1) == 0) || (prev_mb_skipped && ((mb_idx & 1) == 1))) {
let _mb_field_decoding = cabac.decode_bit(70);
}
- let mut mb_type = cabac_decode_mb_type(cabac, &slice_hdr, &self.sstate);
+ let mut mb_type = cabac_decode_mb_type(cabac, slice_hdr, &self.sstate);
mb_info.mb_type = mb_type;
mb_info.transform_size_8x8 = false;
if mb_type == MBType::PCM {
Ok(())
} else {
-println!("???");
Err(DecoderError::InvalidData)
}
}
for opt_def in DECODER_OPTIONS.iter() {
if opt_def.check(option).is_ok() {
match (option.name, &option.value) {
- (FRAME_SKIP_OPTION, NAValue::String(ref str)) => {
- if let Ok(smode) = FrameSkipMode::from_str(str) {
+ (FRAME_SKIP_OPTION, NAValue::String(ref strval)) => {
+ if let Ok(smode) = FrameSkipMode::from_str(strval) {
self.skip_mode = smode;
}
},