mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-14 22:22:59 +02:00
optimize branchless C CABAC decoder
Originally committed as revision 6607 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
b420448e38
commit
2e1aee80f4
@ -133,11 +133,19 @@ void ff_init_cabac_states(CABACContext *c, uint8_t const (*lps_range)[4],
|
||||
c->mps_state[2*i+3]= 2*mps_state[i]+3;
|
||||
|
||||
if( i ){
|
||||
#ifdef BRANCHLESS_CABAD
|
||||
c->mps_state[-2*i-3]= 2*lps_state[i]+2; //FIXME yes this is not valid C but iam lazy, cleanup welcome
|
||||
c->mps_state[-2*i-4]= 2*lps_state[i]+3;
|
||||
}else{
|
||||
c->mps_state[-2*i-3]= 3;
|
||||
c->mps_state[-2*i-4]= 2;
|
||||
#else
|
||||
c->lps_state[2*i+2]= 2*lps_state[i]+2;
|
||||
c->lps_state[2*i+3]= 2*lps_state[i]+3;
|
||||
}else{
|
||||
c->lps_state[2*i+2]= 3;
|
||||
c->lps_state[2*i+3]= 2;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -452,7 +452,7 @@ static int get_cabac(CABACContext *c, uint8_t * const state){
|
||||
int bit, lps_mask attribute_unused;
|
||||
|
||||
c->range -= RangeLPS;
|
||||
#if 1
|
||||
#ifndef BRANCHLESS_CABAD
|
||||
if(c->low < c->range){
|
||||
bit= s&1;
|
||||
*state= c->mps_state[s];
|
||||
@ -475,8 +475,9 @@ static int get_cabac(CABACContext *c, uint8_t * const state){
|
||||
c->low -= c->range & lps_mask;
|
||||
c->range += (RangeLPS - c->range) & lps_mask;
|
||||
|
||||
bit= (s^lps_mask)&1;
|
||||
*state= c->mps_state[s - (130&lps_mask)];
|
||||
s^=lps_mask;
|
||||
*state= c->mps_state[s];
|
||||
bit= s&1;
|
||||
|
||||
lps_mask= ff_h264_norm_shift[c->range>>(CABAC_BITS+3)];
|
||||
c->range<<= lps_mask;
|
||||
|
Loading…
x
Reference in New Issue
Block a user