Merge "fixed an issue with 8x8 token cost in trellisquant" into experimental
This commit is contained in:
@@ -118,7 +118,14 @@ typedef struct
|
||||
unsigned char *active_ptr;
|
||||
MV_CONTEXT *mvc;
|
||||
|
||||
unsigned int token_costs[BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS];
|
||||
unsigned int token_costs[BLOCK_TYPES] [COEF_BANDS]
|
||||
[PREV_COEF_CONTEXTS][MAX_ENTROPY_TOKENS];
|
||||
|
||||
#if CONFIG_T8X8
|
||||
unsigned int token_costs_8x8[BLOCK_TYPES] [COEF_BANDS]
|
||||
[PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS];
|
||||
#endif
|
||||
|
||||
int optimize;
|
||||
int q_index;
|
||||
|
||||
|
||||
@@ -907,9 +907,9 @@ void optimize_b_8x8(MACROBLOCK *mb, int i, int type,
|
||||
band = vp8_coef_bands_8x8[i + 1];
|
||||
pt = vp8_prev_token_class[t0];
|
||||
rate0 +=
|
||||
mb->token_costs[type][band][pt][tokens[next][0].token];
|
||||
mb->token_costs_8x8[type][band][pt][tokens[next][0].token];
|
||||
rate1 +=
|
||||
mb->token_costs[type][band][pt][tokens[next][1].token];
|
||||
mb->token_costs_8x8[type][band][pt][tokens[next][1].token];
|
||||
}
|
||||
rd_cost0 = RDCOST_8x8(rdmult, rddiv, rate0, error0);
|
||||
rd_cost1 = RDCOST_8x8(rdmult, rddiv, rate1, error1);
|
||||
@@ -966,13 +966,13 @@ void optimize_b_8x8(MACROBLOCK *mb, int i, int type,
|
||||
if(t0!=DCT_EOB_TOKEN)
|
||||
{
|
||||
pt = vp8_prev_token_class[t0];
|
||||
rate0 += mb->token_costs[type][band][pt][
|
||||
rate0 += mb->token_costs_8x8[type][band][pt][
|
||||
tokens[next][0].token];
|
||||
}
|
||||
if(t1!=DCT_EOB_TOKEN)
|
||||
{
|
||||
pt = vp8_prev_token_class[t1];
|
||||
rate1 += mb->token_costs[type][band][pt][
|
||||
rate1 += mb->token_costs_8x8[type][band][pt][
|
||||
tokens[next][1].token];
|
||||
}
|
||||
}
|
||||
@@ -1013,12 +1013,12 @@ void optimize_b_8x8(MACROBLOCK *mb, int i, int type,
|
||||
/* Update the cost of each path if we're past the EOB token. */
|
||||
if (t0 != DCT_EOB_TOKEN)
|
||||
{
|
||||
tokens[next][0].rate += mb->token_costs[type][band][0][t0];
|
||||
tokens[next][0].rate += mb->token_costs_8x8[type][band][0][t0];
|
||||
tokens[next][0].token = ZERO_TOKEN;
|
||||
}
|
||||
if (t1 != DCT_EOB_TOKEN)
|
||||
{
|
||||
tokens[next][1].rate += mb->token_costs[type][band][0][t1];
|
||||
tokens[next][1].rate += mb->token_costs_8x8[type][band][0][t1];
|
||||
tokens[next][1].token = ZERO_TOKEN;
|
||||
}
|
||||
/* Don't update next, because we didn't add a new node. */
|
||||
@@ -1034,8 +1034,8 @@ void optimize_b_8x8(MACROBLOCK *mb, int i, int type,
|
||||
error1 = tokens[next][1].error;
|
||||
t0 = tokens[next][0].token;
|
||||
t1 = tokens[next][1].token;
|
||||
rate0 += mb->token_costs[type][band][pt][t0];
|
||||
rate1 += mb->token_costs[type][band][pt][t1];
|
||||
rate0 += mb->token_costs_8x8[type][band][pt][t0];
|
||||
rate1 += mb->token_costs_8x8[type][band][pt][t1];
|
||||
rd_cost0 = RDCOST_8x8(rdmult, rddiv, rate0, error0);
|
||||
rd_cost1 = RDCOST_8x8(rdmult, rddiv, rate1, error1);
|
||||
if (rd_cost0 == rd_cost1)
|
||||
|
||||
@@ -215,7 +215,6 @@ static void fill_token_costs(
|
||||
for (i = 0; i < BLOCK_TYPES; i++)
|
||||
for (j = 0; j < COEF_BANDS; j++)
|
||||
for (k = 0; k < PREV_COEF_CONTEXTS; k++)
|
||||
|
||||
vp8_cost_tokens((int *)(c [i][j][k]), p [i][j][k], vp8_coef_tree);
|
||||
|
||||
}
|
||||
@@ -363,6 +362,12 @@ void vp8_initialize_rd_consts(VP8_COMP *cpi, int QIndex)
|
||||
(const vp8_prob( *)[8][3][11]) cpi->common.fc.coef_probs
|
||||
);
|
||||
|
||||
#if CONFIG_T8X8
|
||||
fill_token_costs(
|
||||
cpi->mb.token_costs_8x8,
|
||||
(const vp8_prob( *)[8][3][11]) cpi->common.fc.coef_probs_8x8
|
||||
);
|
||||
#endif
|
||||
#if CONFIG_QIMODE
|
||||
//rough estimate for costing
|
||||
cpi->common.kf_ymode_probs_index = cpi->common.base_qindex>>4;
|
||||
@@ -666,6 +671,7 @@ static void macro_block_yrd( MACROBLOCK *mb,
|
||||
*Rate = vp8_rdcost_mby(mb);
|
||||
}
|
||||
|
||||
|
||||
static void copy_predictor(unsigned char *dst, const unsigned char *predictor)
|
||||
{
|
||||
const unsigned int *p = (const unsigned int *)predictor;
|
||||
|
||||
Reference in New Issue
Block a user