[vlc-commits] demux: h264: probe non sps nal

Francois Cartegnie git at videolan.org
Sat Apr 11 17:38:28 CEST 2015


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Sat Apr 11 17:36:34 2015 +0200| [52ed5f49ac4f96645b611e6c0e733fc37255ad53] | committer: Francois Cartegnie

demux: h264: probe non sps nal

first nal from raw h264 dump might not be sps

refs issues/raw-h264/test.h264

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=52ed5f49ac4f96645b611e6c0e733fc37255ad53
---

 modules/demux/mpeg/h264.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/modules/demux/mpeg/h264.c b/modules/demux/mpeg/h264.c
index fa43994..1d2f910 100644
--- a/modules/demux/mpeg/h264.c
+++ b/modules/demux/mpeg/h264.c
@@ -84,9 +84,14 @@ static int Open( vlc_object_t * p_this )
 
     if( stream_Peek( p_demux->s, &p_peek, 5 ) < 5 ) return VLC_EGENERIC;
 
-    if( p_peek[0] != 0x00 || p_peek[1] != 0x00 ||
-        p_peek[2] != 0x00 || p_peek[3] != 0x01 ||
-        (p_peek[4]&0x1F) != 7 ) /* SPS */
+    const uint8_t i_nal_type = p_peek[4] & 0x1F;
+    const uint8_t i_ref_idc = p_peek[4] & 0x60;
+    if( memcmp( p_peek, "\x00\x00\x00\x01", 4 ) ||
+       (p_peek[4] & 0x80) || /* reserved 0 */
+        i_nal_type == 0 || i_nal_type > 12 ||
+       ( !i_ref_idc && (i_nal_type < 6 || i_nal_type == 7 || i_nal_type == 8) ) ||
+       (  i_ref_idc && (i_nal_type == 6 || i_nal_type >= 9) )
+      )
     {
         if( !p_demux->b_force )
         {



More information about the vlc-commits mailing list