mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
11% faster decode_subband()
Originally committed as revision 3421 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
0cea8a037c
commit
ff76515933
@ -1921,8 +1921,8 @@ static inline void decode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTE
|
||||
int v=0;
|
||||
int lt=0, t=0, rt=0;
|
||||
|
||||
if(y){
|
||||
rt= src[(y-1)*stride];
|
||||
if(y && b->x[prev_index] == 0){
|
||||
rt= b->coeff[prev_index];
|
||||
}
|
||||
for(x=0; x<w; x++){
|
||||
int p=0;
|
||||
@ -1930,19 +1930,21 @@ static inline void decode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTE
|
||||
|
||||
lt= t; t= rt;
|
||||
|
||||
if(y && x + 1 < w){
|
||||
rt= src[x + 1 + (y-1)*stride];
|
||||
}else
|
||||
if(y){
|
||||
if(b->x[prev_index] <= x) //FIXME if
|
||||
prev_index++;
|
||||
if(b->x[prev_index] == x + 1)
|
||||
rt= b->coeff[prev_index];
|
||||
else
|
||||
rt=0;
|
||||
}
|
||||
if(parent){
|
||||
int px= x>>1;
|
||||
int py= y>>1;
|
||||
if(px<b->parent->width && py<b->parent->height)
|
||||
p= parent[px + py*2*stride];
|
||||
|
||||
if(x>>1 > b->parent->x[parent_index]){
|
||||
parent_index++;
|
||||
}
|
||||
if(x>>1 == b->parent->x[parent_index]){
|
||||
p= b->parent->coeff[parent_index];
|
||||
}
|
||||
}
|
||||
if(/*ll|*/l|lt|t|rt|p){
|
||||
int context= av_log2(/*ABS(ll) + */3*ABS(l) + ABS(lt) + 2*ABS(t) + ABS(rt) + ABS(p));
|
||||
@ -1958,8 +1960,6 @@ static inline void decode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTE
|
||||
|
||||
if(y && parent){
|
||||
int max_run;
|
||||
while(b->x[prev_index] < x)
|
||||
prev_index++;
|
||||
|
||||
max_run= FFMIN(run, b->x[prev_index] - x - 2);
|
||||
max_run= FFMIN(max_run, 2*b->parent->x[parent_index] - x - 1);
|
||||
@ -1974,8 +1974,8 @@ static inline void decode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTE
|
||||
if(get_cabac(&s->c, &b->state[0][16 + 1 + 3 + quant3b[l&0xFF] + 3*quant3b[t&0xFF]]))
|
||||
v= -v;
|
||||
src[x + y*stride]= v;
|
||||
b->x[index++]=x; //FIXME interleave x/coeff
|
||||
// b->coeff[index++]= v;
|
||||
b->x[index]=x; //FIXME interleave x/coeff
|
||||
b->coeff[index++]= v;
|
||||
}
|
||||
}
|
||||
b->x[index++]= w+1; //end marker
|
||||
|
Loading…
Reference in New Issue
Block a user