]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/h264: Fix for H.264 configuration parsing
authorIvan <grigoriev.ivan.a@gmail.com>
Tue, 12 Apr 2016 20:32:04 +0000 (16:32 -0400)
committerMichael Niedermayer <michael@niedermayer.cc>
Sun, 17 Apr 2016 00:39:36 +0000 (02:39 +0200)
Sometimes video fails to decode if H.264 configuration changes mid stream.
The reason is that configuration parser assumes that nal_ref_idc is equal to 11b
while actually some codecs but 01b there. The H.264 spec is somewhat
vague about this but it looks like it allows any non-zero nal_ref_idc for sps/pps.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/h264.c

index f1399b886abae8f5235195e48e0d80d144cf71a5..88768af733ddd844233397e6ac119562ca65714f 100644 (file)
@@ -1781,7 +1781,7 @@ static int is_extra(const uint8_t *buf, int buf_size)
     const uint8_t *p= buf+6;
     while(cnt--){
         int nalsize= AV_RB16(p) + 2;
-        if(nalsize > buf_size - (p-buf) || p[2]!=0x67)
+        if(nalsize > buf_size - (p-buf) || (p[2] & 0x9F) != 7)
             return 0;
         p += nalsize;
     }
@@ -1790,7 +1790,7 @@ static int is_extra(const uint8_t *buf, int buf_size)
         return 0;
     while(cnt--){
         int nalsize= AV_RB16(p) + 2;
-        if(nalsize > buf_size - (p-buf) || p[2]!=0x68)
+        if(nalsize > buf_size - (p-buf) || (p[2] & 0x9F) != 8)
             return 0;
         p += nalsize;
     }