X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-registry%2Fsrc%2Fdetect.rs;h=11fd2ed00be1d6140cf42587071551d9840284be;hp=a34670ef049bfc98a4f872a8a7b1ba61ff13bbc2;hb=fd7e6906598e7fe87d928e5c7f4116a51a08a3ac;hpb=8d91d85f878bac4d415d313cebe450865a520f35 diff --git a/nihav-registry/src/detect.rs b/nihav-registry/src/detect.rs index a34670e..11fd2ed 100644 --- a/nihav-registry/src/detect.rs +++ b/nihav-registry/src/detect.rs @@ -7,7 +7,7 @@ //! # Examples //! //! ```no_run -//! use nihav_core::detect::detect_format; +//! use nihav_registry::detect::detect_format; //! use std::fs::File; //! use nihav_core::io::byteio::*; //! @@ -118,29 +118,39 @@ impl Arg { } } fn eq(&self, src: &mut ByteReader) -> bool { - let val = self.read_val(src); - if val.is_none() { false } - else { val.unwrap() == self.val() } + if let Some(rval) = self.read_val(src) { + rval == self.val() + } else { + false + } } fn ge(&self, src: &mut ByteReader) -> bool { - let val = self.read_val(src); - if val.is_none() { false } - else { val.unwrap() >= self.val() } + if let Some(rval) = self.read_val(src) { + rval >= self.val() + } else { + false + } } fn gt(&self, src: &mut ByteReader) -> bool { - let val = self.read_val(src); - if val.is_none() { false } - else { val.unwrap() > self.val() } + if let Some(rval) = self.read_val(src) { + rval > self.val() + } else { + false + } } fn le(&self, src: &mut ByteReader) -> bool { - let val = self.read_val(src); - if val.is_none() { false } - else { val.unwrap() <= self.val() } + if let Some(rval) = self.read_val(src) { + rval <= self.val() + } else { + false + } } fn lt(&self, src: &mut ByteReader) -> bool { - let val = self.read_val(src); - if val.is_none() { false } - else { val.unwrap() < self.val() } + if let Some(rval) = self.read_val(src) { + rval < self.val() + } else { + false + } } } @@ -220,6 +230,17 @@ const DETECTORS: &[DetectConditions] = &[ &CC::Str(b"moov")), &CC::Str(b"ftyp")) }], }, + DetectConditions { + demux_name: "yuv4mpeg", + extensions: ".y4m", + conditions: &[CheckItem{offs: 0, cond: &CC::Str(b"YUV4MPEG2 ") }], + }, + DetectConditions { + demux_name: "ivf", + extensions: ".ivf", + conditions: &[CheckItem{offs: 0, cond: &CC::Str(b"DKIF\x00\x00")}, + CheckItem{offs: 6, cond: &CC::Ge(Arg::U16LE(32))}], + }, DetectConditions { demux_name: "fcmp", extensions: ".cmp", @@ -235,6 +256,18 @@ const DETECTORS: &[DetectConditions] = &[ extensions: ".gdv", conditions: &[CheckItem{offs: 0, cond: &CC::Eq(Arg::U32LE(0x29111994))}], }, + DetectConditions { + demux_name: "fable-imax", + extensions: ".imx", + conditions: &[CheckItem{offs: 0, cond: &CC::Str(b"IMAX") }, + CheckItem{offs: 10, cond: &CC::Eq(Arg::U16LE(0x102)) }], + }, + DetectConditions { + demux_name: "legend-q", + extensions: ".q", + conditions: &[CheckItem{offs: 0, cond: &CC::Eq(Arg::U16LE(0x6839))}, + CheckItem{offs: 2, cond: &CC::In(Arg::Byte(3), Arg::Byte(5))}], + }, DetectConditions { demux_name: "realaudio", extensions: ".ra,.ram", @@ -389,7 +422,7 @@ pub fn detect_format_by_name(name: &str) -> Option<&'static str> { mod test { use super::*; use std::fs::File; - use crate::io::byteio::*; + use nihav_core::io::byteio::*; #[test] fn test_avi_detect() {