]> git.nihav.org Git - nihav.git/commitdiff
mpeg4asp: improve check for XviD-specific format
authorKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 21 Aug 2025 16:06:29 +0000 (18:06 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 21 Aug 2025 16:06:29 +0000 (18:06 +0200)
Apparently it is better not to enable XviD-specific DCT on older files.

nihav-mpeg/src/codecs/mpeg4asp/bitstream.rs

index 8d919735fc1fe320959653b814aa0a4c40049326..5dcbc4a7958729854d91dafb82c03615994639b9 100644 (file)
@@ -51,7 +51,19 @@ pub fn scan_start_codes(src: &[u8]) -> DecoderResult<Vec<usize>> {
 }
 
 pub fn check_xvid_user_data(src: &[u8]) -> bool {
-    src.len() > 7 && &src[1..5] == b"XviD"
+    let is_xvid = src.len() > 7 && &src[1..5] == b"XviD";
+    if is_xvid { // check for version
+        let mut ver = 0;
+        for &c in src[6..].iter() {
+            if !c.is_ascii_digit() { break; }
+            ver = ver * 10 + u32::from(c - b'0');
+            if ver > 1048576 { return false; }
+        }
+        if ver < 50 { // these ones apparently use non-special DCT
+            return false;
+        }
+    }
+    is_xvid
 }
 
 fn read_var_len(br: &mut BitReader) -> DecoderResult<u32> {