comparison h264.c @ 7225:f8b6ec3e5538 libavcodec

fix IPCM_decode_error.h264
author michael
date Wed, 09 Jul 2008 06:03:59 +0000
parents 82ab987bca8a
children 9a5cdba22eeb
comparison
equal deleted inserted replaced
7224:d5a52b28c9de 7225:f8b6ec3e5538
4350 }else if(prefix==14){ 4350 }else if(prefix==14){
4351 if(suffix_length) 4351 if(suffix_length)
4352 level_code= (prefix<<suffix_length) + get_bits(gb, suffix_length); //part 4352 level_code= (prefix<<suffix_length) + get_bits(gb, suffix_length); //part
4353 else 4353 else
4354 level_code= prefix + get_bits(gb, 4); //part 4354 level_code= prefix + get_bits(gb, 4); //part
4355 }else if(prefix==15){ 4355 }else{
4356 level_code= (prefix<<suffix_length) + get_bits(gb, 12); //part 4356 level_code= (15<<suffix_length) + get_bits(gb, prefix-3); //part
4357 if(suffix_length==0) level_code+=15; //FIXME doesn't make (much)sense 4357 if(suffix_length==0) level_code+=15; //FIXME doesn't make (much)sense
4358 }else{ 4358 if(prefix>=16)
4359 av_log(h->s.avctx, AV_LOG_ERROR, "prefix too large at %d %d\n", s->mb_x, s->mb_y); 4359 level_code += (1<<(prefix-3))-4096;
4360 return -1;
4361 } 4360 }
4362 4361
4363 if(trailing_ones < 3) level_code += 2; 4362 if(trailing_ones < 3) level_code += 2;
4364 4363
4365 suffix_length = 1; 4364 suffix_length = 1;
4373 for(;i<total_coeff;i++) { 4372 for(;i<total_coeff;i++) {
4374 static const int suffix_limit[7] = {0,5,11,23,47,95,INT_MAX }; 4373 static const int suffix_limit[7] = {0,5,11,23,47,95,INT_MAX };
4375 prefix = get_level_prefix(gb); 4374 prefix = get_level_prefix(gb);
4376 if(prefix<15){ 4375 if(prefix<15){
4377 level_code = (prefix<<suffix_length) + get_bits(gb, suffix_length); 4376 level_code = (prefix<<suffix_length) + get_bits(gb, suffix_length);
4378 }else if(prefix==15){
4379 level_code = (prefix<<suffix_length) + get_bits(gb, 12);
4380 }else{ 4377 }else{
4381 av_log(h->s.avctx, AV_LOG_ERROR, "prefix too large at %d %d\n", s->mb_x, s->mb_y); 4378 level_code = (15<<suffix_length) + get_bits(gb, prefix-3);
4382 return -1; 4379 if(prefix>=16)
4380 level_code += (1<<(prefix-3))-4096;
4383 } 4381 }
4384 mask= -(level_code&1); 4382 mask= -(level_code&1);
4385 level[i]= (((2+level_code)>>1) ^ mask) - mask; 4383 level[i]= (((2+level_code)>>1) ^ mask) - mask;
4386 if(level_code > suffix_limit[suffix_length]) 4384 if(level_code > suffix_limit[suffix_length])
4387 suffix_length++; 4385 suffix_length++;