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); |
} |