use MaybeUninit properly
[nihav.git] / nihav-indeo / src / codecs / imc.rs
index ea84d0ab01977f91285045264d60488f5df197d7..f9a92c0595c7918183c7e42ee9cc55667862a65a 100644 (file)
@@ -103,7 +103,7 @@ impl BitAlloc {
             self.skip_flag[i]       = false;
         }
     }
-    #[allow(clippy::cyclomatic_complexity)]
+    #[allow(clippy::cognitive_complexity)]
     fn calculate_bit_allocation(&mut self, ch_data: &mut IMCChannel, bits: usize, fixed_head: bool, adj_idx: usize) -> DecoderResult<()> {
 
         let mut peak = 0.0;
@@ -348,7 +348,6 @@ fn calc_maxcoef(coef: f32) -> (f32, f32) {
 
 impl IMCDecoder {
     fn new(is_imc: bool) -> Self {
-        let mut codes: [[Codebook<u8>; 4]; 4];
         let mut cycle1: [usize; BANDS] = [0; BANDS];
         let mut cycle2: [usize; BANDS] = [0; BANDS];
         let mut weights1: [f32; BANDS-1] = [0.0; BANDS-1];
@@ -359,15 +358,16 @@ impl IMCDecoder {
             weights1.copy_from_slice(&IMC_WEIGHTS1);
             weights2.copy_from_slice(&IMC_WEIGHTS2);
         }
-        unsafe {
-            codes = mem::uninitialized();
-            for i in 0..4 {
-                for j in 0..4 {
-                    let mut cr = IMCCodeReader::new(i, j);
-                    ptr::write(&mut codes[i][j], Codebook::new(&mut cr, CodebookMode::MSB).unwrap());
+        let codes = unsafe {
+                let mut ucodes: mem::MaybeUninit::<[[Codebook<u8>; 4]; 4]> = mem::MaybeUninit::uninit();
+                for i in 0..4 {
+                    for j in 0..4 {
+                        let mut cr = IMCCodeReader::new(i, j);
+                        ptr::write(&mut (*ucodes.as_mut_ptr())[i][j], Codebook::new(&mut cr, CodebookMode::MSB).unwrap());
+                    }
                 }
-            }
-        }
+                ucodes.assume_init()
+            };
         IMCDecoder {
             is_imc,
             chmap:      NAChannelMap::new(),