diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2004-06-14 23:41:41 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2004-06-14 23:41:41 +0000 |
commit | caacc47ff9decebaa062ae3a07287af2420ebf1e (patch) | |
tree | 9dd6d9f69b53180544f7a02c648d67494d7ad291 | |
parent | ca6ecf50f95c9c871a7e77f72a84b4212f9d6ad7 (diff) | |
download | ffmpeg-caacc47ff9decebaa062ae3a07287af2420ebf1e.tar.gz |
coefficient saturation fix
Originally committed as revision 3224 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/h263.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/libavcodec/h263.c b/libavcodec/h263.c index 9175eff0ef..b89119004d 100644 --- a/libavcodec/h263.c +++ b/libavcodec/h263.c @@ -4717,8 +4717,6 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block, 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); @@ -4744,16 +4742,6 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block, SKIP_COUNTER(re, &s->gb, 1+12+1); } - 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); @@ -4779,6 +4767,16 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block, if (level>0) level= level * qmul + qadd; else level= level * qmul - qadd; + if((unsigned)(level + 2048) > 4095){ + if(s->error_resilience > FF_ER_COMPLIANT){ + if(level > 2560 || level<-2560){ + av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale); + return -1; + } + } + level= level<0 ? -2048 : 2047; + } + i+= run + 1; if(last) i+=192; } else { @@ -6062,7 +6060,7 @@ int flv_h263_decode_picture_header(MpegEncContext *s) s->dropable= s->pict_type > P_TYPE; if (s->dropable) s->pict_type = P_TYPE; - + skip_bits1(&s->gb); /* deblocking flag */ s->chroma_qscale= s->qscale = get_bits(&s->gb, 5); |