X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-realmedia%2Fsrc%2Fcodecs%2Frv60codes.rs;h=390458c1174d36608e2300edd5087ba2ec5b82ac;hb=e6aaad5c5273cd814b5748b7faf3751835a37217;hp=a8301813fd09a9ae519c47bcbd8d6cee8f9e1f9e;hpb=b7c882c1ce6f86c07c2340751200e3a060942826;p=nihav.git diff --git a/nihav-realmedia/src/codecs/rv60codes.rs b/nihav-realmedia/src/codecs/rv60codes.rs index a830181..390458c 100644 --- a/nihav-realmedia/src/codecs/rv60codes.rs +++ b/nihav-realmedia/src/codecs/rv60codes.rs @@ -98,33 +98,37 @@ pub struct RV60Codebooks { impl RV60Codebooks { pub fn init() -> Self { - let mut cbp8_cb: [[Codebook; 4]; NUM_INTER_SETS]; - let mut cbp16_cb: [[Codebook; 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; 4]; NUM_INTER_SETS]> = mem::MaybeUninit::uninit(); + let mut ucbp16_cb: mem::MaybeUninit::<[[Codebook; 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 } } @@ -165,7 +169,7 @@ fn quant(val: i16, q: i16) -> i16 { (val * q + 8) >> 4 } fn decode_2x2_dc(br: &mut BitReader, cb: &Codebook, 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; @@ -183,7 +187,7 @@ fn decode_2x2_dc(br: &mut BitReader, cb: &Codebook, coeffs: &mut [i16], str } fn decode_2x2(br: &mut BitReader, cb: &Codebook, 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;