Merge "Use accurate bit cost for uv_mode in UV intra mode RD selection"
This commit is contained in:
Коммит
908fbabe4e
|
@ -456,7 +456,7 @@ typedef struct VP10_COMP {
|
||||||
|
|
||||||
int mbmode_cost[INTRA_MODES];
|
int mbmode_cost[INTRA_MODES];
|
||||||
unsigned int inter_mode_cost[INTER_MODE_CONTEXTS][INTER_MODES];
|
unsigned int inter_mode_cost[INTER_MODE_CONTEXTS][INTER_MODES];
|
||||||
int intra_uv_mode_cost[INTRA_MODES];
|
int intra_uv_mode_cost[INTRA_MODES][INTRA_MODES];
|
||||||
int y_mode_costs[INTRA_MODES][INTRA_MODES][INTRA_MODES];
|
int y_mode_costs[INTRA_MODES][INTRA_MODES][INTRA_MODES];
|
||||||
int switchable_interp_costs[SWITCHABLE_FILTER_CONTEXTS][SWITCHABLE_FILTERS];
|
int switchable_interp_costs[SWITCHABLE_FILTER_CONTEXTS][SWITCHABLE_FILTERS];
|
||||||
int partition_cost[PARTITION_CONTEXTS][PARTITION_TYPES];
|
int partition_cost[PARTITION_CONTEXTS][PARTITION_TYPES];
|
||||||
|
|
|
@ -76,8 +76,9 @@ static void fill_mode_costs(VP10_COMP *cpi) {
|
||||||
vp10_intra_mode_tree);
|
vp10_intra_mode_tree);
|
||||||
|
|
||||||
vp10_cost_tokens(cpi->mbmode_cost, fc->y_mode_prob[1], vp10_intra_mode_tree);
|
vp10_cost_tokens(cpi->mbmode_cost, fc->y_mode_prob[1], vp10_intra_mode_tree);
|
||||||
vp10_cost_tokens(cpi->intra_uv_mode_cost,
|
for (i = 0; i < INTRA_MODES; ++i)
|
||||||
fc->uv_mode_prob[TM_PRED], vp10_intra_mode_tree);
|
vp10_cost_tokens(cpi->intra_uv_mode_cost[i],
|
||||||
|
fc->uv_mode_prob[i], vp10_intra_mode_tree);
|
||||||
|
|
||||||
for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; ++i)
|
for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; ++i)
|
||||||
vp10_cost_tokens(cpi->switchable_interp_costs[i],
|
vp10_cost_tokens(cpi->switchable_interp_costs[i],
|
||||||
|
|
|
@ -1369,7 +1369,8 @@ static int64_t rd_pick_intra_sbuv_mode(VP10_COMP *cpi, MACROBLOCK *x,
|
||||||
if (!super_block_uvrd(cpi, x, &this_rate_tokenonly,
|
if (!super_block_uvrd(cpi, x, &this_rate_tokenonly,
|
||||||
&this_distortion, &s, &this_sse, bsize, best_rd))
|
&this_distortion, &s, &this_sse, bsize, best_rd))
|
||||||
continue;
|
continue;
|
||||||
this_rate = this_rate_tokenonly + cpi->intra_uv_mode_cost[mode];
|
this_rate = this_rate_tokenonly +
|
||||||
|
cpi->intra_uv_mode_cost[xd->mi[0]->mbmi.mode][mode];
|
||||||
this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
|
this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
|
||||||
|
|
||||||
if (this_rd < best_rd) {
|
if (this_rd < best_rd) {
|
||||||
|
@ -1398,7 +1399,8 @@ static int64_t rd_sbuv_dcpred(const VP10_COMP *cpi, MACROBLOCK *x,
|
||||||
memset(x->skip_txfm, SKIP_TXFM_NONE, sizeof(x->skip_txfm));
|
memset(x->skip_txfm, SKIP_TXFM_NONE, sizeof(x->skip_txfm));
|
||||||
super_block_uvrd(cpi, x, rate_tokenonly, distortion,
|
super_block_uvrd(cpi, x, rate_tokenonly, distortion,
|
||||||
skippable, &unused, bsize, INT64_MAX);
|
skippable, &unused, bsize, INT64_MAX);
|
||||||
*rate = *rate_tokenonly + cpi->intra_uv_mode_cost[DC_PRED];
|
*rate = *rate_tokenonly +
|
||||||
|
cpi->intra_uv_mode_cost[x->e_mbd.mi[0]->mbmi.mode][DC_PRED];
|
||||||
return RDCOST(x->rdmult, x->rddiv, *rate, *distortion);
|
return RDCOST(x->rdmult, x->rddiv, *rate, *distortion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -470,7 +470,7 @@ typedef struct VP9_COMP {
|
||||||
|
|
||||||
int mbmode_cost[INTRA_MODES];
|
int mbmode_cost[INTRA_MODES];
|
||||||
unsigned int inter_mode_cost[INTER_MODE_CONTEXTS][INTER_MODES];
|
unsigned int inter_mode_cost[INTER_MODE_CONTEXTS][INTER_MODES];
|
||||||
int intra_uv_mode_cost[FRAME_TYPES][INTRA_MODES];
|
int intra_uv_mode_cost[FRAME_TYPES][INTRA_MODES][INTRA_MODES];
|
||||||
int y_mode_costs[INTRA_MODES][INTRA_MODES][INTRA_MODES];
|
int y_mode_costs[INTRA_MODES][INTRA_MODES][INTRA_MODES];
|
||||||
int switchable_interp_costs[SWITCHABLE_FILTER_CONTEXTS][SWITCHABLE_FILTERS];
|
int switchable_interp_costs[SWITCHABLE_FILTER_CONTEXTS][SWITCHABLE_FILTERS];
|
||||||
int partition_cost[PARTITION_CONTEXTS][PARTITION_TYPES];
|
int partition_cost[PARTITION_CONTEXTS][PARTITION_TYPES];
|
||||||
|
|
|
@ -76,10 +76,12 @@ static void fill_mode_costs(VP9_COMP *cpi) {
|
||||||
vp9_intra_mode_tree);
|
vp9_intra_mode_tree);
|
||||||
|
|
||||||
vp9_cost_tokens(cpi->mbmode_cost, fc->y_mode_prob[1], vp9_intra_mode_tree);
|
vp9_cost_tokens(cpi->mbmode_cost, fc->y_mode_prob[1], vp9_intra_mode_tree);
|
||||||
vp9_cost_tokens(cpi->intra_uv_mode_cost[KEY_FRAME],
|
for (i = 0; i < INTRA_MODES; ++i) {
|
||||||
vp9_kf_uv_mode_prob[TM_PRED], vp9_intra_mode_tree);
|
vp9_cost_tokens(cpi->intra_uv_mode_cost[KEY_FRAME][i],
|
||||||
vp9_cost_tokens(cpi->intra_uv_mode_cost[INTER_FRAME],
|
vp9_kf_uv_mode_prob[i], vp9_intra_mode_tree);
|
||||||
fc->uv_mode_prob[TM_PRED], vp9_intra_mode_tree);
|
vp9_cost_tokens(cpi->intra_uv_mode_cost[INTER_FRAME][i],
|
||||||
|
fc->uv_mode_prob[i], vp9_intra_mode_tree);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; ++i)
|
for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; ++i)
|
||||||
vp9_cost_tokens(cpi->switchable_interp_costs[i],
|
vp9_cost_tokens(cpi->switchable_interp_costs[i],
|
||||||
|
|
|
@ -1199,7 +1199,8 @@ static int64_t rd_pick_intra_sbuv_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
||||||
&this_distortion, &s, &this_sse, bsize, best_rd))
|
&this_distortion, &s, &this_sse, bsize, best_rd))
|
||||||
continue;
|
continue;
|
||||||
this_rate = this_rate_tokenonly +
|
this_rate = this_rate_tokenonly +
|
||||||
cpi->intra_uv_mode_cost[cpi->common.frame_type][mode];
|
cpi->intra_uv_mode_cost[cpi->common.frame_type]
|
||||||
|
[xd->mi[0]->mbmi.mode][mode];
|
||||||
this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
|
this_rd = RDCOST(x->rdmult, x->rddiv, this_rate, this_distortion);
|
||||||
|
|
||||||
if (this_rd < best_rd) {
|
if (this_rd < best_rd) {
|
||||||
|
@ -1229,7 +1230,9 @@ static int64_t rd_sbuv_dcpred(const VP9_COMP *cpi, MACROBLOCK *x,
|
||||||
memset(x->skip_txfm, SKIP_TXFM_NONE, sizeof(x->skip_txfm));
|
memset(x->skip_txfm, SKIP_TXFM_NONE, sizeof(x->skip_txfm));
|
||||||
super_block_uvrd(cpi, x, rate_tokenonly, distortion,
|
super_block_uvrd(cpi, x, rate_tokenonly, distortion,
|
||||||
skippable, &unused, bsize, INT64_MAX);
|
skippable, &unused, bsize, INT64_MAX);
|
||||||
*rate = *rate_tokenonly + cpi->intra_uv_mode_cost[cm->frame_type][DC_PRED];
|
*rate = *rate_tokenonly +
|
||||||
|
cpi->intra_uv_mode_cost[cm->frame_type]
|
||||||
|
[x->e_mbd.mi[0]->mbmi.mode][DC_PRED];
|
||||||
return RDCOST(x->rdmult, x->rddiv, *rate, *distortion);
|
return RDCOST(x->rdmult, x->rddiv, *rate, *distortion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче