use nihav_codec_support::codecs::MV;
use super::{CurrentMBInfo, I4X4_SCAN};
use super::dsp::*;
-use super::pic_ref::FrameRefs;
+use super::pic_ref::SliceRefs;
use super::slice::{SliceHeader, WeightInfo, DEF_WEIGHT_INFO};
use super::types::*;
} else {
[1, 0, 0]
};
- mc_dsp.put_block_weighted(&mut frm.data[yoff..], frm.stride[0], &ytmp, w, h, yw);
+ let wmode = match w {
+ 2 => 0,
+ 4 => 1,
+ 8 => 2,
+ _ => 3,
+ };
+ (mc_dsp.put_block_weighted[wmode])(&mut frm.data[yoff..], frm.stride[0], &ytmp, h, yw);
for chroma in 0..2 {
let cstride = frm.stride[chroma + 1];
[1, 0, 0]
};
let csrc = if chroma == 0 { &utmp } else { &vtmp };
- mc_dsp.put_block_weighted(&mut frm.data[coff..], cstride, csrc, w / 2, h / 2, cw);
+ (mc_dsp.put_block_weighted[wmode - 1])(&mut frm.data[coff..], cstride, csrc, h / 2, cw);
}
}
} else {
}
}
+#[allow(clippy::match_like_matches_macro)]
fn do_b_mc(frm: &mut NASimpleVideoFrame<u8>, mode: BMode, xpos: usize, ypos: usize, w: usize, h: usize, mv0: MV, ref_pic0: Option<NAVideoBufferRef<u8>>, weight0: &WeightInfo, mv1: MV, ref_pic1: Option<NAVideoBufferRef<u8>>, weight1: &WeightInfo, mc_dsp: &mut H264MC) {
let do_weight = match (mode, weight0.is_weighted(), weight1.is_weighted()) {
(BMode::L0, true, _) => true,
} else {
[1, 0, 0]
};
- mc_dsp.put_block_weighted(&mut frm.data[yoff..], frm.stride[0], &ytmp0, w, h, yw);
+ let wmode = match w {
+ 2 => 0,
+ 4 => 1,
+ 8 => 2,
+ _ => 3,
+ };
+ (mc_dsp.put_block_weighted[wmode])(&mut frm.data[yoff..], frm.stride[0], &ytmp0, h, yw);
for chroma in 0..2 {
let cstride = frm.stride[chroma + 1];
[1, 0, 0]
};
let csrc = if chroma == 0 { &utmp0 } else { &vtmp0 };
- mc_dsp.put_block_weighted(&mut frm.data[coff..], cstride, csrc, w / 2, h / 2, cw);
+ (mc_dsp.put_block_weighted[wmode - 1])(&mut frm.data[coff..], cstride, csrc, h / 2, cw);
}
},
(BMode::Bi, Some(buf0), Some(buf1)) => { // do both and avg
(false, true) => [1 << weight1.luma_shift, 0, weight1.luma_weight, weight1.luma_offset, weight1.luma_shift as i8],
(false, false) => [1, 0, 1, 0, 0],
};
- mc_dsp.put_block_weighted2(&mut frm.data[yoff..], frm.stride[0], &ytmp0, &ytmp1, w, h, yw);
+ let wmode = match w {
+ 2 => 0,
+ 4 => 1,
+ 8 => 2,
+ _ => 3,
+ };
+ (mc_dsp.put_block_weighted2[wmode])(&mut frm.data[yoff..], frm.stride[0], &ytmp0, &ytmp1, h, yw);
for chroma in 0..2 {
let cstride = frm.stride[chroma + 1];
};
let csrc0 = if chroma == 0 { &utmp0 } else { &vtmp0 };
let csrc1 = if chroma == 0 { &utmp1 } else { &vtmp1 };
- mc_dsp.put_block_weighted2(&mut frm.data[coff..], cstride, csrc0, csrc1, w / 2, h / 2, cw);
+ (mc_dsp.put_block_weighted2[wmode - 1])(&mut frm.data[coff..], cstride, csrc0, csrc1, h / 2, cw);
}
},
_ => {
}
}
-fn get_weights(slice_hdr: &SliceHeader, frame_refs: &FrameRefs, mode: BMode, weight_mode: u8, ref_l0: PicRef, ref_l1: PicRef) -> (WeightInfo, WeightInfo) {
+fn get_weights(slice_hdr: &SliceHeader, frame_refs: &SliceRefs, mode: BMode, weight_mode: u8, ref_l0: PicRef, ref_l1: PicRef) -> (WeightInfo, WeightInfo) {
let idx_l0 = ref_l0.index();
let idx_l1 = ref_l1.index();
if mode != BMode::Bi || weight_mode != 2 {
}
}
-pub fn recon_mb(frm: &mut NASimpleVideoFrame<u8>, slice_hdr: &SliceHeader, mb_info: &CurrentMBInfo, sstate: &mut SliceState, frame_refs: &FrameRefs, mc_dsp: &mut H264MC, weight_mode: u8) {
+pub fn recon_mb(frm: &mut NASimpleVideoFrame<u8>, slice_hdr: &SliceHeader, mb_info: &CurrentMBInfo, sstate: &mut SliceState, frame_refs: &SliceRefs, mc_dsp: &mut H264MC, weight_mode: u8) {
let xpos = sstate.mb_x * 16;
let ypos = sstate.mb_y * 16;
match mb_info.mb_type {
MBType::Intra16x16(_, _, _) => {
- pred_intra(frm, &sstate, &mb_info);
+ pred_intra(frm, sstate, mb_info);
},
MBType::Intra4x4 | MBType::Intra8x8 => {
- pred_intra(frm, &sstate, &mb_info);
+ pred_intra(frm, sstate, mb_info);
},
MBType::PCM => {},
MBType::PSkip => {
};
if !mb_info.mb_type.is_skip() {
if mb_info.mb_type != MBType::Intra4x4 && mb_info.mb_type != MBType::Intra8x8 {
- add_luma(frm, &sstate, &mb_info);
+ add_luma(frm, sstate, mb_info);
}
- add_chroma(frm, &sstate, &mb_info);
+ add_chroma(frm, sstate, mb_info);
}
}