static void quantize(SnowContext *s, SubBand *b, DWTELEM *src, int stride, int bias){

    const int level= b->level;

    const int w= b->width;

    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;



    assert(QROOT==8);



    bias= bias ? 0 : (3*qmul)>>3;

    

    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;

                }

            }

        }

    }else{

        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= (i + bias) / qmul;

                    src[x + y*stride]=  i;

                }else{

                    i= -i;

                    i<<= QEXPSHIFT;

                    i= (i + bias) / qmul;

                    src[x + y*stride]= -i;

                }

            }

        }

    }

}

static void quantize(SnowContext *s, SubBand *b, DWTELEM *src, int stride, int bias){

    const int level= b->level;

    const int w= b->width;

    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;



    assert(QROOT==8);



    bias= bias ? 0 : (3*qmul)>>3;

    

    if(!bias){

        for(y=0; y<h; y++){

            for(x=0; x<w; x++){

                int i= src[x + y*stride]; 

                

                

                

                if(i>=0){

                    i<<= QEXPSHIFT;

                    i/= qmul;

                    src[x + y*stride]=  i;

                }else{

                    i= -i;

                    i<<= QEXPSHIFT;

                    i/= qmul;

                    src[x + y*stride]= -i;

                }

            }

        }

    }else{

        for(y=0; y<h; y++){

            for(x=0; x<w; x++){

                int i= src[x + y*stride]; 

                

                

                

                

                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;

                }

            }

        }

    }

}

    int x,y;                 int i= src[x + y*stride];                  if(i>=0){                     i<<= QEXPSHIFT;                     i/= qmul;                     src[x + y*stride]=  i;                 }else{                     i= -i;                     i<<= QEXPSHIFT;                     i/= qmul;                     src[x + y*stride]= -i;                 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;
static void FUNC_0(SnowContext *VAR_0, SubBand *VAR_1, DWTELEM *VAR_2, int VAR_3, int VAR_4){

    const int VAR_5= VAR_1->VAR_5;

    const int VAR_6= VAR_1->width;

    const int VAR_7= VAR_1->height;

    const int VAR_8= clip(VAR_0->VAR_8 + VAR_1->VAR_8, 0, 128);

    const int VAR_9= qexp[VAR_8&7]<<(VAR_8>>3);

    int VAR_10,VAR_11;



    assert(QROOT==8);



    VAR_4= VAR_4 ? 0 : (3*VAR_9)>>3;

    

    if(!VAR_4){

        for(VAR_11=0; VAR_11<VAR_7; VAR_11++){

            for(VAR_10=0; VAR_10<VAR_6; VAR_10++){

                int VAR_13= VAR_2[VAR_10 + VAR_11*VAR_3]; 

                

                

                

                if(VAR_13>=0){

                    VAR_13<<= QEXPSHIFT;

                    VAR_13/= VAR_9;

                    VAR_2[VAR_10 + VAR_11*VAR_3]=  VAR_13;

                }else{

                    VAR_13= -VAR_13;

                    VAR_13<<= QEXPSHIFT;

                    VAR_13/= VAR_9;

                    VAR_2[VAR_10 + VAR_11*VAR_3]= -VAR_13;

                }

            }

        }

    }else{

        for(VAR_11=0; VAR_11<VAR_7; VAR_11++){

            for(VAR_10=0; VAR_10<VAR_6; VAR_10++){

                int VAR_13= VAR_2[VAR_10 + VAR_11*VAR_3]; 

                

                

                

                

                if(VAR_13>=0){

                    VAR_13<<= QEXPSHIFT;

                    VAR_13= (VAR_13 + VAR_4) / VAR_9;

                    VAR_2[VAR_10 + VAR_11*VAR_3]=  VAR_13;

                }else{

                    VAR_13= -VAR_13;

                    VAR_13<<= QEXPSHIFT;

                    VAR_13= (VAR_13 + VAR_4) / VAR_9;

                    VAR_2[VAR_10 + VAR_11*VAR_3]= -VAR_13;

                }

            }

        }

    }

}

static void FUNC_0(SnowContext *VAR_0, SubBand *VAR_1, DWTELEM *VAR_2, int VAR_3, int VAR_4){ const int VAR_5= VAR_1->VAR_5; const int VAR_6= VAR_1->width; const int VAR_7= VAR_1->height; const int VAR_8= clip(VAR_0->VAR_8 + VAR_1->VAR_8, 0, 128); const int VAR_9= qexp[VAR_8&7]<<(VAR_8>>3); int VAR_10,VAR_11; assert(QROOT==8); VAR_4= VAR_4 ? 0 : (3*VAR_9)>>3; if(!VAR_4){ for(VAR_11=0; VAR_11<VAR_7; VAR_11++){ for(VAR_10=0; VAR_10<VAR_6; VAR_10++){ int VAR_13= VAR_2[VAR_10 + VAR_11*VAR_3]; if(VAR_13>=0){ VAR_13<<= QEXPSHIFT; VAR_13/= VAR_9; VAR_2[VAR_10 + VAR_11*VAR_3]=  VAR_13; }else{ VAR_13= -VAR_13; VAR_13<<= QEXPSHIFT; VAR_13/= VAR_9; VAR_2[VAR_10 + VAR_11*VAR_3]= -VAR_13; } } } }else{ for(VAR_11=0; VAR_11<VAR_7; VAR_11++){ for(VAR_10=0; VAR_10<VAR_6; VAR_10++){ int VAR_13= VAR_2[VAR_10 + VAR_11*VAR_3]; if(VAR_13>=0){ VAR_13<<= QEXPSHIFT; VAR_13= (VAR_13 + VAR_4) / VAR_9; VAR_2[VAR_10 + VAR_11*VAR_3]=  VAR_13; }else{ VAR_13= -VAR_13; VAR_13<<= QEXPSHIFT; VAR_13= (VAR_13 + VAR_4) / VAR_9; VAR_2[VAR_10 + VAR_11*VAR_3]= -VAR_13; } } } } }