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;