diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2004-08-27 20:33:16 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2004-08-27 20:33:16 +0000 |
commit | ff76515933776b284d6ae045540208939c7b139b (patch) | |
tree | 4b749ccc50c691e1d9e1db652b633022df1757b5 /libavcodec | |
parent | 0cea8a037cdd0deb43a3c62bc8bec6945d2899d3 (diff) | |
download | ffmpeg-ff76515933776b284d6ae045540208939c7b139b.tar.gz |
11% faster decode_subband()
Originally committed as revision 3421 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/snow.c | 30 |
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 |