| Index: source/libvpx/vp8/encoder/quantize.c
|
| ===================================================================
|
| --- source/libvpx/vp8/encoder/quantize.c (revision 191025)
|
| +++ source/libvpx/vp8/encoder/quantize.c (working copy)
|
| @@ -50,8 +50,8 @@
|
| if (x >= zbin)
|
| {
|
| x += round_ptr[rc];
|
| - y = (((x * quant_ptr[rc]) >> 16) + x)
|
| - >> quant_shift_ptr[rc]; /* quantize (x) */
|
| + y = ((((x * quant_ptr[rc]) >> 16) + x)
|
| + * quant_shift_ptr[rc]) >> 16; /* quantize (x) */
|
| x = (y ^ sz) - sz; /* get the sign back */
|
| qcoeff_ptr[rc] = x; /* write to destination */
|
| dqcoeff_ptr[rc] = x * dequant_ptr[rc]; /* dequantized value */
|
| @@ -113,7 +113,7 @@
|
| short *zbin_ptr = b->zbin;
|
| short *round_ptr = b->round;
|
| short *quant_ptr = b->quant;
|
| - unsigned char *quant_shift_ptr = b->quant_shift;
|
| + short *quant_shift_ptr = b->quant_shift;
|
| short *qcoeff_ptr = d->qcoeff;
|
| short *dqcoeff_ptr = d->dqcoeff;
|
| short *dequant_ptr = d->dequant;
|
| @@ -138,8 +138,8 @@
|
| if (x >= zbin)
|
| {
|
| x += round_ptr[rc];
|
| - y = (((x * quant_ptr[rc]) >> 16) + x)
|
| - >> quant_shift_ptr[rc]; /* quantize (x) */
|
| + y = ((((x * quant_ptr[rc]) >> 16) + x)
|
| + * quant_shift_ptr[rc]) >> 16; /* quantize (x) */
|
| x = (y ^ sz) - sz; /* get the sign back */
|
| qcoeff_ptr[rc] = x; /* write to destination */
|
| dqcoeff_ptr[rc] = x * dequant_ptr[rc]; /* dequantized value */
|
| @@ -167,7 +167,7 @@
|
| int sz;
|
| short *coeff_ptr;
|
| short *quant_ptr;
|
| - unsigned char *quant_shift_ptr;
|
| + short *quant_shift_ptr;
|
| short *qcoeff_ptr;
|
| short *dqcoeff_ptr;
|
| short *dequant_ptr;
|
| @@ -198,7 +198,7 @@
|
| if (x >= dq)
|
| {
|
| /* Quantize x. */
|
| - y = (((x * quant_ptr[rc]) >> 16) + x) >> quant_shift_ptr[rc];
|
| + y = ((((x * quant_ptr[rc]) >> 16) + x) * quant_shift_ptr[rc]) >> 16;
|
| /* Put the sign back. */
|
| x = (y + sz) ^ sz;
|
| /* Save the coefficient and its dequantized value. */
|
| @@ -406,7 +406,7 @@
|
| #define EXACT_QUANT
|
| #ifdef EXACT_QUANT
|
| static void invert_quant(int improved_quant, short *quant,
|
| - unsigned char *shift, short d)
|
| + short *shift, short d)
|
| {
|
| if(improved_quant)
|
| {
|
| @@ -418,11 +418,15 @@
|
| t = 1 + (1<<(16+l))/d;
|
| *quant = (short)(t - (1<<16));
|
| *shift = l;
|
| + /* use multiplication and constant shift by 16 */
|
| + *shift = 1 << (16 - *shift);
|
| }
|
| else
|
| {
|
| *quant = (1 << 16) / d;
|
| *shift = 0;
|
| + /* use multiplication and constant shift by 16 */
|
| + *shift = 1 << (16 - *shift);
|
| }
|
| }
|
|
|
|
|