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 v=0;
|
||||||
int lt=0, t=0, rt=0;
|
int lt=0, t=0, rt=0;
|
||||||
|
|
||||||
if(y){
|
if(y && b->x[prev_index] == 0){
|
||||||
rt= src[(y-1)*stride];
|
rt= b->coeff[prev_index];
|
||||||
}
|
}
|
||||||
for(x=0; x<w; x++){
|
for(x=0; x<w; x++){
|
||||||
int p=0;
|
int p=0;
|
||||||
@ -1930,19 +1930,21 @@ static inline void decode_subband(SnowContext *s, SubBand *b, DWTELEM *src, DWTE
|
|||||||
|
|
||||||
lt= t; t= rt;
|
lt= t; t= rt;
|
||||||
|
|
||||||
if(y && x + 1 < w){
|
if(y){
|
||||||
rt= src[x + 1 + (y-1)*stride];
|
if(b->x[prev_index] <= x) //FIXME if
|
||||||
}else
|
prev_index++;
|
||||||
rt= 0;
|
if(b->x[prev_index] == x + 1)
|
||||||
|
rt= b->coeff[prev_index];
|
||||||
|
else
|
||||||
|
rt=0;
|
||||||
|
}
|
||||||
if(parent){
|
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]){
|
if(x>>1 > b->parent->x[parent_index]){
|
||||||
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){
|
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));
|
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){
|
if(y && parent){
|
||||||
int max_run;
|
int max_run;
|
||||||
while(b->x[prev_index] < x)
|
|
||||||
prev_index++;
|
|
||||||
|
|
||||||
max_run= FFMIN(run, b->x[prev_index] - x - 2);
|
max_run= FFMIN(run, b->x[prev_index] - x - 2);
|
||||||
max_run= FFMIN(max_run, 2*b->parent->x[parent_index] - x - 1);
|
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]]))
|
if(get_cabac(&s->c, &b->state[0][16 + 1 + 3 + quant3b[l&0xFF] + 3*quant3b[t&0xFF]]))
|
||||||
v= -v;
|
v= -v;
|
||||||
src[x + y*stride]= v;
|
src[x + y*stride]= v;
|
||||||
b->x[index++]=x; //FIXME interleave x/coeff
|
b->x[index]=x; //FIXME interleave x/coeff
|
||||||
// b->coeff[index++]= v;
|
b->coeff[index++]= v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
b->x[index++]= w+1; //end marker
|
b->x[index++]= w+1; //end marker
|
||||||
|
Loading…
Reference in New Issue
Block a user