RAD formats crate and Smacker demuxer and decoder
[nihav.git] / nihav-rad / src / codecs / mod.rs
diff --git a/nihav-rad/src/codecs/mod.rs b/nihav-rad/src/codecs/mod.rs
new file mode 100644 (file)
index 0000000..4ce5563
--- /dev/null
@@ -0,0 +1,35 @@
+use nihav_core::codecs::*;
+
+macro_rules! validate {
+    ($a:expr) => { if !$a { println!("check failed at {}:{}", file!(), line!()); return Err(DecoderError::InvalidData); } };
+}
+
+#[cfg(any(feature="decoder_smkaud", feature="decoder_smkvid"))]
+mod smacker;
+#[cfg(feature="decoder_binkaud")]
+mod binkaud;
+#[cfg(feature="decoder_binkvid")]
+mod binkvid;
+#[cfg(feature="decoder_bink2")]
+mod bink2;
+
+const RAD_CODECS: &[DecoderInfo] = &[
+#[cfg(feature="decoder_smkaud")]
+    DecoderInfo { name: "smacker-audio", get_decoder: smacker::get_decoder_audio },
+#[cfg(feature="decoder_smkvid")]
+    DecoderInfo { name: "smacker-video", get_decoder: smacker::get_decoder_video },
+#[cfg(feature="decoder_binkaud")]
+    DecoderInfo { name: "bink-audio-dct", get_decoder: binkaud::get_decoder_dct },
+#[cfg(feature="decoder_binkaud")]
+    DecoderInfo { name: "bink-audio-rdft", get_decoder: binkaud::get_decoder_rdft },
+#[cfg(feature="decoder_binkvid")]
+    DecoderInfo { name: "bink-video", get_decoder: binkvid::get_decoder },
+#[cfg(feature="decoder_bink2")]
+    DecoderInfo { name: "bink2-video", get_decoder: bink2::get_decoder },
+];
+
+pub fn rad_register_all_codecs(rd: &mut RegisteredDecoders) {
+    for decoder in RAD_CODECS.into_iter() {
+        rd.add_decoder(decoder.clone());
+    }
+}