Mercurial > libavcodec.hg
changeset 1976:5dfde318d44a libavcodec
fix decoding with quant matrixes which contain elements <16
author | michael |
---|---|
date | Sun, 25 Apr 2004 19:03:35 +0000 |
parents | 6876ae55b5e7 |
children | 89422281f6f6 |
files | h263.c |
diffstat | 1 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/h263.c Sun Apr 25 16:14:13 2004 +0000 +++ b/h263.c Sun Apr 25 19:03:35 2004 +0000 @@ -4722,6 +4722,8 @@ if (cache&0x80000000) { if (cache&0x40000000) { + int ulevel; + /* third escape */ SKIP_CACHE(re, &s->gb, 2); last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1); @@ -4747,10 +4749,16 @@ SKIP_COUNTER(re, &s->gb, 1+12+1); } - if(level*s->qscale>1024 || level*s->qscale<-1024){ + if(s->mpeg_quant){ + if(intra) ulevel= level*s->qscale*s->intra_matrix[scan_table[1]]; + else ulevel= level*s->qscale*s->inter_matrix[scan_table[0]]; + }else + ulevel= level*s->qscale*16; + if(ulevel>1030*16 || ulevel<-1030*16){ av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale); return -1; } + #if 0 if(s->error_resilience >= FF_ER_COMPLIANT){ const int abs_level= ABS(level);