Commit da66b631 authored by Michael Niedermayer's avatar Michael Niedermayer

optimize quantizaton (about 3x faster)

further opt is easily possible but could lead to overflows depening upon coefficient range, so this wont be done yet as it would make the code somewhat less flexible

Originally committed as revision 3354 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent a8d73e56
......@@ -1801,29 +1801,33 @@ static void quantize(SnowContext *s, SubBand *b, DWTELEM *src, int stride, int b
const int h= b->height;
const int qlog= clip(s->qlog + b->qlog, 0, 128);
const int qmul= qexp[qlog&7]<<(qlog>>3);
int x,y;
int x,y, thres1, thres2;
START_TIMER
assert(QROOT==8);
bias= bias ? 0 : (3*qmul)>>3;
thres1= ((qmul - bias)>>QEXPSHIFT) - 1;
thres2= 2*thres1;
if(!bias){
for(y=0; y<h; y++){
for(x=0; x<w; x++){
int i= src[x + y*stride];
//FIXME use threshold
//FIXME optimize
//FIXME bias
if(i>=0){
i<<= QEXPSHIFT;
i/= qmul;
src[x + y*stride]= i;
}else{
i= -i;
i<<= QEXPSHIFT;
i/= qmul;
src[x + y*stride]= -i;
}
int i= src[x + y*stride];
if((unsigned)(i+thres1) > thres2){
if(i>=0){
i<<= QEXPSHIFT;
i/= qmul; //FIXME optimize
src[x + y*stride]= i;
}else{
i= -i;
i<<= QEXPSHIFT;
i/= qmul; //FIXME optimize
src[x + y*stride]= -i;
}
}else
src[x + y*stride]= 0;
}
}
}else{
......@@ -1831,22 +1835,25 @@ static void quantize(SnowContext *s, SubBand *b, DWTELEM *src, int stride, int b
for(x=0; x<w; x++){
int i= src[x + y*stride];
//FIXME use threshold
//FIXME optimize
//FIXME bias
if(i>=0){
i<<= QEXPSHIFT;
i= (i + bias) / qmul;
src[x + y*stride]= i;
}else{
i= -i;
i<<= QEXPSHIFT;
i= (i + bias) / qmul;
src[x + y*stride]= -i;
}
if((unsigned)(i+thres1) > thres2){
if(i>=0){
i<<= QEXPSHIFT;
i= (i + bias) / qmul; //FIXME optimize
src[x + y*stride]= i;
}else{
i= -i;
i<<= QEXPSHIFT;
i= (i + bias) / qmul; //FIXME optimize
src[x + y*stride]= -i;
}
}else
src[x + y*stride]= 0;
}
}
}
if(level+1 == s->spatial_decomposition_count){
// STOP_TIMER("quantize")
}
}
static void dequantize(SnowContext *s, SubBand *b, DWTELEM *src, int stride){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment