summaryrefslogtreecommitdiff
path: root/libavcodec/h263.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2004-06-14 23:41:41 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-06-14 23:41:41 +0000
commitcaacc47ff9decebaa062ae3a07287af2420ebf1e (patch)
tree9dd6d9f69b53180544f7a02c648d67494d7ad291 /libavcodec/h263.c
parentca6ecf50f95c9c871a7e77f72a84b4212f9d6ad7 (diff)
coefficient saturation fix
Originally committed as revision 3224 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263.c')
-rw-r--r--libavcodec/h263.c24
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);