Browse Source

simplify getsymbol patch by (Loren Merritt <lorenm at u dot washington dot edu>)

Originally committed as revision 3476 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Loren Merritt Michael Niedermayer 21 years ago
parent
commit
7c2425d239
1 changed files with 8 additions and 17 deletions
  1. +8
    -17
      libavcodec/snow.c

+ 8
- 17
libavcodec/snow.c View File

@@ -507,27 +507,18 @@ static inline int get_symbol(CABACContext *c, uint8_t *state, int is_signed){
if(get_cabac(c, state+0))
return 0;
else{
int i, e, a, el;
//FIXME try to merge loops with FFMIN() maybe they are equally fast and they are surly cuter
for(e=0; e<10; e++){
if(get_cabac(c, state + 1 + e)==0) // 1..10
break;
}
el= e;
if(e==10){
while(get_cabac(c, state + 1 + 9)) //10
e++;
int i, e, a;
e= 0;
while(get_cabac(c, state+1 + FFMIN(e,9))){ //1..10
e++;
}

a= 1;
for(i=e-1; i>=el; i--){
a += a + get_cabac(c, state+22+9); //31
}
for(; i>=0; i--){
a += a + get_cabac(c, state+22+i); //22..31
for(i=e-1; i>=0; i--){
a += a + get_cabac(c, state+22 + FFMIN(i,9)); //22..31
}

if(is_signed && get_cabac(c, state+11 + el)) //11..21
if(is_signed && get_cabac(c, state+11 + FFMIN(e,10))) //11..21
return -a;
else
return a;


Loading…
Cancel
Save