impl RV60Codebooks {
pub fn init() -> Self {
- let mut cbp8_cb: [[Codebook<u16>; 4]; NUM_INTER_SETS];
- let mut cbp16_cb: [[Codebook<u16>; 12]; NUM_INTER_SETS];
+ let cbp8_cb;
+ let cbp16_cb;
unsafe {
- cbp8_cb = mem::MaybeUninit::uninit().assume_init();
- cbp16_cb = mem::MaybeUninit::uninit().assume_init();
+ let mut ucbp8_cb: mem::MaybeUninit::<[[Codebook<u16>; 4]; NUM_INTER_SETS]> = mem::MaybeUninit::uninit();
+ let mut ucbp16_cb: mem::MaybeUninit::<[[Codebook<u16>; 12]; NUM_INTER_SETS]> = mem::MaybeUninit::uninit();
for set_no in 0..NUM_INTER_SETS {
for i in 0..4 {
let mut cbr = RV60CodebookDescReader::new(&RV60_CBP8_TABS[set_no][i], NUM_CBP_ENTRIES, false);
- ptr::write(&mut cbp8_cb[set_no][i], Codebook::new(&mut cbr, CodebookMode::MSB).unwrap());
+ ptr::write(&mut (*ucbp8_cb.as_mut_ptr())[set_no][i], Codebook::new(&mut cbr, CodebookMode::MSB).unwrap());
}
for i in 0..12 {
let mut cbr = RV60CodebookDescReader::new(&RV60_CBP16_TABS[set_no][i], NUM_CBP_ENTRIES, false);
- ptr::write(&mut cbp16_cb[set_no][i], Codebook::new(&mut cbr, CodebookMode::MSB).unwrap());
+ ptr::write(&mut (*ucbp16_cb.as_mut_ptr())[set_no][i], Codebook::new(&mut cbr, CodebookMode::MSB).unwrap());
}
}
+ cbp8_cb = ucbp8_cb.assume_init();
+ cbp16_cb = ucbp16_cb.assume_init();
}
- let mut intra_coeff_cb: [CoeffCodebooks; NUM_INTRA_SETS];
- let mut inter_coeff_cb: [CoeffCodebooks; NUM_INTER_SETS];
+ let intra_coeff_cb;
+ let inter_coeff_cb;
unsafe {
- intra_coeff_cb = mem::MaybeUninit::uninit().assume_init();
+ let mut uintra_coeff_cb: mem::MaybeUninit::<[CoeffCodebooks; NUM_INTRA_SETS]> = mem::MaybeUninit::uninit();
for set_no in 0..NUM_INTRA_SETS {
- ptr::write(&mut intra_coeff_cb[set_no], CoeffCodebooks::init(set_no, true));
+ ptr::write(&mut (*uintra_coeff_cb.as_mut_ptr())[set_no], CoeffCodebooks::init(set_no, true));
}
- inter_coeff_cb = mem::MaybeUninit::uninit().assume_init();
+ let mut uinter_coeff_cb: mem::MaybeUninit::<[CoeffCodebooks; NUM_INTER_SETS]> = mem::MaybeUninit::uninit();
for set_no in 0..NUM_INTER_SETS {
- ptr::write(&mut inter_coeff_cb[set_no], CoeffCodebooks::init(set_no, false));
+ ptr::write(&mut (*uinter_coeff_cb.as_mut_ptr())[set_no], CoeffCodebooks::init(set_no, false));
}
+ intra_coeff_cb = uintra_coeff_cb.assume_init();
+ inter_coeff_cb = uinter_coeff_cb.assume_init();
}
Self { cbp8_cb, cbp16_cb, intra_coeff_cb, inter_coeff_cb }
}
fn decode_2x2_dc(br: &mut BitReader, cb: &Codebook<u16>, coeffs: &mut [i16], stride: usize, block2: bool, dsc: usize, q_dc: i16, q_ac: i16) -> DecoderResult<()> {
if dsc == 0 { return Ok(()); }
- let lx = RV60_DSC_TO_LX[dsc as usize];
+ let lx = RV60_DSC_TO_LX[dsc];
let l0 = ((lx >> 0) & 0xFF) as i16;
let l1 = ((lx >> 8) & 0xFF) as i16;
let l2 = ((lx >> 16) & 0xFF) as i16;
}
fn decode_2x2(br: &mut BitReader, cb: &Codebook<u16>, coeffs: &mut [i16], stride: usize, block2: bool, dsc: usize, q_ac: i16) -> DecoderResult<()> {
if dsc == 0 { return Ok(()); }
- let lx = RV60_DSC_TO_LX[dsc as usize];
+ let lx = RV60_DSC_TO_LX[dsc];
let l0 = ((lx >> 0) & 0xFF) as i16;
let l1 = ((lx >> 8) & 0xFF) as i16;
let l2 = ((lx >> 16) & 0xFF) as i16;