diff options
author | John Koleszar <jkoleszar@google.com> | 2010-10-12 05:34:30 -0700 |
---|---|---|
committer | Code Review <code-review@webmproject.org> | 2010-10-12 05:34:30 -0700 |
commit | 037345eb695d98cedf6fbc5cc242be7ebb0752e4 (patch) | |
tree | b570be1dac1fc8ee5e936322108556235f6b8e9f /vp8/encoder | |
parent | fc018e0d927430e2cea1d8822a8e4cf6a3b2aca7 (diff) | |
parent | 82c433988583e9c2a09ebf19bb9fa20c4de001ea (diff) | |
download | libvpx-037345eb695d98cedf6fbc5cc242be7ebb0752e4.tar libvpx-037345eb695d98cedf6fbc5cc242be7ebb0752e4.tar.gz libvpx-037345eb695d98cedf6fbc5cc242be7ebb0752e4.tar.bz2 libvpx-037345eb695d98cedf6fbc5cc242be7ebb0752e4.zip |
Merge "Move vp8_strict_quantize_b inside EXACT_QUANT #define."
Diffstat (limited to 'vp8/encoder')
-rw-r--r-- | vp8/encoder/quantize.c | 117 |
1 files changed, 59 insertions, 58 deletions
diff --git a/vp8/encoder/quantize.c b/vp8/encoder/quantize.c index d06b04896..1a8c8ebb7 100644 --- a/vp8/encoder/quantize.c +++ b/vp8/encoder/quantize.c @@ -118,6 +118,65 @@ void vp8_regular_quantize_b(BLOCK *b, BLOCKD *d) d->eob = eob + 1; } + +/* Perform regular quantization, with unbiased rounding and no zero bin. */ +void vp8_strict_quantize_b(BLOCK *b, BLOCKD *d) +{ + int i; + int rc; + int eob; + int x; + int y; + int z; + int sz; + short *coeff_ptr; + short *quant_ptr; + short *quant_shift_ptr; + short *qcoeff_ptr; + short *dqcoeff_ptr; + short *dequant_ptr; + + coeff_ptr = &b->coeff[0]; + quant_ptr = &b->quant[0][0]; + quant_shift_ptr = &b->quant_shift[0][0]; + qcoeff_ptr = d->qcoeff; + dqcoeff_ptr = d->dqcoeff; + dequant_ptr = &d->dequant[0][0]; + eob = - 1; + vpx_memset(qcoeff_ptr, 0, 32); + vpx_memset(dqcoeff_ptr, 0, 32); + for (i = 0; i < 16; i++) + { + int dq; + int round; + + /*TODO: These arrays should be stored in zig-zag order.*/ + rc = vp8_default_zig_zag1d[i]; + z = coeff_ptr[rc]; + dq = dequant_ptr[rc]; + round = dq >> 1; + /* Sign of z. */ + sz = -(z < 0); + x = (z + sz) ^ sz; + x += round; + if (x >= dq) + { + /* Quantize x. */ + y = (((x * quant_ptr[rc]) >> 16) + x) >> quant_shift_ptr[rc]; + /* Put the sign back. */ + x = (y + sz) ^ sz; + /* Save the coefficient and its dequantized value. */ + qcoeff_ptr[rc] = x; + dqcoeff_ptr[rc] = x * dq; + /* Remember the last non-zero coefficient. */ + if (y) + eob = i; + } + } + + d->eob = eob + 1; +} + #else void vp8_fast_quantize_b_c(BLOCK *b, BLOCKD *d) { @@ -207,64 +266,6 @@ void vp8_regular_quantize_b(BLOCK *b, BLOCKD *d) #endif -/* Perform regular quantization, with unbiased rounding and no zero bin. */ -void vp8_strict_quantize_b(BLOCK *b, BLOCKD *d) -{ - int i; - int rc; - int eob; - int x; - int y; - int z; - int sz; - short *coeff_ptr; - short *quant_ptr; - short *quant_shift_ptr; - short *qcoeff_ptr; - short *dqcoeff_ptr; - short *dequant_ptr; - - coeff_ptr = &b->coeff[0]; - quant_ptr = &b->quant[0][0]; - quant_shift_ptr = &b->quant_shift[0][0]; - qcoeff_ptr = d->qcoeff; - dqcoeff_ptr = d->dqcoeff; - dequant_ptr = &d->dequant[0][0]; - eob = - 1; - vpx_memset(qcoeff_ptr, 0, 32); - vpx_memset(dqcoeff_ptr, 0, 32); - for (i = 0; i < 16; i++) - { - int dq; - int round; - - /*TODO: These arrays should be stored in zig-zag order.*/ - rc = vp8_default_zig_zag1d[i]; - z = coeff_ptr[rc]; - dq = dequant_ptr[rc]; - round = dq >> 1; - /* Sign of z. */ - sz = -(z < 0); - x = (z + sz) ^ sz; - x += round; - if (x >= dq) - { - /* Quantize x. */ - y = (((x * quant_ptr[rc]) >> 16) + x) >> quant_shift_ptr[rc]; - /* Put the sign back. */ - x = (y + sz) ^ sz; - /* Save the coefficient and its dequantized value. */ - qcoeff_ptr[rc] = x; - dqcoeff_ptr[rc] = x * dq; - /* Remember the last non-zero coefficient. */ - if (y) - eob = i; - } - } - - d->eob = eob + 1; -} - void vp8_quantize_mby(MACROBLOCK *x) { int i; |