diff h263.c @ 1393:ba99a78bcb37 libavcodec

make the h263 decoder more error tolerant
author michaelni
date Fri, 01 Aug 2003 11:00:03 +0000
parents 39d07c0263de
children e380ac39024a
line wrap: on
line diff
--- a/h263.c	Tue Jul 29 14:15:28 2003 +0000
+++ b/h263.c	Fri Aug 01 11:00:03 2003 +0000
@@ -2500,6 +2500,8 @@
         return -1;
     s->mb_x= 0;
     s->mb_y= s->gob_index* s->gob_number;
+    if(s->mb_y >= s->mb_height) 
+        return -1;
 #ifdef DEBUG
     fprintf(stderr, "\nGN: %u GFID: %u Quant: %u\n", s->gob_number, gfid, s->qscale);
 #endif
@@ -4069,7 +4071,7 @@
 
     startcode= get_bits(&s->gb, 22-8);
 
-    for(i= s->gb.size_in_bits - get_bits_count(&s->gb); i>0; i--) {
+    for(i= s->gb.size_in_bits - get_bits_count(&s->gb); i>24; i-=8) {
         startcode = ((startcode << 8) | get_bits(&s->gb, 8)) & 0x003FFFFF;
         
         if(startcode == 0x20)
@@ -4116,8 +4118,6 @@
         if (!width)
             return -1;
         
-        s->width = width;
-        s->height = height;
         s->pict_type = I_TYPE + get_bits1(&s->gb);
 
         s->unrestricted_mv = get_bits1(&s->gb); 
@@ -4137,6 +4137,9 @@
         }
         s->qscale = get_bits(&s->gb, 5);
         skip_bits1(&s->gb);	/* Continuous Presence Multipoint mode: off */
+
+        s->width = width;
+        s->height = height;
     } else {
         int ufep;