| Index: source/libvpx/vp9/encoder/vp9_encodemb.c
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_encodemb.c (revision 293588)
|
| +++ source/libvpx/vp9/encoder/vp9_encodemb.c (working copy)
|
| @@ -93,7 +93,7 @@
|
| int rate;
|
| int error;
|
| int next;
|
| - signed char token;
|
| + int16_t token;
|
| short qc;
|
| } vp9_token_state;
|
|
|
| @@ -147,10 +147,15 @@
|
| int next = eob, sz = 0;
|
| int64_t rdmult = mb->rdmult * plane_rd_mult[type], rddiv = mb->rddiv;
|
| int64_t rd_cost0, rd_cost1;
|
| - int rate0, rate1, error0, error1, t0, t1;
|
| + int rate0, rate1, error0, error1;
|
| + int16_t t0, t1;
|
| + EXTRABIT e0;
|
| int best, band, pt, i, final_eob;
|
| - const TOKENVALUE *dct_value_tokens;
|
| - const int16_t *dct_value_cost;
|
| +#if CONFIG_VP9_HIGHBITDEPTH
|
| + const int16_t *cat6_high_cost = vp9_get_high_cost_table(xd->bd);
|
| +#else
|
| + const int16_t *cat6_high_cost = vp9_get_high_cost_table(8);
|
| +#endif
|
|
|
| assert((!type && !plane) || (type && plane));
|
| assert(eob <= default_eob);
|
| @@ -167,24 +172,9 @@
|
| tokens[eob][0].qc = 0;
|
| tokens[eob][1] = tokens[eob][0];
|
|
|
| -#if CONFIG_VP9_HIGHBITDEPTH
|
| - if (xd->bd == 12) {
|
| - dct_value_tokens = vp9_dct_value_tokens_high12_ptr;
|
| - dct_value_cost = vp9_dct_value_cost_high12_ptr;
|
| - } else if (xd->bd == 10) {
|
| - dct_value_tokens = vp9_dct_value_tokens_high10_ptr;
|
| - dct_value_cost = vp9_dct_value_cost_high10_ptr;
|
| - } else {
|
| - dct_value_tokens = vp9_dct_value_tokens_ptr;
|
| - dct_value_cost = vp9_dct_value_cost_ptr;
|
| - }
|
| -#else
|
| - dct_value_tokens = vp9_dct_value_tokens_ptr;
|
| - dct_value_cost = vp9_dct_value_cost_ptr;
|
| -#endif
|
| for (i = 0; i < eob; i++)
|
| token_cache[scan[i]] =
|
| - vp9_pt_energy_class[dct_value_tokens[qcoeff[scan[i]]].token];
|
| + vp9_pt_energy_class[vp9_get_token(qcoeff[scan[i]])];
|
|
|
| for (i = eob; i-- > 0;) {
|
| int base_bits, d2, dx;
|
| @@ -198,7 +188,7 @@
|
| /* Evaluate the first possibility for this state. */
|
| rate0 = tokens[next][0].rate;
|
| rate1 = tokens[next][1].rate;
|
| - t0 = (dct_value_tokens + x)->token;
|
| + vp9_get_token_extra(x, &t0, &e0);
|
| /* Consider both possible successor states. */
|
| if (next < default_eob) {
|
| band = band_translate[i + 1];
|
| @@ -211,7 +201,7 @@
|
| UPDATE_RD_COST();
|
| /* And pick the best. */
|
| best = rd_cost1 < rd_cost0;
|
| - base_bits = dct_value_cost[x];
|
| + base_bits = vp9_get_cost(t0, e0, cat6_high_cost);
|
| dx = mul * (dqcoeff[rc] - coeff[rc]);
|
| #if CONFIG_VP9_HIGHBITDEPTH
|
| if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
|
| @@ -249,8 +239,10 @@
|
| */
|
| t0 = tokens[next][0].token == EOB_TOKEN ? EOB_TOKEN : ZERO_TOKEN;
|
| t1 = tokens[next][1].token == EOB_TOKEN ? EOB_TOKEN : ZERO_TOKEN;
|
| + e0 = 0;
|
| } else {
|
| - t0 = t1 = (dct_value_tokens + x)->token;
|
| + vp9_get_token_extra(x, &t0, &e0);
|
| + t1 = t0;
|
| }
|
| if (next < default_eob) {
|
| band = band_translate[i + 1];
|
| @@ -269,7 +261,7 @@
|
| UPDATE_RD_COST();
|
| /* And pick the best. */
|
| best = rd_cost1 < rd_cost0;
|
| - base_bits = dct_value_cost[x];
|
| + base_bits = vp9_get_cost(t0, e0, cat6_high_cost);
|
|
|
| if (shortcut) {
|
| #if CONFIG_VP9_HIGHBITDEPTH
|
| @@ -391,7 +383,7 @@
|
| vp9_highbd_quantize_fp_32x32(coeff, 1024, x->skip_block, p->zbin,
|
| p->round_fp, p->quant_fp, p->quant_shift,
|
| qcoeff, dqcoeff, pd->dequant,
|
| - p->zbin_extra, eob, scan_order->scan,
|
| + eob, scan_order->scan,
|
| scan_order->iscan);
|
| break;
|
| case TX_16X16:
|
| @@ -398,7 +390,7 @@
|
| vp9_highbd_fdct16x16(src_diff, coeff, diff_stride);
|
| vp9_highbd_quantize_fp(coeff, 256, x->skip_block, p->zbin, p->round_fp,
|
| p->quant_fp, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| case TX_8X8:
|
| @@ -405,7 +397,7 @@
|
| vp9_highbd_fdct8x8(src_diff, coeff, diff_stride);
|
| vp9_highbd_quantize_fp(coeff, 64, x->skip_block, p->zbin, p->round_fp,
|
| p->quant_fp, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| case TX_4X4:
|
| @@ -412,7 +404,7 @@
|
| x->fwd_txm4x4(src_diff, coeff, diff_stride);
|
| vp9_highbd_quantize_fp(coeff, 16, x->skip_block, p->zbin, p->round_fp,
|
| p->quant_fp, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| default:
|
| @@ -427,7 +419,7 @@
|
| fdct32x32(x->use_lp32x32fdct, src_diff, coeff, diff_stride);
|
| vp9_quantize_fp_32x32(coeff, 1024, x->skip_block, p->zbin, p->round_fp,
|
| p->quant_fp, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob, scan_order->scan,
|
| + pd->dequant, eob, scan_order->scan,
|
| scan_order->iscan);
|
| break;
|
| case TX_16X16:
|
| @@ -434,7 +426,7 @@
|
| vp9_fdct16x16(src_diff, coeff, diff_stride);
|
| vp9_quantize_fp(coeff, 256, x->skip_block, p->zbin, p->round_fp,
|
| p->quant_fp, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| case TX_8X8:
|
| @@ -441,7 +433,7 @@
|
| vp9_fdct8x8_quant(src_diff, diff_stride, coeff, 64,
|
| x->skip_block, p->zbin, p->round_fp,
|
| p->quant_fp, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| case TX_4X4:
|
| @@ -448,7 +440,7 @@
|
| x->fwd_txm4x4(src_diff, coeff, diff_stride);
|
| vp9_quantize_fp(coeff, 16, x->skip_block, p->zbin, p->round_fp,
|
| p->quant_fp, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| default:
|
| @@ -561,7 +553,7 @@
|
| highbd_fdct32x32(x->use_lp32x32fdct, src_diff, coeff, diff_stride);
|
| vp9_highbd_quantize_b_32x32(coeff, 1024, x->skip_block, p->zbin,
|
| p->round, p->quant, p->quant_shift, qcoeff,
|
| - dqcoeff, pd->dequant, p->zbin_extra, eob,
|
| + dqcoeff, pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| case TX_16X16:
|
| @@ -568,7 +560,7 @@
|
| vp9_highbd_fdct16x16(src_diff, coeff, diff_stride);
|
| vp9_highbd_quantize_b(coeff, 256, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| case TX_8X8:
|
| @@ -575,7 +567,7 @@
|
| vp9_highbd_fdct8x8(src_diff, coeff, diff_stride);
|
| vp9_highbd_quantize_b(coeff, 64, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| case TX_4X4:
|
| @@ -582,7 +574,7 @@
|
| x->fwd_txm4x4(src_diff, coeff, diff_stride);
|
| vp9_highbd_quantize_b(coeff, 16, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| default:
|
| @@ -597,7 +589,7 @@
|
| fdct32x32(x->use_lp32x32fdct, src_diff, coeff, diff_stride);
|
| vp9_quantize_b_32x32(coeff, 1024, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob, scan_order->scan,
|
| + pd->dequant, eob, scan_order->scan,
|
| scan_order->iscan);
|
| break;
|
| case TX_16X16:
|
| @@ -604,7 +596,7 @@
|
| vp9_fdct16x16(src_diff, coeff, diff_stride);
|
| vp9_quantize_b(coeff, 256, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| case TX_8X8:
|
| @@ -611,7 +603,7 @@
|
| vp9_fdct8x8(src_diff, coeff, diff_stride);
|
| vp9_quantize_b(coeff, 64, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| case TX_4X4:
|
| @@ -618,7 +610,7 @@
|
| x->fwd_txm4x4(src_diff, coeff, diff_stride);
|
| vp9_quantize_b(coeff, 16, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| break;
|
| default:
|
| @@ -652,10 +644,6 @@
|
| return;
|
| }
|
|
|
| -#if CONFIG_VP9_HIGHBITDEPTH
|
| - if (!x->skip_recode)
|
| - vp9_xform_quant(x, plane, block, plane_bsize, tx_size);
|
| -#else
|
| if (!x->skip_recode) {
|
| if (x->quant_fp) {
|
| // Encoding process for rtc mode
|
| @@ -687,7 +675,6 @@
|
| }
|
| }
|
| }
|
| -#endif
|
|
|
| if (x->optimize && (!x->skip_recode || !x->skip_optimize)) {
|
| const int ctx = combine_entropy_contexts(*a, *l);
|
| @@ -854,8 +841,7 @@
|
| highbd_fdct32x32(x->use_lp32x32fdct, src_diff, coeff, diff_stride);
|
| vp9_highbd_quantize_b_32x32(coeff, 1024, x->skip_block, p->zbin,
|
| p->round, p->quant, p->quant_shift,
|
| - qcoeff, dqcoeff, pd->dequant,
|
| - p->zbin_extra, eob,
|
| + qcoeff, dqcoeff, pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| }
|
| if (!x->skip_encode && *eob) {
|
| @@ -876,7 +862,7 @@
|
| vp9_highbd_fht16x16(src_diff, coeff, diff_stride, tx_type);
|
| vp9_highbd_quantize_b(coeff, 256, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| }
|
| if (!x->skip_encode && *eob) {
|
| @@ -898,7 +884,7 @@
|
| vp9_highbd_fht8x8(src_diff, coeff, diff_stride, tx_type);
|
| vp9_highbd_quantize_b(coeff, 64, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| }
|
| if (!x->skip_encode && *eob) {
|
| @@ -924,7 +910,7 @@
|
| x->fwd_txm4x4(src_diff, coeff, diff_stride);
|
| vp9_highbd_quantize_b(coeff, 16, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob,
|
| + pd->dequant, eob,
|
| scan_order->scan, scan_order->iscan);
|
| }
|
|
|
| @@ -963,7 +949,7 @@
|
| fdct32x32(x->use_lp32x32fdct, src_diff, coeff, diff_stride);
|
| vp9_quantize_b_32x32(coeff, 1024, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob, scan_order->scan,
|
| + pd->dequant, eob, scan_order->scan,
|
| scan_order->iscan);
|
| }
|
| if (!x->skip_encode && *eob)
|
| @@ -983,7 +969,7 @@
|
| vp9_fht16x16(src_diff, coeff, diff_stride, tx_type);
|
| vp9_quantize_b(coeff, 256, x->skip_block, p->zbin, p->round,
|
| p->quant, p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob, scan_order->scan,
|
| + pd->dequant, eob, scan_order->scan,
|
| scan_order->iscan);
|
| }
|
| if (!x->skip_encode && *eob)
|
| @@ -1003,7 +989,7 @@
|
| vp9_fht8x8(src_diff, coeff, diff_stride, tx_type);
|
| vp9_quantize_b(coeff, 64, x->skip_block, p->zbin, p->round, p->quant,
|
| p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob, scan_order->scan,
|
| + pd->dequant, eob, scan_order->scan,
|
| scan_order->iscan);
|
| }
|
| if (!x->skip_encode && *eob)
|
| @@ -1027,7 +1013,7 @@
|
| x->fwd_txm4x4(src_diff, coeff, diff_stride);
|
| vp9_quantize_b(coeff, 16, x->skip_block, p->zbin, p->round, p->quant,
|
| p->quant_shift, qcoeff, dqcoeff,
|
| - pd->dequant, p->zbin_extra, eob, scan_order->scan,
|
| + pd->dequant, eob, scan_order->scan,
|
| scan_order->iscan);
|
| }
|
|
|
|
|