]> git.nihav.org Git - nihav.git/blobdiff - src/codecs/mod.rs
more utility code
[nihav.git] / src / codecs / mod.rs
index 426cb049f9dffea322999b8b66265594403cf13e..206032e6997b63c5cbb7c9dfc6ee5a916fbf71a9 100644 (file)
@@ -1,5 +1,7 @@
 #[cfg(feature="decoder_indeo2")]
 pub mod indeo2;
+#[cfg(feature="decoder_pcm")]
+pub mod pcm;
 
 use frame::*;
 use std::rc::Rc;
@@ -39,7 +41,7 @@ impl From<CodebookError> for DecoderError {
 
 #[allow(dead_code)]
 struct HAMShuffler {
-    lastframe: Option<NAFrameRef>,
+    lastframe: Option<NAVideoBuffer<u8>>,
 }
 
 impl HAMShuffler {
@@ -48,18 +50,21 @@ impl HAMShuffler {
     #[allow(dead_code)]
     fn clear(&mut self) { self.lastframe = None; }
     #[allow(dead_code)]
-    fn add_frame(&mut self, frm: NAFrame) {
-        self.lastframe = Some(Rc::new(RefCell::new(frm)));
+    fn add_frame(&mut self, buf: NAVideoBuffer<u8>) {
+        self.lastframe = Some(buf);
     }
     #[allow(dead_code)]
-    fn clone_ref(&mut self) -> Option<NAFrameRef> {
-        match self.lastframe {
-            Some(ref frm) => Some(Rc::new(RefCell::new(NAFrame::from_copy(&frm.borrow())))),
-            None => None,
+    fn clone_ref(&mut self) -> Option<NAVideoBuffer<u8>> {
+        if let Some(ref mut frm) = self.lastframe {
+            let newfrm = frm.copy_buffer();
+            *frm = newfrm.clone();
+            Some(newfrm)
+        } else {
+            None
         }
     }
     #[allow(dead_code)]
-    fn get_output_frame(&mut self) -> Option<NAFrameRef> {
+    fn get_output_frame(&mut self) -> Option<NAVideoBuffer<u8>> {
         match self.lastframe {
             Some(ref frm) => Some(frm.clone()),
             None => None,
@@ -81,6 +86,8 @@ pub struct DecoderInfo {
 const DECODERS: &[DecoderInfo] = &[
 #[cfg(feature="decoder_indeo2")]
     DecoderInfo { name: "indeo2", get_decoder: indeo2::get_decoder },
+#[cfg(feature="decoder_pcm")]
+    DecoderInfo { name: "pcm", get_decoder: pcm::get_decoder },
 ];
 
 pub fn find_decoder(name: &str) -> Option<fn () -> Box<NADecoder>> {