]> git.nihav.org Git - nihav.git/commitdiff
h264: allow configuration data without 'avcC' prefix
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 31 Oct 2026 14:58:47 +0000 (15:58 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 31 Oct 2026 15:04:59 +0000 (16:04 +0100)
nihav-itu/src/codecs/h264/baseline/decoder_mt.rs
nihav-itu/src/codecs/h264/baseline/decoder_st.rs
nihav-itu/src/codecs/h264/high/decoder_mt.rs
nihav-itu/src/codecs/h264/high/decoder_st.rs
nihav-itu/src/codecs/h264/mod.rs

index d5323f613390a8572c28c51fac3d0cfc75654d70..083b8616991048f34333c7aecb405d176dfc25cb 100644 (file)
@@ -729,10 +729,12 @@ impl NADecoderMT for H264MTDecoder {
 
             let edata = info.get_extradata().unwrap();
 //print!("edata:"); for &el in edata.iter() { print!(" {:02X}", el); } println!();
-            if edata.len() > 11 && &edata[0..4] == b"avcC" {
+            if edata.len() > 7 {
                 let mut br = MemoryReader::new_read(edata.as_slice());
 
+                if &edata[0..4] == b"avcC" {
                                           br.read_skip(4)?;
+                }
                 let version             = br.read_byte()?;
                 validate!(version == 1);
                 let profile             = br.read_byte()?;
index 683c03153de763efd422bdf1c0aacbda171f4932..8d2b5c846710d82d8bdabfdb9e3b63b6d08dedd7 100644 (file)
@@ -726,11 +726,13 @@ impl NADecoder for H264Decoder {
 
             let edata = info.get_extradata().unwrap();
 //print!("edata:"); for &el in edata.iter() { print!(" {:02X}", el); } println!();
-            if edata.len() > 11 && &edata[0..4] == b"avcC" {
+            if edata.len() > 7 {
                 let mut br = MemoryReader::new_read(edata.as_slice());
                 let mut nal_buf = Vec::new();
 
+                if &edata[0..4] == b"avcC" {
                                           br.read_skip(4)?;
+                }
                 let version             = br.read_byte()?;
                 validate!(version == 1);
                 let profile             = br.read_byte()?;
index 978eccf412f34a2b2165fc1ca8295c65c7d16ea4..90ca8f29783d4d4601775d3fdb2433a13a8d6d36 100644 (file)
@@ -747,10 +747,12 @@ impl NADecoderMT for H264MTDecoder {
 
             let edata = info.get_extradata().unwrap();
 //print!("edata:"); for &el in edata.iter() { print!(" {:02X}", el); } println!();
-            if edata.len() > 11 && &edata[0..4] == b"avcC" {
+            if edata.len() > 7 {
                 let mut br = MemoryReader::new_read(edata.as_slice());
 
+                if &edata[0..4] == b"avcC" {
                                           br.read_skip(4)?;
+                }
                 let version             = br.read_byte()?;
                 validate!(version == 1);
                 let profile             = br.read_byte()?;
index b125d93e3453d25aa2ca79ca3c233742f2c6e501..a01181b1c6e5cc16fcbec123db13238c0aa1bd9f 100644 (file)
@@ -743,11 +743,13 @@ impl NADecoder for H264Decoder {
 
             let edata = info.get_extradata().unwrap();
 //print!("edata:"); for &el in edata.iter() { print!(" {:02X}", el); } println!();
-            if edata.len() > 11 && &edata[0..4] == b"avcC" {
+            if edata.len() > 7 {
                 let mut br = MemoryReader::new_read(edata.as_slice());
                 let mut nal_buf = Vec::new();
 
+                if &edata[0..4] == b"avcC" {
                                           br.read_skip(4)?;
+                }
                 let version             = br.read_byte()?;
                 validate!(version == 1);
                 let profile             = br.read_byte()?;
index bc75f9de30f90d444887177e3dbadf5c82ba0598..ef118ff0239b104750b5d89ebd74dce15324d3f2 100644 (file)
@@ -169,11 +169,13 @@ fn unescape_nal(src: &[u8], dst: &mut Vec<u8>) -> usize {
 }
 
 fn is_high_bitdepth(edata: &[u8]) -> DecoderResult<bool> {
-    if edata.len() > 11 && &edata[0..4] == b"avcC" {
+    if edata.len() > 7 {
         let mut br = MemoryReader::new_read(edata);
         let mut nal_buf = Vec::new();
 
+        if &edata[0..4] == b"avcC" {
                                   br.read_skip(4)?;
+        }
         let version             = br.read_byte()?;
         validate!(version == 1);
         let profile             = br.read_byte()?;