Mercurial > libavcodec.hg
comparison h263.c @ 1254:604661d34c68 libavcodec
bitstream reader optimize patch by (BERO <bero at geocities dot co dot jp>)
author | michaelni |
---|---|
date | Wed, 14 May 2003 00:32:22 +0000 |
parents | 6ce5cde4e1d4 |
children | 625ccacd1113 |
comparison
equal
deleted
inserted
replaced
1253:5642ebadf1b5 | 1254:604661d34c68 |
---|---|
3560 run = get_bits(&s->gb, 6); | 3560 run = get_bits(&s->gb, 6); |
3561 level = (int8_t)get_bits(&s->gb, 8); | 3561 level = (int8_t)get_bits(&s->gb, 8); |
3562 if(level == -128){ | 3562 if(level == -128){ |
3563 if (s->h263_rv10) { | 3563 if (s->h263_rv10) { |
3564 /* XXX: should patch encoder too */ | 3564 /* XXX: should patch encoder too */ |
3565 level = get_bits(&s->gb, 12); | 3565 level = get_sbits(&s->gb, 12); |
3566 level= (level + ((-1)<<11)) ^ ((-1)<<11); //sign extension | |
3567 }else{ | 3566 }else{ |
3568 level = get_bits(&s->gb, 5); | 3567 level = get_bits(&s->gb, 5); |
3569 level += get_bits(&s->gb, 6)<<5; | 3568 level |= get_sbits(&s->gb, 6)<<5; |
3570 level= (level + ((-1)<<10)) ^ ((-1)<<10); //sign extension | |
3571 } | 3569 } |
3572 } | 3570 } |
3573 } else { | 3571 } else { |
3574 run = rl->table_run[code]; | 3572 run = rl->table_run[code]; |
3575 level = rl->table_level[code]; | 3573 level = rl->table_level[code]; |
3617 return -1; | 3615 return -1; |
3618 } | 3616 } |
3619 if (code == 0) { | 3617 if (code == 0) { |
3620 level = 0; | 3618 level = 0; |
3621 } else { | 3619 } else { |
3622 level = get_bits(&s->gb, code); | 3620 level = get_xbits(&s->gb, code); |
3623 if ((level >> (code - 1)) == 0) /* if MSB not set it is negative*/ | |
3624 level = - (level ^ ((1 << code) - 1)); | |
3625 if (code > 8){ | 3621 if (code > 8){ |
3626 if(get_bits1(&s->gb)==0){ /* marker */ | 3622 if(get_bits1(&s->gb)==0){ /* marker */ |
3627 if(s->error_resilience>=2){ | 3623 if(s->error_resilience>=2){ |
3628 fprintf(stderr, "dc marker bit missing\n"); | 3624 fprintf(stderr, "dc marker bit missing\n"); |
3629 return -1; | 3625 return -1; |
4081 int length; | 4077 int length; |
4082 int x=0, y=0; | 4078 int x=0, y=0; |
4083 | 4079 |
4084 length= get_vlc(&s->gb, &sprite_trajectory); | 4080 length= get_vlc(&s->gb, &sprite_trajectory); |
4085 if(length){ | 4081 if(length){ |
4086 x= get_bits(&s->gb, length); | 4082 x= get_xbits(&s->gb, length); |
4087 | |
4088 if ((x >> (length - 1)) == 0) /* if MSB not set it is negative*/ | |
4089 x = - (x ^ ((1 << length) - 1)); | |
4090 } | 4083 } |
4091 if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(&s->gb); /* marker bit */ | 4084 if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(&s->gb); /* marker bit */ |
4092 | 4085 |
4093 length= get_vlc(&s->gb, &sprite_trajectory); | 4086 length= get_vlc(&s->gb, &sprite_trajectory); |
4094 if(length){ | 4087 if(length){ |
4095 y=get_bits(&s->gb, length); | 4088 y=get_xbits(&s->gb, length); |
4096 | |
4097 if ((y >> (length - 1)) == 0) /* if MSB not set it is negative*/ | |
4098 y = - (y ^ ((1 << length) - 1)); | |
4099 } | 4089 } |
4100 skip_bits1(&s->gb); /* marker bit */ | 4090 skip_bits1(&s->gb); /* marker bit */ |
4101 //printf("%d %d %d %d\n", x, y, i, s->sprite_warping_accuracy); | 4091 //printf("%d %d %d %d\n", x, y, i, s->sprite_warping_accuracy); |
4102 d[i][0]= x; | 4092 d[i][0]= x; |
4103 d[i][1]= y; | 4093 d[i][1]= y; |