filter_intra: make fi mode index entropy coded
Make fi mode index entropy coded instead of using raw bits. Mode
cost estimation in key-frame RDO is updated as well. Modification
to inter frame RDO is not included in this patch.
Also key-frame y mode cdf table is re-trained since fi modes are
attached to DC_PRED
Key frame BDRate:
-0.399% lowres, -0.339% midres
Change-Id: I9ccf478b0a2e48fb1870fe8451e45e2c858a5f63
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index d036ab2..9f15370 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -3881,7 +3881,7 @@
if (tokenonly_rd_stats.rate == INT_MAX) continue;
this_rate = tokenonly_rd_stats.rate +
av1_cost_bit(cpi->common.fc->filter_intra_probs[0], 1) +
- write_uniform_cost(FILTER_INTRA_MODES, mode) + mode_cost;
+ x->filter_intra_mode_cost[0][mode] + mode_cost;
this_rd = RDCOST(x->rdmult, this_rate, tokenonly_rd_stats.dist);
if (this_rd < *best_rd) {
@@ -5965,7 +5965,7 @@
this_rate = tokenonly_rd_stats.rate +
av1_cost_bit(cpi->common.fc->filter_intra_probs[1], 1) +
x->intra_uv_mode_cost[mbmi->mode][mbmi->uv_mode] +
- write_uniform_cost(FILTER_INTRA_MODES, mode);
+ x->filter_intra_mode_cost[1][mode];
this_rd = RDCOST(x->rdmult, this_rate, tokenonly_rd_stats.dist);
if (this_rd < *best_rd) {
*best_rd = this_rd;
@@ -10306,7 +10306,7 @@
MAX_ANGLE_DELTA + mbmi->angle_delta[1]);
}
#endif // CONFIG_EXT_INTRA
- if (mbmi->mode == DC_PRED) {
+ if (mbmi->uv_mode == DC_PRED) {
rate2 +=
av1_cost_bit(cpi->common.fc->filter_intra_probs[1],
mbmi->filter_intra_mode_info.use_filter_intra_mode[1]);