RealVideo 4 encoder
[nihav.git] / nihav-realmedia / src / codecs / mod.rs
CommitLineData
5641dccf
KS
1use nihav_core::codecs::*;
2
71d7f397 3#[cfg(debug_assertions)]
5641dccf
KS
4macro_rules! validate {
5 ($a:expr) => { if !$a { println!("check failed at {}:{}", file!(), line!()); return Err(DecoderError::InvalidData); } };
6}
71d7f397
KS
7#[cfg(not(debug_assertions))]
8macro_rules! validate {
9 ($a:expr) => { if !$a { return Err(DecoderError::InvalidData); } };
10}
5641dccf
KS
11
12#[cfg(any(feature="decoder_realvideo3", feature="decoder_realvideo4"))]
13mod rv3040;
4965a5e5 14#[cfg(any(feature="decoder_realvideo3", feature="decoder_realvideo4", feature="encoder_realvideo4"))]
61d3e294 15#[allow(clippy::erasing_op)]
5641dccf
KS
16mod rv34codes;
17#[cfg(any(feature="decoder_realvideo3", feature="decoder_realvideo4"))]
61d3e294 18#[allow(clippy::erasing_op)]
e07387c7 19#[allow(clippy::many_single_char_names)]
5641dccf
KS
20mod rv34dsp;
21
22#[cfg(feature="decoder_realvideo1")]
23pub mod rv10;
24#[cfg(feature="decoder_realvideo2")]
25pub mod rv20;
26#[cfg(feature="decoder_realvideo3")]
27pub mod rv30;
28#[cfg(feature="decoder_realvideo3")]
61d3e294 29#[allow(clippy::erasing_op)]
e07387c7
KS
30#[allow(clippy::many_single_char_names)]
31#[allow(clippy::neg_multiply)]
5641dccf
KS
32pub mod rv30dsp;
33#[cfg(feature="decoder_realvideo4")]
34pub mod rv40;
4965a5e5 35#[cfg(any(feature="decoder_realvideo4", feature="encoder_realvideo4"))]
eb904044
KS
36pub mod rv40data;
37#[cfg(feature="decoder_realvideo4")]
61d3e294 38#[allow(clippy::erasing_op)]
e07387c7 39#[allow(clippy::many_single_char_names)]
5641dccf
KS
40pub mod rv40dsp;
41#[cfg(feature="decoder_realvideo6")]
42pub mod rv60;
43#[cfg(feature="decoder_realvideo6")]
44pub mod rv60codes;
45#[cfg(feature="decoder_realvideo6")]
61d3e294 46#[allow(clippy::erasing_op)]
e07387c7 47#[allow(clippy::many_single_char_names)]
5641dccf
KS
48pub mod rv60dsp;
49
50#[cfg(feature="decoder_realaudio144")]
fa57381e 51#[allow(clippy::manual_memcpy)]
5641dccf
KS
52pub mod ra144;
53#[cfg(feature="decoder_realaudio288")]
54pub mod ra288;
55#[cfg(feature="decoder_cook")]
56pub mod cook;
f5c7ce01 57#[cfg(any(feature="decoder_cook", feature="encoder_cook"))]
38c78f36 58pub mod cookdata;
5641dccf
KS
59#[cfg(feature="decoder_ralf")]
60pub mod ralf;
61
62const RM_CODECS: &[DecoderInfo] = &[
63#[cfg(feature="decoder_realvideo1")]
64 DecoderInfo { name: "realvideo1", get_decoder: rv10::get_decoder },
65#[cfg(feature="decoder_realvideo2")]
66 DecoderInfo { name: "realvideo2", get_decoder: rv20::get_decoder },
67#[cfg(feature="decoder_realvideo3")]
68 DecoderInfo { name: "realvideo3", get_decoder: rv30::get_decoder },
69#[cfg(feature="decoder_realvideo4")]
70 DecoderInfo { name: "realvideo4", get_decoder: rv40::get_decoder },
71#[cfg(feature="decoder_realvideo6")]
72 DecoderInfo { name: "realvideo6", get_decoder: rv60::get_decoder },
73
74#[cfg(feature="decoder_realaudio144")]
75 DecoderInfo { name: "ra14.4", get_decoder: ra144::get_decoder },
76#[cfg(feature="decoder_realaudio288")]
77 DecoderInfo { name: "ra28.8", get_decoder: ra288::get_decoder },
78#[cfg(feature="decoder_cook")]
79 DecoderInfo { name: "cook", get_decoder: cook::get_decoder },
80#[cfg(feature="decoder_ralf")]
81 DecoderInfo { name: "ralf", get_decoder: ralf::get_decoder },
82];
83
e64739f8 84/// Registers all available codecs provided by this crate.
78fb6560 85pub fn realmedia_register_all_decoders(rd: &mut RegisteredDecoders) {
61d3e294 86 for decoder in RM_CODECS.iter() {
b7c882c1 87 rd.add_decoder(*decoder);
5641dccf
KS
88 }
89}
f5c7ce01
KS
90
91#[cfg(feature="encoder_cook")]
92mod cookenc;
93
4965a5e5
KS
94#[cfg(feature="encoder_rv40")]
95mod rv40enc;
96
f5c7ce01
KS
97#[cfg(feature="encoders")]
98const ENCODERS: &[EncoderInfo] = &[
99#[cfg(feature="encoder_cook")]
100 EncoderInfo { name: "cook", get_encoder: cookenc::get_encoder },
4965a5e5
KS
101
102#[cfg(feature="encoder_rv40")]
103 EncoderInfo { name: "realvideo4", get_encoder: rv40enc::get_encoder },
f5c7ce01
KS
104];
105
106/// Registers all available encoders provided by this crate.
107#[cfg(feature="encoders")]
108pub fn realmedia_register_all_encoders(re: &mut RegisteredEncoders) {
109 for encoder in ENCODERS.iter() {
110 re.add_encoder(*encoder);
111 }
112}