comparison 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
comparison
equal deleted inserted replaced
1392:13a02518ffb6 1393:ba99a78bcb37
2498 s->qscale = get_bits(&s->gb, 5); /* GQUANT */ 2498 s->qscale = get_bits(&s->gb, 5); /* GQUANT */
2499 if(s->qscale==0) 2499 if(s->qscale==0)
2500 return -1; 2500 return -1;
2501 s->mb_x= 0; 2501 s->mb_x= 0;
2502 s->mb_y= s->gob_index* s->gob_number; 2502 s->mb_y= s->gob_index* s->gob_number;
2503 if(s->mb_y >= s->mb_height)
2504 return -1;
2503 #ifdef DEBUG 2505 #ifdef DEBUG
2504 fprintf(stderr, "\nGN: %u GFID: %u Quant: %u\n", s->gob_number, gfid, s->qscale); 2506 fprintf(stderr, "\nGN: %u GFID: %u Quant: %u\n", s->gob_number, gfid, s->qscale);
2505 #endif 2507 #endif
2506 return 0; 2508 return 0;
2507 } 2509 }
4067 4069
4068 align_get_bits(&s->gb); 4070 align_get_bits(&s->gb);
4069 4071
4070 startcode= get_bits(&s->gb, 22-8); 4072 startcode= get_bits(&s->gb, 22-8);
4071 4073
4072 for(i= s->gb.size_in_bits - get_bits_count(&s->gb); i>0; i--) { 4074 for(i= s->gb.size_in_bits - get_bits_count(&s->gb); i>24; i-=8) {
4073 startcode = ((startcode << 8) | get_bits(&s->gb, 8)) & 0x003FFFFF; 4075 startcode = ((startcode << 8) | get_bits(&s->gb, 8)) & 0x003FFFFF;
4074 4076
4075 if(startcode == 0x20) 4077 if(startcode == 0x20)
4076 break; 4078 break;
4077 } 4079 }
4114 width = h263_format[format][0]; 4116 width = h263_format[format][0];
4115 height = h263_format[format][1]; 4117 height = h263_format[format][1];
4116 if (!width) 4118 if (!width)
4117 return -1; 4119 return -1;
4118 4120
4119 s->width = width;
4120 s->height = height;
4121 s->pict_type = I_TYPE + get_bits1(&s->gb); 4121 s->pict_type = I_TYPE + get_bits1(&s->gb);
4122 4122
4123 s->unrestricted_mv = get_bits1(&s->gb); 4123 s->unrestricted_mv = get_bits1(&s->gb);
4124 s->h263_long_vectors = s->unrestricted_mv; 4124 s->h263_long_vectors = s->unrestricted_mv;
4125 4125
4135 fprintf(stderr, "H263 PB frame not supported\n"); 4135 fprintf(stderr, "H263 PB frame not supported\n");
4136 return -1; /* not PB frame */ 4136 return -1; /* not PB frame */
4137 } 4137 }
4138 s->qscale = get_bits(&s->gb, 5); 4138 s->qscale = get_bits(&s->gb, 5);
4139 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */ 4139 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
4140
4141 s->width = width;
4142 s->height = height;
4140 } else { 4143 } else {
4141 int ufep; 4144 int ufep;
4142 4145
4143 /* H.263v2 */ 4146 /* H.263v2 */
4144 s->h263_plus = 1; 4147 s->h263_plus = 1;