X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fcodecs%2Fmod.rs;h=1ee9f0deda2b73f7eebd13d2c5891c306f2e1b50;hb=5a3ac1b7ad4ea52f43b0464ecedffdad9db643fe;hp=6572f2690dc81f03b67ecbf13f32287e76cc4a35;hpb=be91b1c382e773807fa17615934355667403e0f9;p=nihav.git diff --git a/src/codecs/mod.rs b/src/codecs/mod.rs index 6572f26..1ee9f0d 100644 --- a/src/codecs/mod.rs +++ b/src/codecs/mod.rs @@ -1,6 +1,7 @@ use frame::*; use std::rc::Rc; use std::cell::RefCell; +use std::mem; use io::byteio::ByteIOError; use io::bitreader::BitReaderError; use io::codebook::CodebookError; @@ -102,6 +103,40 @@ impl IPShuffler { } } +#[allow(dead_code)] +struct IPBShuffler { + lastframe: Option>, + nextframe: Option>, +} + +impl IPBShuffler { + #[allow(dead_code)] + fn new() -> Self { IPBShuffler { lastframe: None, nextframe: None } } + #[allow(dead_code)] + fn clear(&mut self) { self.lastframe = None; self.nextframe = None; } + #[allow(dead_code)] + fn add_frame(&mut self, buf: NAVideoBuffer) { + mem::swap(&mut self.lastframe, &mut self.nextframe); + self.lastframe = Some(buf); + } + #[allow(dead_code)] + fn get_lastref(&mut self) -> Option> { + if let Some(ref frm) = self.lastframe { + Some(frm.clone()) + } else { + None + } + } + #[allow(dead_code)] + fn get_nextref(&mut self) -> Option> { + if let Some(ref frm) = self.nextframe { + Some(frm.clone()) + } else { + None + } + } +} + pub trait NADecoder { fn init(&mut self, info: Rc) -> DecoderResult<()>; fn decode(&mut self, pkt: &NAPacket) -> DecoderResult; @@ -116,6 +151,8 @@ pub struct DecoderInfo { #[cfg(feature="h263")] mod blockdsp; +#[cfg(feature="decoder_clearvideo")] +mod clearvideo; #[cfg(feature="decoder_gdvvid")] mod gremlinvideo; #[cfg(any(feature="decoder_indeo2", feature="decoder_indeo3", feature="decoder_indeo4", feature="decoder_indeo5", feature="decoder_imc"))] @@ -127,6 +164,10 @@ mod h263; mod pcm; const DECODERS: &[DecoderInfo] = &[ +#[cfg(feature="decoder_clearvideo")] + DecoderInfo { name: "clearvideo", get_decoder: clearvideo::get_decoder }, +#[cfg(feature="decoder_clearvideo")] + DecoderInfo { name: "clearvideo_rm", get_decoder: clearvideo::get_decoder_rm }, #[cfg(feature="decoder_gdvvid")] DecoderInfo { name: "gdv-video", get_decoder: gremlinvideo::get_decoder }, #[cfg(feature="decoder_indeo2")]