diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2017-05-19 18:54:27 +0200 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2017-05-19 18:54:27 +0200 |
commit | 70259941696929b91c6b3cbf2aeb476b2b34dda7 (patch) | |
tree | e70686f79b6fc16f1973b38a2b35a1a5359d7ce9 /src | |
parent | 3f7c7cfd270b5b75917508aee6ca5877433a984d (diff) | |
download | nihav-70259941696929b91c6b3cbf2aeb476b2b34dda7.tar.gz |
structure decoders a bit too
Diffstat (limited to 'src')
-rw-r--r-- | src/codecs/indeo2.rs | 13 | ||||
-rw-r--r-- | src/codecs/mod.rs | 19 |
2 files changed, 28 insertions, 4 deletions
diff --git a/src/codecs/indeo2.rs b/src/codecs/indeo2.rs index 1df483f..fec0f12 100644 --- a/src/codecs/indeo2.rs +++ b/src/codecs/indeo2.rs @@ -183,14 +183,14 @@ impl CodebookDescReader<u8> for IR2CodeReader { fn len(&mut self) -> usize { INDEO2_CODE_LENGTHS.len() } } -pub struct Indeo2Decoder { +struct Indeo2Decoder { info: Rc<NACodecInfo>, cb: Codebook<u8>, lastfrm: Option<Rc<NAFrame>>, } impl Indeo2Decoder { - pub fn new() -> Self { + fn new() -> Self { let dummy_info = Rc::new(DUMMY_CODEC_INFO); let mut coderead = IR2CodeReader{}; let cb = Codebook::new(&mut coderead, CodebookMode::LSB).unwrap(); @@ -357,10 +357,15 @@ impl NADecoder for Indeo2Decoder { } } +pub fn get_decoder() -> Box<NADecoder> { + Box::new(Indeo2Decoder::new()) +} + #[cfg(test)] mod test { - use super::*; + use codecs; use demuxers::*; + use frame::NAFrame; use io::byteio::*; use std::fs::File; use std::io::prelude::*; @@ -373,7 +378,7 @@ mod test { let mut br = ByteReader::new(&mut fr); let mut dmx = avi_dmx.new_demuxer(&mut br); dmx.open().unwrap(); - let mut dec = Indeo2Decoder::new(); + let mut dec = (codecs::find_decoder("indeo2").unwrap())();//Indeo2Decoder::new(); let mut str: u32 = 42; for i in 0..dmx.get_num_streams() { diff --git a/src/codecs/mod.rs b/src/codecs/mod.rs index 782d451..ff75af9 100644 --- a/src/codecs/mod.rs +++ b/src/codecs/mod.rs @@ -42,3 +42,22 @@ pub trait NADecoder { fn decode(&mut self, pkt: &NAPacket) -> DecoderResult<Rc<NAFrame>>; } +#[derive(Clone,Copy)] +pub struct DemuxerInfo { + name: &'static str, + get_decoder: fn () -> Box<NADecoder>, +} + +const DECODERS: &[DemuxerInfo] = &[ +#[cfg(feature="decoder_indeo2")] + DemuxerInfo { name: "indeo2", get_decoder: indeo2::get_decoder }, +]; + +pub fn find_decoder(name: &str) -> Option<fn () -> Box<NADecoder>> { + for &dec in DECODERS { + if dec.name == name { + return Some(dec.get_decoder); + } + } + None +} |