}
Ok(())
}
+ #[allow(clippy::comparison_chain)]
fn decode_intra_mb_pred_quant(&mut self, bd: &mut dyn BlockDecoder, bdsp: &dyn BlockDSP, mb_pos: usize, binfo: &BlockInfo, sstate: &SliceState, apply_acpred: bool) -> DecoderResult<()> {
for i in 0..6 {
bd.decode_block_intra(&binfo, &sstate, binfo.get_q(), i, (binfo.cbp & (1 << (5 - i))) != 0, &mut self.blk[i])?;
} else {
i16::from(binfo.get_q() * 2)
};
+ let qadd = (q + 1) >> 1;
let quant_gray = 1024 / q;
if apply_acpred && (binfo.acpred != ACPredMode::None) {
let has_b = (i == 1) || (i == 3) || !sstate.first_mb;
for t in 0..8 { self.pred_coeffs[mb_pos].ver[i][t] = self.blk[i][t]; }
}
if apply_acpred {
- self.blk[i][0] *= q;
+ let start = if binfo.get_q() < 8 {
+ self.blk[i][0] <<= 3;
+ 1
+ } else {
+ 0
+ };
+ for el in self.blk[i].iter_mut().skip(start) {
+ if *el > 0 {
+ *el = *el * q + qadd;
+ } else if *el < 0 {
+ *el = *el * q - qadd;
+ }
+ }
}
bdsp.idct(&mut self.blk[i]);
}
bi.mv_f[blk_no]
}
}
- #[allow(clippy::cyclomatic_complexity)]
+ #[allow(clippy::cognitive_complexity)]
fn reconstruct_obmc(&mut self, buf: &mut NAVideoBuffer<u8>, slice_start: usize, start: usize, end: usize, slice_end: bool) -> usize {
let mut mb_x = start % self.mb_w;
let mut mb_y = start / self.mb_w;
}
mb_pos
}
- #[allow(clippy::cyclomatic_complexity)]
+ #[allow(clippy::cognitive_complexity)]
pub fn parse_frame(&mut self, bd: &mut dyn BlockDecoder, bdsp: &dyn BlockDSP) -> DecoderResult<NABufferType> {
let pinfo = bd.decode_pichdr()?;
let mut mvi = MVInfo::new();
if capacity < self.num_mb {
self.obmc_blk.reserve(self.num_mb - capacity);
}
- self.obmc_blk.truncate(0);
+ self.obmc_blk.clear();
}
if self.has_b {
- self.mv_data.truncate(0);
+ self.mv_data.clear();
}
let save_b_data = pinfo.mode.is_ref() && self.may_have_b_frames;
if save_b_data {
- self.mv_data.truncate(0);
+ self.mv_data.clear();
}
let is_b = pinfo.mode == Type::B;
let mut mb_pos = 0;
let apply_acpred = /*(pinfo.mode == Type::I) && */pinfo.plusinfo.is_some() && pinfo.plusinfo.unwrap().aic;
if apply_acpred {
- self.pred_coeffs.truncate(0);
+ self.pred_coeffs.clear();
if !self.pred_quant {
self.pred_coeffs.resize(self.mb_w * self.mb_h, ZERO_PRED_COEFFS);
} else {
recon_b_frame(b_buf, bck_buf.clone(), fwd_buf.clone(), self.mb_w, self.mb_h, self.b_data.as_slice(), bdsp);
}
- self.b_data.truncate(0);
+ self.b_data.clear();
Ok(bufinfo)
}
}