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);