X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-core%2Fsrc%2Fcodecs%2Fmod.rs;h=692269ea7572dd1c03a535ff3a441982a486ab60;hp=f3fabf3a642dad3c249c7c08a9f9fe16ed652aff;hb=2422d9699cd56cbb86ac32b3e8dd026e20a89db5;hpb=5641dccfbf2a70d589cf094a0d4ed5a10f919f00 diff --git a/nihav-core/src/codecs/mod.rs b/nihav-core/src/codecs/mod.rs index f3fabf3..692269e 100644 --- a/nihav-core/src/codecs/mod.rs +++ b/nihav-core/src/codecs/mod.rs @@ -1,9 +1,7 @@ use std::fmt; use std::ops::{Add, AddAssign, Sub, SubAssign}; -use crate::frame::*; -use std::rc::Rc; -use std::cell::RefCell; +pub use crate::frame::*; use std::mem; use crate::io::byteio::ByteIOError; use crate::io::bitreader::BitReaderError; @@ -45,10 +43,6 @@ impl From for DecoderError { fn from(_: AllocatorError) -> Self { DecoderError::AllocError } } -macro_rules! validate { - ($a:expr) => { if !$a { println!("check failed at {}:{}", file!(), line!()); return Err(DecoderError::InvalidData); } }; -} - #[allow(dead_code)] pub struct HAMShuffler { lastframe: Option>, @@ -82,6 +76,10 @@ impl HAMShuffler { } } +impl Default for HAMShuffler { + fn default() -> Self { Self { lastframe: None } } +} + #[allow(dead_code)] pub struct IPShuffler { lastframe: Option>, @@ -106,6 +104,10 @@ impl IPShuffler { } } +impl Default for IPShuffler { + fn default() -> Self { Self { lastframe: None } } +} + #[allow(dead_code)] pub struct IPBShuffler { lastframe: Option>, @@ -156,6 +158,10 @@ impl IPBShuffler { } } +impl Default for IPBShuffler { + fn default() -> Self { Self { lastframe: None, nextframe: None } } +} + #[derive(Debug,Clone,Copy,PartialEq)] pub struct MV { pub x: i16, @@ -225,7 +231,7 @@ impl fmt::Display for MV { pub trait NADecoder { - fn init(&mut self, info: Rc) -> DecoderResult<()>; + fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()>; fn decode(&mut self, pkt: &NAPacket) -> DecoderResult; } @@ -238,48 +244,9 @@ pub struct DecoderInfo { #[cfg(any(feature="h263"))] pub mod blockdsp; -#[cfg(feature="decoder_clearvideo")] -mod clearvideo; -#[cfg(feature="decoder_gdvvid")] -mod gremlinvideo; #[cfg(feature="h263")] pub mod h263; -#[cfg(feature="decoder_aac")] -mod aac; -#[cfg(feature="decoder_atrac3")] -mod atrac3; -#[cfg(feature="decoder_pcm")] -mod pcm; -#[cfg(feature="decoder_sipro")] -mod sipro; -#[cfg(feature="decoder_ts102366")] -mod ts102366; - -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_pcm")] - DecoderInfo { name: "pcm", get_decoder: pcm::get_decoder }, -#[cfg(feature="decoder_sipro")] - DecoderInfo { name: "sipro", get_decoder: sipro::get_decoder }, -#[cfg(feature="decoder_ts102366")] - DecoderInfo { name: "ac3", get_decoder: ts102366::get_decoder }, -#[cfg(feature="decoder_atrac3")] - DecoderInfo { name: "atrac3", get_decoder: atrac3::get_decoder }, -#[cfg(feature="decoder_aac")] - DecoderInfo { name: "aac", get_decoder: aac::get_decoder }, -]; - -pub fn core_register_all_codecs(rd: &mut RegisteredDecoders) { - for decoder in DECODERS.into_iter() { - rd.add_decoder(decoder.clone()); - } -} - pub struct RegisteredDecoders { decs: Vec, } @@ -299,4 +266,7 @@ impl RegisteredDecoders { } None } + pub fn iter(&self) -> std::slice::Iter { + self.decs.iter() + } }