&CC::Str(b"ON2fLIST")) },
]
},
+ DetectConditions {
+ demux_name: "wav",
+ extensions: ".wav",
+ conditions: &[CheckItem{offs: 0, cond: &CC::Str(b"RIFF") },
+ CheckItem{offs: 8, cond: &CC::Str(b"WAVEfmt ") }
+ ]
+ },
+ DetectConditions {
+ demux_name: "mov",
+ extensions: ".mov",
+ conditions: &[CheckItem{offs: 4, cond: &CC::Or(&CC::Or(&CC::Str(b"mdat"),
+ &CC::Str(b"moov")),
+ &CC::Str(b"ftyp")) }],
+ },
+ DetectConditions {
+ demux_name: "mov",
+ extensions: ".mov",
+ conditions: &[CheckItem{offs: 0, cond: &CC::Str(b"\x00\x00\x00\x08wide") },
+ CheckItem{offs: 12, cond: &CC::Or(&CC::Or(&CC::Str(b"mdat"),
+ &CC::Str(b"moov")),
+ &CC::Str(b"ftyp")) }],
+ },
DetectConditions {
demux_name: "gdv",
extensions: ".gdv",
extensions: ".smk",
conditions: &[CheckItem{offs: 0, cond: &CC::Or(&CC::Str(b"SMK2"), &CC::Str(b"SMK4"))}],
},
+ DetectConditions {
+ demux_name: "vivo",
+ extensions: ".viv",
+ conditions: &[CheckItem{offs: 0, cond: &CC::In(Arg::U16BE(1), Arg::U16BE(0xFF))},
+ CheckItem{offs: 2, cond: &CC::Str(b"\x0D\x0AVersion:Vivo/")}],
+ },
+ DetectConditions {
+ demux_name: "vivo",
+ extensions: ".viv",
+ conditions: &[CheckItem{offs: 0, cond: &CC::In(Arg::U16BE(1), Arg::U16BE(0xFF))},
+ CheckItem{offs: 3, cond: &CC::Str(b"\x0D\x0AVersion:Vivo/")}],
+ },
DetectConditions {
demux_name: "bmv",
extensions: ".bmv",
result
}
+/// Tries to detect container format for provided file name.
+pub fn detect_format_by_name(name: &str) -> Option<(&'static str)> {
+ if name.is_empty() {
+ return None;
+ }
+ let lname = name.to_lowercase();
+ for detector in DETECTORS {
+ for ext in detector.extensions.split(',') {
+ if lname.ends_with(ext) {
+ return Some(detector.demux_name);
+ }
+ }
+ }
+ None
+}
+
#[cfg(test)]
mod test {
use super::*;