X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fcodecs%2Fmod.rs;h=4978124428de93db5bdaa04fa5b0e7711c56eecf;hb=e14e53e893bd6c7c7af7ba397b5a9ff3212dee6e;hp=dd72aeb657f719d2172c4890b41876657d3daa98;hpb=6d3bb0b2836d18e285d36f276ecea3f089958669;p=nihav.git diff --git a/src/codecs/mod.rs b/src/codecs/mod.rs index dd72aeb..4978124 100644 --- a/src/codecs/mod.rs +++ b/src/codecs/mod.rs @@ -17,7 +17,7 @@ pub enum DecoderError { Bug, } -type DecoderResult = Result; +pub type DecoderResult = Result; impl From for DecoderError { fn from(_: ByteIOError) -> Self { DecoderError::ShortData } @@ -36,6 +36,10 @@ impl From for DecoderError { fn from(_: CodebookError) -> Self { DecoderError::InvalidData } } +macro_rules! validate { + ($a:expr) => { if !$a { return Err(DecoderError::InvalidData); } }; +} + #[allow(dead_code)] struct HAMShuffler { lastframe: Option>, @@ -104,16 +108,16 @@ pub struct DecoderInfo { get_decoder: fn () -> Box, } -macro_rules! validate { - ($a:expr) => { if !$a { return Err(DecoderError::InvalidData); } }; -} +#[cfg(feature="h263")] +mod blockdsp; #[cfg(feature="decoder_gdvvid")] mod gremlinvideo; -#[cfg(feature="decoder_indeo2")] -mod indeo2; -#[cfg(feature="decoder_indeo3")] -mod indeo3; +#[cfg(any(feature="decoder_indeo2", feature="decoder_indeo3"))] +mod indeo; +#[cfg(feature="h263")] +mod h263; + #[cfg(feature="decoder_pcm")] mod pcm; @@ -121,9 +125,11 @@ const DECODERS: &[DecoderInfo] = &[ #[cfg(feature="decoder_gdvvid")] DecoderInfo { name: "gdv-video", get_decoder: gremlinvideo::get_decoder }, #[cfg(feature="decoder_indeo2")] - DecoderInfo { name: "indeo2", get_decoder: indeo2::get_decoder }, + DecoderInfo { name: "indeo2", get_decoder: indeo::indeo2::get_decoder }, #[cfg(feature="decoder_indeo3")] - DecoderInfo { name: "indeo3", get_decoder: indeo3::get_decoder }, + DecoderInfo { name: "indeo3", get_decoder: indeo::indeo3::get_decoder }, +#[cfg(feature="decoder_intel263")] + DecoderInfo { name: "intel263", get_decoder: h263::intel263::get_decoder }, #[cfg(feature="decoder_pcm")] DecoderInfo { name: "pcm", get_decoder: pcm::get_decoder }, @@ -147,6 +153,7 @@ use std::io::prelude::*; #[allow(dead_code)] fn write_pgmyuv(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) { let frm = frmref.borrow(); + if let NABufferType::None = frm.get_buffer() { return; } let name = format!("assets/{}out{:02}_{:04}.pgm", pfx, strno, num); let mut ofile = File::create(name).unwrap(); let buf = frm.get_buffer().get_vbuf().unwrap(); @@ -158,7 +165,7 @@ fn write_pgmyuv(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) { let dta = buf.get_data(); let ls = buf.get_stride(0); let mut idx = 0; - let mut idx2 = ls; + let mut idx2 = w; let mut pad: Vec = Vec::with_capacity((w - w2 * 2) / 2); pad.resize((w - w2 * 2) / 2, 0xFF); for _ in 0..h {