Mercurial > libavcodec.hg
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; |