mark traits as dyn
[nihav.git] / nihav-core / src / codecs / mod.rs
index 4f81d9eb8a2ffe61c6a8f2b09e65d6cf3b2a359f..4ea379d59bc64294e19036e006d19a2e1ea03b89 100644 (file)
@@ -162,7 +162,7 @@ impl Default for IPBShuffler {
     fn default() -> Self { Self { lastframe: None, nextframe: None } }
 }
 
-#[derive(Debug,Clone,Copy,PartialEq)]
+#[derive(Debug,Clone,Copy,Default,PartialEq)]
 pub struct MV {
     pub x: i16,
     pub y: i16,
@@ -229,16 +229,32 @@ impl fmt::Display for MV {
     }
 }
 
+pub struct NADecoderSupport {
+    pub pool_u8:        NAVideoBufferPool<u8>,
+    pub pool_u16:       NAVideoBufferPool<u16>,
+    pub pool_u32:       NAVideoBufferPool<u32>,
+}
+
+impl NADecoderSupport {
+    pub fn new() -> Self {
+        Self {
+            pool_u8:        NAVideoBufferPool::new(0),
+            pool_u16:       NAVideoBufferPool::new(0),
+            pool_u32:       NAVideoBufferPool::new(0),
+        }
+    }
+}
+
 
 pub trait NADecoder {
-    fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()>;
-    fn decode(&mut self, pkt: &NAPacket) -> DecoderResult<NAFrameRef>;
+    fn init(&mut self, supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()>;
+    fn decode(&mut self, supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef>;
 }
 
 #[derive(Clone,Copy)]
 pub struct DecoderInfo {
     pub name: &'static str,
-    pub get_decoder: fn () -> Box<NADecoder>,
+    pub get_decoder: fn () -> Box<dyn NADecoder>,
 }
 
 #[cfg(any(feature="h263"))]
@@ -258,7 +274,7 @@ impl RegisteredDecoders {
     pub fn add_decoder(&mut self, dec: DecoderInfo) {
         self.decs.push(dec);
     }
-    pub fn find_decoder(&self, name: &str) -> Option<fn () -> Box<NADecoder>> {
+    pub fn find_decoder(&self, name: &str) -> Option<fn () -> Box<dyn NADecoder>> {
         for &dec in self.decs.iter() {
             if dec.name == name {
                 return Some(dec.get_decoder);