From: Kostya Shishkov Date: Sat, 31 Oct 2026 14:58:47 +0000 (+0100) Subject: h264: allow configuration data without 'avcC' prefix X-Git-Url: https://git.nihav.org/?a=commitdiff_plain;h=3d42787dd01c46e683e46285d10065007cc33f9e;p=nihav.git h264: allow configuration data without 'avcC' prefix --- diff --git a/nihav-itu/src/codecs/h264/baseline/decoder_mt.rs b/nihav-itu/src/codecs/h264/baseline/decoder_mt.rs index d5323f6..083b861 100644 --- a/nihav-itu/src/codecs/h264/baseline/decoder_mt.rs +++ b/nihav-itu/src/codecs/h264/baseline/decoder_mt.rs @@ -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()?; diff --git a/nihav-itu/src/codecs/h264/baseline/decoder_st.rs b/nihav-itu/src/codecs/h264/baseline/decoder_st.rs index 683c031..8d2b5c8 100644 --- a/nihav-itu/src/codecs/h264/baseline/decoder_st.rs +++ b/nihav-itu/src/codecs/h264/baseline/decoder_st.rs @@ -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()?; diff --git a/nihav-itu/src/codecs/h264/high/decoder_mt.rs b/nihav-itu/src/codecs/h264/high/decoder_mt.rs index 978eccf..90ca8f2 100644 --- a/nihav-itu/src/codecs/h264/high/decoder_mt.rs +++ b/nihav-itu/src/codecs/h264/high/decoder_mt.rs @@ -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()?; diff --git a/nihav-itu/src/codecs/h264/high/decoder_st.rs b/nihav-itu/src/codecs/h264/high/decoder_st.rs index b125d93..a01181b 100644 --- a/nihav-itu/src/codecs/h264/high/decoder_st.rs +++ b/nihav-itu/src/codecs/h264/high/decoder_st.rs @@ -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()?; diff --git a/nihav-itu/src/codecs/h264/mod.rs b/nihav-itu/src/codecs/h264/mod.rs index bc75f9d..ef118ff 100644 --- a/nihav-itu/src/codecs/h264/mod.rs +++ b/nihav-itu/src/codecs/h264/mod.rs @@ -169,11 +169,13 @@ fn unescape_nal(src: &[u8], dst: &mut Vec) -> usize { } fn is_high_bitdepth(edata: &[u8]) -> DecoderResult { - 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()?;