aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2017-05-19 18:54:27 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2017-05-19 18:54:27 +0200
commit70259941696929b91c6b3cbf2aeb476b2b34dda7 (patch)
treee70686f79b6fc16f1973b38a2b35a1a5359d7ce9 /src
parent3f7c7cfd270b5b75917508aee6ca5877433a984d (diff)
downloadnihav-70259941696929b91c6b3cbf2aeb476b2b34dda7.tar.gz
structure decoders a bit too
Diffstat (limited to 'src')
-rw-r--r--src/codecs/indeo2.rs13
-rw-r--r--src/codecs/mod.rs19
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
+}