]> git.nihav.org Git - nihav.git/commitdiff
make HAMShuffler generic
authorKostya Shishkov <kostya.shishkov@gmail.com>
Tue, 16 Jun 2020 15:36:15 +0000 (17:36 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Tue, 16 Jun 2020 15:36:15 +0000 (17:36 +0200)
nihav-codec-support/src/codecs/mod.rs
nihav-commonfmt/src/codecs/cinepak.rs
nihav-commonfmt/src/codecs/clearvideo.rs
nihav-game/src/codecs/midivid.rs
nihav-indeo/src/codecs/indeo2.rs
nihav-ms/src/codecs/msrle.rs
nihav-ms/src/codecs/msvideo1.rs
nihav-rad/src/codecs/binkvid.rs

index 6589e477e4e3eaab4f57d9a0a9498c06a2ed39df..389821eb6c4e1de71642cc44ff18ada1ab4306bc 100644 (file)
@@ -25,11 +25,11 @@ use std::mem;
 /// shuffler.add_frame(frame.clone()); // tells frame manager to use the frame as the next reference
 /// ````
 #[allow(dead_code)]
-pub struct HAMShuffler {
-    lastframe: Option<NAVideoBufferRef<u8>>,
+pub struct HAMShuffler<T: Copy> {
+    lastframe: Option<NAVideoBufferRef<T>>,
 }
 
-impl HAMShuffler {
+impl<T: Copy> HAMShuffler<T> {
     /// Constructs a new instance of frame manager.
     #[allow(dead_code)]
     pub fn new() -> Self { HAMShuffler { lastframe: None } }
@@ -38,12 +38,12 @@ impl HAMShuffler {
     pub fn clear(&mut self) { self.lastframe = None; }
     /// Sets a new frame reference.
     #[allow(dead_code)]
-    pub fn add_frame(&mut self, buf: NAVideoBufferRef<u8>) {
+    pub fn add_frame(&mut self, buf: NAVideoBufferRef<T>) {
         self.lastframe = Some(buf);
     }
     /// Provides a copy of the reference frame if present or `None` if it is not.
     #[allow(dead_code)]
-    pub fn clone_ref(&mut self) -> Option<NAVideoBufferRef<u8>> {
+    pub fn clone_ref(&mut self) -> Option<NAVideoBufferRef<T>> {
         if let Some(ref mut frm) = self.lastframe {
             let newfrm = frm.copy_buffer();
             *frm = newfrm.clone().into_ref();
@@ -54,7 +54,7 @@ impl HAMShuffler {
     }
     /// Returns the original saved reference frame or `None` if it is not present.
     #[allow(dead_code)]
-    pub fn get_output_frame(&mut self) -> Option<NAVideoBufferRef<u8>> {
+    pub fn get_output_frame(&mut self) -> Option<NAVideoBufferRef<T>> {
         match self.lastframe {
             Some(ref frm) => Some(frm.clone()),
             None => None,
@@ -62,7 +62,7 @@ impl HAMShuffler {
     }
 }
 
-impl Default for HAMShuffler {
+impl<T: Copy> Default for HAMShuffler<T> {
     fn default() -> Self { Self { lastframe: None } }
 }
 
index 24d25a8cd934fc79e25a79de330ce3199160ea4f..8c67c5c4f72bde42c73c8a8f7e1236ed9647edb9 100644 (file)
@@ -14,7 +14,7 @@ enum DecodeMode {
 
 struct CinepakDecoder {
     info:   NACodecInfoRef,
-    frmmgr: HAMShuffler,
+    frmmgr: HAMShuffler<u8>,
     cb_v1:  [[u8; 6]; 256],
     cb_v4:  [[u8; 6]; 256],
     mode:   DecodeMode,
index 60218562acd62c40bbed3983d87fbfc066a9d34e..4f24bd4919d3fef0542b7a7ae2e40db35bb6da9d 100644 (file)
@@ -373,7 +373,7 @@ struct ClearVideoDecoder {
     info:    NACodecInfoRef,
     dc_cb:   Codebook<i8>,
     ac_cb:   Codebook<u16>,
-    frmmgr:  HAMShuffler,
+    frmmgr:  HAMShuffler<u8>,
     is_rm:   bool,
     ylev:    [LevelCodes; 4],
     ulev:    [LevelCodes; 3],
index 611ca60daced7aeed95d7e4ec006858e700439ab..700491e4fe7b5d46ef7820498bb28ea599b17565 100644 (file)
@@ -5,7 +5,7 @@ use nihav_codec_support::codecs::HAMShuffler;
 #[derive(Default)]
 struct MidividDecoder {
     info:       NACodecInfoRef,
-    hams:       HAMShuffler,
+    hams:       HAMShuffler<u8>,
     lzbuf:      Vec<u8>,
     width:      usize,
     height:     usize,
index 38079cec0e6ddb7c3557de02fff01660b5941540..960bc0b4c9a01708ade3edb2a10f533e41f24a21 100644 (file)
@@ -187,7 +187,7 @@ impl CodebookDescReader<u8> for IR2CodeReader {
 struct Indeo2Decoder {
     info:    NACodecInfoRef,
     cb:      Codebook<u8>,
-    frmmgr:  HAMShuffler,
+    frmmgr:  HAMShuffler<u8>,
 }
 
 impl Indeo2Decoder {
index 8ebdd567cb2fca05fea5819e93bc71071e194bce..0c2fc9c0aa94ff7010fef1623bf173db0998ef4a 100644 (file)
@@ -5,7 +5,7 @@ use nihav_codec_support::codecs::HAMShuffler;
 #[derive(Default)]
 struct RleDecoder {
     info:       NACodecInfoRef,
-    hams:       HAMShuffler,
+    hams:       HAMShuffler<u8>,
     width:      usize,
     height:     usize,
     is_4bit:    bool,
index 34de8943bc946605f2e033dbf29ad620c71f6b40..a3bfebcb026481261fc7c032e9d49a1285c9c1f1 100644 (file)
@@ -2,36 +2,6 @@ use nihav_core::codecs::*;
 use nihav_core::io::byteio::*;
 use nihav_codec_support::codecs::HAMShuffler;
 
-struct HAMShuffler16 {
-    lastframe: Option<NAVideoBufferRef<u16>>,
-}
-
-impl HAMShuffler16 {
-    fn clear(&mut self) { self.lastframe = None; }
-    fn add_frame(&mut self, buf: NAVideoBufferRef<u16>) {
-        self.lastframe = Some(buf);
-    }
-    fn clone_ref(&mut self) -> Option<NAVideoBufferRef<u16>> {
-        if let Some(ref mut frm) = self.lastframe {
-            let newfrm = frm.copy_buffer();
-            *frm = newfrm.clone().into_ref();
-            Some(newfrm.into_ref())
-        } else {
-            None
-        }
-    }
-    fn get_output_frame(&mut self) -> Option<NAVideoBufferRef<u16>> {
-        match self.lastframe {
-            Some(ref frm) => Some(frm.clone()),
-            None => None,
-        }
-    }
-}
-
-impl Default for HAMShuffler16 {
-    fn default() -> Self { Self { lastframe: None } }
-}
-
 const RGB555_FORMAT: NAPixelFormaton = NAPixelFormaton {
         model: ColorModel::RGB(RGBSubmodel::RGB), components: 3,
         comp_info: [
@@ -44,8 +14,8 @@ const RGB555_FORMAT: NAPixelFormaton = NAPixelFormaton {
 #[derive(Default)]
 struct Video1Decoder {
     info:       NACodecInfoRef,
-    hams:       HAMShuffler,
-    hams16:     HAMShuffler16,
+    hams:       HAMShuffler<u8>,
+    hams16:     HAMShuffler<u16>,
     width:      usize,
     height:     usize,
     is_16bit:   bool,
index 4de23e79af74047c369c76384f706ada82052e9f..0c23480700cf29a4fad557c1eb451eac51cb8d66 100644 (file)
@@ -476,7 +476,7 @@ impl Default for QuantMats {
 struct BinkDecoder {
     info:       NACodecInfoRef,
     ips:        IPShuffler,
-    hams:       HAMShuffler,
+    hams:       HAMShuffler<u8>,
 
     is_ver_b:   bool,
     is_ver_i:   bool,