diff options
author | Ivan <grigoriev.ivan.a@gmail.com> | 2016-04-12 16:32:04 -0400 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2016-04-29 14:23:41 +0200 |
commit | f3ec2a0859f04b825ba4282275d41c1ebe735cc7 (patch) | |
tree | c5b9d7c533eebbf4337996d6f2e10aadaa6061d9 | |
parent | 036d049fb1f2a23938501fc00bcc9e4d0f010b96 (diff) | |
download | ffmpeg-f3ec2a0859f04b825ba4282275d41c1ebe735cc7.tar.gz |
avcodec/h264: Fix for H.264 configuration parsing
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>
(cherry picked from commit 3a727606c474d3d0b9efa3c900294a84bdb5e331)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | libavcodec/h264.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c index a32366e471..4d331f1445 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -1765,7 +1765,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; } @@ -1774,7 +1774,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; } |