Merge "Quantization code cleanup."

This commit is contained in:
Dmitry Kovalev 2013-08-15 10:23:01 -07:00 committed by Gerrit Code Review
commit 4d73416099

View File

@ -185,63 +185,43 @@ static void invert_quant(int16_t *quant, int16_t *shift, int d) {
} }
void vp9_init_quantizer(VP9_COMP *cpi) { void vp9_init_quantizer(VP9_COMP *cpi) {
int i; int i, q;
int quant_val; VP9_COMMON *const cm = &cpi->common;
int quant_uv_val;
#if CONFIG_ALPHA
int quant_alpha_val;
#endif
int q;
for (q = 0; q < QINDEX_RANGE; q++) { for (q = 0; q < QINDEX_RANGE; q++) {
int qzbin_factor = (vp9_dc_quant(q, 0) < 148) ? 84 : 80; const int qzbin_factor = q == 0 ? 64 : (vp9_dc_quant(q, 0) < 148 ? 84 : 80);
int qrounding_factor = 48; const int qrounding_factor = q == 0 ? 64 : 48;
if (q == 0) {
qzbin_factor = 64; // y
qrounding_factor = 64; for (i = 0; i < 2; ++i) {
const int quant = i == 0 ? vp9_dc_quant(q, cm->y_dc_delta_q)
: vp9_ac_quant(q, 0);
invert_quant(&cpi->y_quant[q][i], &cpi->y_quant_shift[q][i], quant);
cpi->y_zbin[q][i] = ROUND_POWER_OF_TWO(qzbin_factor * quant, 7);
cpi->y_round[q][i] = (qrounding_factor * quant) >> 7;
cm->y_dequant[q][i] = quant;
} }
// dc values // uv
quant_val = vp9_dc_quant(q, cpi->common.y_dc_delta_q); for (i = 0; i < 2; ++i) {
invert_quant(cpi->y_quant[q] + 0, cpi->y_quant_shift[q] + 0, quant_val); const int quant = i == 0 ? vp9_dc_quant(q, cm->uv_dc_delta_q)
cpi->y_zbin[q][0] = ROUND_POWER_OF_TWO(qzbin_factor * quant_val, 7); : vp9_ac_quant(q, cm->uv_ac_delta_q);
cpi->y_round[q][0] = (qrounding_factor * quant_val) >> 7; invert_quant(&cpi->uv_quant[q][i], &cpi->uv_quant_shift[q][i], quant);
cpi->common.y_dequant[q][0] = quant_val; cpi->uv_zbin[q][i] = ROUND_POWER_OF_TWO(qzbin_factor * quant, 7);
cpi->uv_round[q][i] = (qrounding_factor * quant) >> 7;
quant_val = vp9_dc_quant(q, cpi->common.uv_dc_delta_q); cm->uv_dequant[q][i] = quant;
invert_quant(cpi->uv_quant[q] + 0, cpi->uv_quant_shift[q] + 0, quant_val); }
cpi->uv_zbin[q][0] = ROUND_POWER_OF_TWO(qzbin_factor * quant_val, 7);
cpi->uv_round[q][0] = (qrounding_factor * quant_val) >> 7;
cpi->common.uv_dequant[q][0] = quant_val;
#if CONFIG_ALPHA #if CONFIG_ALPHA
quant_val = vp9_dc_quant(q, cpi->common.a_dc_delta_q); // alpha
invert_quant(cpi->a_quant[q] + 0, cpi->a_quant_shift[q] + 0, quant_val); for (i = 0; i < 2; ++i) {
cpi->a_zbin[q][0] = ROUND_POWER_OF_TWO(qzbin_factor * quant_val, 7); const int quant = i == 0 ? vp9_dc_quant(q, cm->a_dc_delta_q)
cpi->a_round[q][0] = (qrounding_factor * quant_val) >> 7; : vp9_ac_quant(q, cm->a_ac_delta_q);
cpi->common.a_dequant[q][0] = quant_val; invert_quant(&cpi->a_quant[q][i], &cpi->a_quant_shift[q][i], quant);
#endif cpi->a_zbin[q][i] = ROUND_POWER_OF_TWO(qzbin_factor * quant, 7);
cpi->a_round[q][i] = (qrounding_factor * quant) >> 7;
quant_val = vp9_ac_quant(q, 0); cm->a_dequant[q][i] = quant;
invert_quant(cpi->y_quant[q] + 1, cpi->y_quant_shift[q] + 1, quant_val); }
cpi->y_zbin[q][1] = ROUND_POWER_OF_TWO(qzbin_factor * quant_val, 7);
cpi->y_round[q][1] = (qrounding_factor * quant_val) >> 7;
cpi->common.y_dequant[q][1] = quant_val;
quant_uv_val = vp9_ac_quant(q, cpi->common.uv_ac_delta_q);
invert_quant(cpi->uv_quant[q] + 1, cpi->uv_quant_shift[q] + 1,
quant_uv_val);
cpi->uv_zbin[q][1] = ROUND_POWER_OF_TWO(qzbin_factor * quant_uv_val, 7);
cpi->uv_round[q][1] = (qrounding_factor * quant_uv_val) >> 7;
cpi->common.uv_dequant[q][1] = quant_uv_val;
#if CONFIG_ALPHA
quant_alpha_val = vp9_ac_quant(q, cpi->common.a_ac_delta_q);
invert_quant(cpi->a_quant[q] + 1, cpi->a_quant_shift[q] + 1,
quant_alpha_val);
cpi->a_zbin[q][1] = ROUND_POWER_OF_TWO(qzbin_factor * quant_alpha_val, 7);
cpi->a_round[q][1] = (qrounding_factor * quant_alpha_val) >> 7;
cpi->common.a_dequant[q][1] = quant_alpha_val;
#endif #endif
for (i = 2; i < 8; i++) { for (i = 2; i < 8; i++) {
@ -249,20 +229,20 @@ void vp9_init_quantizer(VP9_COMP *cpi) {
cpi->y_quant_shift[q][i] = cpi->y_quant_shift[q][1]; cpi->y_quant_shift[q][i] = cpi->y_quant_shift[q][1];
cpi->y_zbin[q][i] = cpi->y_zbin[q][1]; cpi->y_zbin[q][i] = cpi->y_zbin[q][1];
cpi->y_round[q][i] = cpi->y_round[q][1]; cpi->y_round[q][i] = cpi->y_round[q][1];
cpi->common.y_dequant[q][i] = cpi->common.y_dequant[q][1]; cm->y_dequant[q][i] = cm->y_dequant[q][1];
cpi->uv_quant[q][i] = cpi->uv_quant[q][1]; cpi->uv_quant[q][i] = cpi->uv_quant[q][1];
cpi->uv_quant_shift[q][i] = cpi->uv_quant_shift[q][1]; cpi->uv_quant_shift[q][i] = cpi->uv_quant_shift[q][1];
cpi->uv_zbin[q][i] = cpi->uv_zbin[q][1]; cpi->uv_zbin[q][i] = cpi->uv_zbin[q][1];
cpi->uv_round[q][i] = cpi->uv_round[q][1]; cpi->uv_round[q][i] = cpi->uv_round[q][1];
cpi->common.uv_dequant[q][i] = cpi->common.uv_dequant[q][1]; cm->uv_dequant[q][i] = cm->uv_dequant[q][1];
#if CONFIG_ALPHA #if CONFIG_ALPHA
cpi->a_quant[q][i] = cpi->a_quant[q][1]; cpi->a_quant[q][i] = cpi->a_quant[q][1];
cpi->a_quant_shift[q][i] = cpi->a_quant_shift[q][1]; cpi->a_quant_shift[q][i] = cpi->a_quant_shift[q][1];
cpi->a_zbin[q][i] = cpi->a_zbin[q][1]; cpi->a_zbin[q][i] = cpi->a_zbin[q][1];
cpi->a_round[q][i] = cpi->a_round[q][1]; cpi->a_round[q][i] = cpi->a_round[q][1];
cpi->common.a_dequant[q][i] = cpi->common.a_dequant[q][1]; cm->a_dequant[q][i] = cm->a_dequant[q][1];
#endif #endif
} }
} }