aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan <grigoriev.ivan.a@gmail.com>2016-04-12 16:32:04 -0400
committerMichael Niedermayer <michael@niedermayer.cc>2016-05-01 05:00:45 +0200
commit2bb9f5d6074a08c9b7c1567c463e6cc3cdf2b450 (patch)
treeaf29a905127c32c2bf1da46e513f712000f6a8df
parent1e46629234aa19f3ad1e94d220cd90510ae58ca6 (diff)
downloadffmpeg-2bb9f5d6074a08c9b7c1567c463e6cc3cdf2b450.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.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 436a079f57..ba3d910b62 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -1821,7 +1821,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;
}
@@ -1830,7 +1830,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;
}