Merge "Update uv_mode_cdf tables once per frame." into nextgenv2
This commit is contained in:
@@ -1413,6 +1413,8 @@ static void init_mode_probs(FRAME_CONTEXT *fc) {
|
|||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
av1_tree_to_cdf_1D(av1_intra_mode_tree, fc->y_mode_prob, fc->y_mode_cdf,
|
av1_tree_to_cdf_1D(av1_intra_mode_tree, fc->y_mode_prob, fc->y_mode_cdf,
|
||||||
BLOCK_SIZE_GROUPS);
|
BLOCK_SIZE_GROUPS);
|
||||||
|
av1_tree_to_cdf_1D(av1_intra_mode_tree, fc->uv_mode_prob, fc->uv_mode_cdf,
|
||||||
|
INTRA_MODES);
|
||||||
av1_tree_to_cdf_1D(av1_switchable_interp_tree, fc->switchable_interp_prob,
|
av1_tree_to_cdf_1D(av1_switchable_interp_tree, fc->switchable_interp_prob,
|
||||||
fc->switchable_interp_cdf, SWITCHABLE_FILTER_CONTEXTS);
|
fc->switchable_interp_cdf, SWITCHABLE_FILTER_CONTEXTS);
|
||||||
av1_tree_to_cdf_2D(av1_ext_tx_tree, fc->intra_ext_tx_prob,
|
av1_tree_to_cdf_2D(av1_ext_tx_tree, fc->intra_ext_tx_prob,
|
||||||
|
@@ -166,6 +166,7 @@ typedef struct frame_contexts {
|
|||||||
#endif // CONFIG_LOOP_RESTORATION
|
#endif // CONFIG_LOOP_RESTORATION
|
||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
aom_cdf_prob y_mode_cdf[BLOCK_SIZE_GROUPS][INTRA_MODES];
|
aom_cdf_prob y_mode_cdf[BLOCK_SIZE_GROUPS][INTRA_MODES];
|
||||||
|
aom_cdf_prob uv_mode_cdf[INTRA_MODES][INTRA_MODES];
|
||||||
aom_cdf_prob partition_cdf[PARTITION_CONTEXTS][PARTITION_TYPES];
|
aom_cdf_prob partition_cdf[PARTITION_CONTEXTS][PARTITION_TYPES];
|
||||||
aom_cdf_prob switchable_interp_cdf[SWITCHABLE_FILTER_CONTEXTS]
|
aom_cdf_prob switchable_interp_cdf[SWITCHABLE_FILTER_CONTEXTS]
|
||||||
[SWITCHABLE_FILTERS];
|
[SWITCHABLE_FILTERS];
|
||||||
|
@@ -3717,9 +3717,14 @@ static int read_compressed_header(AV1Decoder *pbi, const uint8_t *data,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < INTRA_MODES; j++)
|
for (j = 0; j < INTRA_MODES; j++) {
|
||||||
for (i = 0; i < INTRA_MODES - 1; ++i)
|
for (i = 0; i < INTRA_MODES - 1; ++i)
|
||||||
av1_diff_update_prob(&r, &fc->uv_mode_prob[j][i], ACCT_STR);
|
av1_diff_update_prob(&r, &fc->uv_mode_prob[j][i], ACCT_STR);
|
||||||
|
#if CONFIG_DAALA_EC
|
||||||
|
av1_tree_to_cdf(av1_intra_mode_tree, fc->uv_mode_prob[j],
|
||||||
|
fc->uv_mode_cdf[j]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#if CONFIG_EXT_PARTITION_TYPES
|
#if CONFIG_EXT_PARTITION_TYPES
|
||||||
for (i = 0; i < PARTITION_TYPES - 1; ++i)
|
for (i = 0; i < PARTITION_TYPES - 1; ++i)
|
||||||
|
@@ -42,15 +42,15 @@ static INLINE int read_uniform(aom_reader *r, int n) {
|
|||||||
#endif // CONFIG_EXT_INTRA || CONFIG_FILTER_INTRA || CONFIG_PALETTE
|
#endif // CONFIG_EXT_INTRA || CONFIG_FILTER_INTRA || CONFIG_PALETTE
|
||||||
|
|
||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
static PREDICTION_MODE read_intra_mode_cdf(aom_reader *r,
|
static PREDICTION_MODE read_intra_mode(aom_reader *r, const aom_cdf_prob *cdf) {
|
||||||
const aom_cdf_prob *cdf) {
|
|
||||||
return (PREDICTION_MODE)
|
return (PREDICTION_MODE)
|
||||||
av1_intra_mode_inv[aom_read_symbol(r, cdf, INTRA_MODES, ACCT_STR)];
|
av1_intra_mode_inv[aom_read_symbol(r, cdf, INTRA_MODES, ACCT_STR)];
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
static PREDICTION_MODE read_intra_mode(aom_reader *r, const aom_prob *p) {
|
static PREDICTION_MODE read_intra_mode(aom_reader *r, const aom_prob *p) {
|
||||||
return (PREDICTION_MODE)aom_read_tree(r, av1_intra_mode_tree, p, ACCT_STR);
|
return (PREDICTION_MODE)aom_read_tree(r, av1_intra_mode_tree, p, ACCT_STR);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CONFIG_DELTA_Q
|
#if CONFIG_DELTA_Q
|
||||||
static int read_delta_qindex(AV1_COMMON *cm, MACROBLOCKD *xd, aom_reader *r,
|
static int read_delta_qindex(AV1_COMMON *cm, MACROBLOCKD *xd, aom_reader *r,
|
||||||
@@ -92,7 +92,7 @@ static PREDICTION_MODE read_intra_mode_y(AV1_COMMON *cm, MACROBLOCKD *xd,
|
|||||||
aom_reader *r, int size_group) {
|
aom_reader *r, int size_group) {
|
||||||
const PREDICTION_MODE y_mode =
|
const PREDICTION_MODE y_mode =
|
||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
read_intra_mode_cdf(r, cm->fc->y_mode_cdf[size_group]);
|
read_intra_mode(r, cm->fc->y_mode_cdf[size_group]);
|
||||||
#else
|
#else
|
||||||
read_intra_mode(r, cm->fc->y_mode_prob[size_group]);
|
read_intra_mode(r, cm->fc->y_mode_prob[size_group]);
|
||||||
#endif
|
#endif
|
||||||
@@ -105,7 +105,11 @@ static PREDICTION_MODE read_intra_mode_uv(AV1_COMMON *cm, MACROBLOCKD *xd,
|
|||||||
aom_reader *r,
|
aom_reader *r,
|
||||||
PREDICTION_MODE y_mode) {
|
PREDICTION_MODE y_mode) {
|
||||||
const PREDICTION_MODE uv_mode =
|
const PREDICTION_MODE uv_mode =
|
||||||
|
#if CONFIG_DAALA_EC
|
||||||
|
read_intra_mode(r, cm->fc->uv_mode_cdf[y_mode]);
|
||||||
|
#else
|
||||||
read_intra_mode(r, cm->fc->uv_mode_prob[y_mode]);
|
read_intra_mode(r, cm->fc->uv_mode_prob[y_mode]);
|
||||||
|
#endif
|
||||||
FRAME_COUNTS *counts = xd->counts;
|
FRAME_COUNTS *counts = xd->counts;
|
||||||
if (counts) ++counts->uv_mode[y_mode][uv_mode];
|
if (counts) ++counts->uv_mode[y_mode][uv_mode];
|
||||||
return uv_mode;
|
return uv_mode;
|
||||||
@@ -668,8 +672,7 @@ static void read_intra_frame_mode_info(AV1_COMMON *const cm,
|
|||||||
for (i = 0; i < 4; ++i)
|
for (i = 0; i < 4; ++i)
|
||||||
mi->bmi[i].as_mode =
|
mi->bmi[i].as_mode =
|
||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
read_intra_mode_cdf(r,
|
read_intra_mode(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, i));
|
||||||
get_y_mode_cdf(cm, mi, above_mi, left_mi, i));
|
|
||||||
#else
|
#else
|
||||||
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, i));
|
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, i));
|
||||||
#endif
|
#endif
|
||||||
@@ -678,13 +681,13 @@ static void read_intra_frame_mode_info(AV1_COMMON *const cm,
|
|||||||
case BLOCK_4X8:
|
case BLOCK_4X8:
|
||||||
mi->bmi[0].as_mode = mi->bmi[2].as_mode =
|
mi->bmi[0].as_mode = mi->bmi[2].as_mode =
|
||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
read_intra_mode_cdf(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 0));
|
read_intra_mode(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 0));
|
||||||
#else
|
#else
|
||||||
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
|
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
|
||||||
#endif
|
#endif
|
||||||
mi->bmi[1].as_mode = mi->bmi[3].as_mode = mbmi->mode =
|
mi->bmi[1].as_mode = mi->bmi[3].as_mode = mbmi->mode =
|
||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
read_intra_mode_cdf(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 1));
|
read_intra_mode(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 1));
|
||||||
#else
|
#else
|
||||||
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 1));
|
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 1));
|
||||||
#endif
|
#endif
|
||||||
@@ -692,13 +695,13 @@ static void read_intra_frame_mode_info(AV1_COMMON *const cm,
|
|||||||
case BLOCK_8X4:
|
case BLOCK_8X4:
|
||||||
mi->bmi[0].as_mode = mi->bmi[1].as_mode =
|
mi->bmi[0].as_mode = mi->bmi[1].as_mode =
|
||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
read_intra_mode_cdf(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 0));
|
read_intra_mode(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 0));
|
||||||
#else
|
#else
|
||||||
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
|
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
|
||||||
#endif
|
#endif
|
||||||
mi->bmi[2].as_mode = mi->bmi[3].as_mode = mbmi->mode =
|
mi->bmi[2].as_mode = mi->bmi[3].as_mode = mbmi->mode =
|
||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
read_intra_mode_cdf(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 2));
|
read_intra_mode(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 2));
|
||||||
#else
|
#else
|
||||||
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 2));
|
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 2));
|
||||||
#endif
|
#endif
|
||||||
@@ -706,7 +709,7 @@ static void read_intra_frame_mode_info(AV1_COMMON *const cm,
|
|||||||
default:
|
default:
|
||||||
mbmi->mode =
|
mbmi->mode =
|
||||||
#if CONFIG_DAALA_EC
|
#if CONFIG_DAALA_EC
|
||||||
read_intra_mode_cdf(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 0));
|
read_intra_mode(r, get_y_mode_cdf(cm, mi, above_mi, left_mi, 0));
|
||||||
#else
|
#else
|
||||||
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
|
read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
|
||||||
#endif
|
#endif
|
||||||
|
@@ -197,10 +197,12 @@ void av1_encode_token_init(void) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !CONFIG_DAALA_EC
|
||||||
static void write_intra_mode(aom_writer *w, PREDICTION_MODE mode,
|
static void write_intra_mode(aom_writer *w, PREDICTION_MODE mode,
|
||||||
const aom_prob *probs) {
|
const aom_prob *probs) {
|
||||||
av1_write_token(w, av1_intra_mode_tree, probs, &intra_mode_encodings[mode]);
|
av1_write_token(w, av1_intra_mode_tree, probs, &intra_mode_encodings[mode]);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CONFIG_EXT_INTER
|
#if CONFIG_EXT_INTER
|
||||||
static void write_interintra_mode(aom_writer *w, INTERINTRA_MODE mode,
|
static void write_interintra_mode(aom_writer *w, INTERINTRA_MODE mode,
|
||||||
@@ -1258,7 +1260,12 @@ static void pack_inter_mode_mvs(AV1_COMP *cpi, const MODE_INFO *mi,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if CONFIG_DAALA_EC
|
||||||
|
aom_write_symbol(w, av1_intra_mode_ind[mbmi->uv_mode],
|
||||||
|
cm->fc->uv_mode_cdf[mode], INTRA_MODES);
|
||||||
|
#else
|
||||||
write_intra_mode(w, mbmi->uv_mode, cm->fc->uv_mode_prob[mode]);
|
write_intra_mode(w, mbmi->uv_mode, cm->fc->uv_mode_prob[mode]);
|
||||||
|
#endif
|
||||||
#if CONFIG_EXT_INTRA
|
#if CONFIG_EXT_INTRA
|
||||||
write_intra_angle_info(cm, xd, w);
|
write_intra_angle_info(cm, xd, w);
|
||||||
#endif // CONFIG_EXT_INTRA
|
#endif // CONFIG_EXT_INTRA
|
||||||
@@ -1661,8 +1668,12 @@ static void write_mb_modes_kf(const AV1_COMMON *cm, const MACROBLOCKD *xd,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if CONFIG_DAALA_EC
|
||||||
|
aom_write_symbol(w, av1_intra_mode_ind[mbmi->uv_mode],
|
||||||
|
cm->fc->uv_mode_cdf[mbmi->mode], INTRA_MODES);
|
||||||
|
#else
|
||||||
write_intra_mode(w, mbmi->uv_mode, cm->fc->uv_mode_prob[mbmi->mode]);
|
write_intra_mode(w, mbmi->uv_mode, cm->fc->uv_mode_prob[mbmi->mode]);
|
||||||
|
#endif
|
||||||
#if CONFIG_EXT_INTRA
|
#if CONFIG_EXT_INTRA
|
||||||
write_intra_angle_info(cm, xd, w);
|
write_intra_angle_info(cm, xd, w);
|
||||||
#endif // CONFIG_EXT_INTRA
|
#endif // CONFIG_EXT_INTRA
|
||||||
@@ -3616,9 +3627,14 @@ static uint32_t write_compressed_header(AV1_COMP *cpi, uint8_t *data) {
|
|||||||
#endif
|
#endif
|
||||||
update_seg_probs(cpi, header_bc);
|
update_seg_probs(cpi, header_bc);
|
||||||
|
|
||||||
for (i = 0; i < INTRA_MODES; ++i)
|
for (i = 0; i < INTRA_MODES; ++i) {
|
||||||
prob_diff_update(av1_intra_mode_tree, fc->uv_mode_prob[i],
|
prob_diff_update(av1_intra_mode_tree, fc->uv_mode_prob[i],
|
||||||
counts->uv_mode[i], INTRA_MODES, header_bc);
|
counts->uv_mode[i], INTRA_MODES, header_bc);
|
||||||
|
#if CONFIG_DAALA_EC
|
||||||
|
av1_tree_to_cdf(av1_intra_mode_tree, fc->uv_mode_prob[i],
|
||||||
|
fc->uv_mode_cdf[i]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#if CONFIG_EXT_PARTITION_TYPES
|
#if CONFIG_EXT_PARTITION_TYPES
|
||||||
prob_diff_update(av1_partition_tree, fc->partition_prob[0],
|
prob_diff_update(av1_partition_tree, fc->partition_prob[0],
|
||||||
|
Reference in New Issue
Block a user