summaryrefslogtreecommitdiff
path: root/libavcodec/snow.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2004-08-27 20:33:16 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-08-27 20:33:16 +0000
commitff76515933776b284d6ae045540208939c7b139b (patch)
tree4b749ccc50c691e1d9e1db652b633022df1757b5 /libavcodec/snow.c
parent0cea8a037cdd0deb43a3c62bc8bec6945d2899d3 (diff)
11% faster decode_subband()
Originally committed as revision 3421 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/snow.c')
-rw-r--r--libavcodec/snow.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/libavcodec/snow.c b/libavcodec/snow.c
index 3e36701cf9..1b16f28537 100644
--- a/libavcodec/snow.c
+++ b/libavcodec/snow.c
@@ -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
- rt= 0;
+ 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