switch to refcounted buffers
[nihav.git] / nihav-rad / src / codecs / smacker.rs
index e6f4268d2edc8e4fd5a51624e5a2900e87a27149..bbf48460061c519d85906af5f0ca57a2e9f7a60d 100644 (file)
@@ -160,7 +160,9 @@ impl SmackerTree16 {
     }
     fn reset(&mut self) {
         for i in 0..self.last.len() {
-            self.tree[self.last[i]] = 0;
+            if self.last[i] != SMK_LAST_UNINIT {
+                self.tree[self.last[i]] = 0;
+            }
         }
     }
 }
@@ -359,7 +361,7 @@ impl SmackerVideoDecoder {
     }
     fn output_frame(&self, buf: &mut NAVideoBuffer<u8>) {
         let stride = buf.get_stride(0);
-        let mut data = buf.get_data_mut();
+        let data = buf.get_data_mut().unwrap();
         let dst = data.as_mut_slice();
         let is_scaled = (self.flags & SMK_FLAG_SCALED) != 0;
         let is_interlaced = (self.flags & SMK_FLAG_INTERLACED) != 0;
@@ -440,7 +442,7 @@ impl NADecoder for SmackerVideoDecoder {
 
         let is_intra;
         let ftype;
-        let mut bufinfo;
+        let bufinfo;
         if src.len() > PAL_SIZE {
             let mut br = BitReader::new(&src[PAL_SIZE..], src.len() - PAL_SIZE, BitReaderMode::LE);
 
@@ -451,7 +453,7 @@ impl NADecoder for SmackerVideoDecoder {
             is_intra = self.decode_frame(&mut br)?;
             self.output_frame(&mut buf);
             let paloff = buf.get_offset(1);
-            let mut data = buf.get_data_mut();
+            let data = buf.get_data_mut().unwrap();
             let dst = data.as_mut_slice();
             let palout = &mut dst[paloff..][..PAL_SIZE];
             palout.copy_from_slice(&src[0..PAL_SIZE]);
@@ -521,7 +523,7 @@ impl NADecoder for SmackerAudioDecoder {
             validate!(!(stereo ^ (self.chans == 2)));
             validate!(!(bits16 ^ (self.bits == 16)));
 
-            let mut abuf;
+            let abuf;
             let samples;
             let nch = if stereo { 2 } else { 1 };
             if bits16 {
@@ -541,7 +543,7 @@ impl NADecoder for SmackerAudioDecoder {
                 abuf = alloc_audio_buffer(self.ainfo, samples, self.chmap.clone())?;
                 let mut adata = abuf.get_abuf_i16().unwrap();
                 let offs: [usize; 2] = [0, adata.get_offset(1)];
-                let mut dst = adata.get_data_mut();
+                let dst = adata.get_data_mut().unwrap();
                 for ch in 0..nch {
                     dst[offs[ch]] = pred[ch];
                 }
@@ -557,7 +559,7 @@ impl NADecoder for SmackerAudioDecoder {
                 samples = unp_size / nch;
                 abuf = alloc_audio_buffer(self.ainfo, samples, self.chmap.clone())?;
                 let mut adata = abuf.get_abuf_u8().unwrap();
-                let mut dst = adata.get_data_mut();
+                let dst = adata.get_data_mut().unwrap();
                 if stereo {
                     let mut trees: [SmackerTree8; 2] = [SmackerTree8::new(), SmackerTree8::new()];
                     trees[0].decode(&mut br)?;