Remove experimental flag for ext_tx

Also includes a bug fix.

Change-Id: Ia49ed00f8ffd1531c10bcf89b1f497310ee7cb82
This commit is contained in:
Debargha Mukherjee 2016-01-08 12:01:51 -08:00
parent 004b546ae1
commit a0900fd0db
13 changed files with 15 additions and 111 deletions

1
configure vendored
View File

@ -273,7 +273,6 @@ EXPERIMENT_LIST="
fp_mb_stats
emulate_hardware
misc_fixes
ext_tx
"
CONFIG_LIST="
dependency_tracking

View File

@ -82,9 +82,7 @@ typedef struct {
// Only for INTER blocks
INTERP_FILTER interp_filter;
MV_REFERENCE_FRAME ref_frame[2];
#if CONFIG_EXT_TX
TX_TYPE tx_type;
#endif // CONFIG_EXT_TX
// TODO(slavarnway): Delete and use bmi[3].as_mv[] instead.
int_mv mv[2];
@ -228,20 +226,12 @@ static INLINE TX_TYPE get_tx_type(PLANE_TYPE plane_type, const MACROBLOCKD *xd,
const MODE_INFO *const mi = xd->mi[0];
const MB_MODE_INFO *const mbmi = &mi->mbmi;
#if CONFIG_EXT_TX
(void) block_idx;
if (plane_type != PLANE_TYPE_Y || xd->lossless[mbmi->segment_id] ||
mbmi->tx_size >= TX_32X32)
return DCT_DCT;
return mbmi->tx_type;
#else
if (plane_type != PLANE_TYPE_Y || xd->lossless[mbmi->segment_id] ||
is_inter_block(mbmi) || mbmi->tx_size >= TX_32X32)
return DCT_DCT;
return intra_mode_to_tx_type_context[get_y_mode(mi, block_idx)];
#endif // CONFIG_EXT_TX
}
void vp10_setup_block_planes(MACROBLOCKD *xd, int ss_x, int ss_y);

View File

@ -326,7 +326,6 @@ static const struct segmentation_probs default_seg_probs = {
};
#endif
#if CONFIG_EXT_TX
const vpx_tree_index vp10_ext_tx_tree[TREE_SIZE(TX_TYPES)] = {
-DCT_DCT, 2,
-ADST_ADST, 4,
@ -346,7 +345,6 @@ static const vpx_prob default_inter_ext_tx_prob[EXT_TX_SIZES]
{176, 85, 128},
{192, 85, 128},
};
#endif // CONFIG_EXT_TX
static void init_mode_probs(FRAME_CONTEXT *fc) {
vp10_copy(fc->uv_mode_prob, default_uv_probs);
@ -364,10 +362,8 @@ static void init_mode_probs(FRAME_CONTEXT *fc) {
vp10_copy(fc->seg.tree_probs, default_seg_probs.tree_probs);
vp10_copy(fc->seg.pred_probs, default_seg_probs.pred_probs);
#endif
#if CONFIG_EXT_TX
vp10_copy(fc->intra_ext_tx_prob, default_intra_ext_tx_prob);
vp10_copy(fc->inter_ext_tx_prob, default_inter_ext_tx_prob);
#endif // CONFIG_EXT_TX
}
const vpx_tree_index vp10_switchable_interp_tree
@ -457,7 +453,6 @@ void vp10_adapt_intra_frame_probs(VP10_COMMON *cm) {
fc->skip_probs[i] = mode_mv_merge_probs(
pre_fc->skip_probs[i], counts->skip[i]);
#if CONFIG_EXT_TX
for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
int j;
for (j = 0; j < TX_TYPES; ++j)
@ -472,7 +467,6 @@ void vp10_adapt_intra_frame_probs(VP10_COMMON *cm) {
counts->inter_ext_tx[i],
fc->inter_ext_tx_prob[i]);
}
#endif // CONFIG_EXT_TX
#if CONFIG_MISC_FIXES
if (cm->seg.temporal_update) {

View File

@ -66,10 +66,8 @@ typedef struct frame_contexts {
#if CONFIG_MISC_FIXES
struct segmentation_probs seg;
#endif
#if CONFIG_EXT_TX
vpx_prob intra_ext_tx_prob[EXT_TX_SIZES][TX_TYPES][TX_TYPES - 1];
vpx_prob inter_ext_tx_prob[EXT_TX_SIZES][TX_TYPES - 1];
#endif // CONFIG_EXT_TX
int initialized;
} FRAME_CONTEXT;
@ -94,10 +92,8 @@ typedef struct FRAME_COUNTS {
#if CONFIG_MISC_FIXES
struct seg_counts seg;
#endif
#if CONFIG_EXT_TX
unsigned int intra_ext_tx[EXT_TX_SIZES][TX_TYPES][TX_TYPES];
unsigned int inter_ext_tx[EXT_TX_SIZES][TX_TYPES];
#endif // CONFIG_EXT_TX
} FRAME_COUNTS;
extern const vpx_prob vp10_kf_y_mode_prob[INTRA_MODES][INTRA_MODES]
@ -127,10 +123,8 @@ void vp10_tx_counts_to_branch_counts_16x16(const unsigned int *tx_count_16x16p,
void vp10_tx_counts_to_branch_counts_8x8(const unsigned int *tx_count_8x8p,
unsigned int (*ct_8x8p)[2]);
#if CONFIG_EXT_TX
extern const vpx_tree_index
vp10_ext_tx_tree[TREE_SIZE(TX_TYPES)];
#endif // CONFIG_EXT_TX
static INLINE int vp10_ceil_log2(int n) {
int i = 1, p = 2;

View File

@ -97,9 +97,7 @@ typedef enum {
TX_TYPES = 4
} TX_TYPE;
#if CONFIG_EXT_TX
#define EXT_TX_SIZES 3 // number of sizes that use extended transforms
#endif // CONFIG_EXT_TX
typedef enum {
VP9_LAST_FLAG = 1 << 0,

View File

@ -435,7 +435,6 @@ void vp10_accumulate_frame_counts(VP10_COMMON *cm, FRAME_COUNTS *counts,
comps->fp[i] += comps_t->fp[i];
}
#if CONFIG_EXT_TX
for (i = 0; i < EXT_TX_SIZES; i++) {
int j;
for (j = 0; j < TX_TYPES; ++j)
@ -446,7 +445,6 @@ void vp10_accumulate_frame_counts(VP10_COMMON *cm, FRAME_COUNTS *counts,
for (k = 0; k < TX_TYPES; k++)
cm->counts.inter_ext_tx[i][k] += counts->inter_ext_tx[i][k];
}
#endif // CONFIG_EXT_TX
#if CONFIG_MISC_FIXES
for (i = 0; i < PREDICTION_PROBS; i++)

View File

@ -268,11 +268,7 @@ static void inverse_transform_block_inter(MACROBLOCKD* xd, int plane,
if (eob == 1) {
dqcoeff[0] = 0;
} else {
#if CONFIG_EXT_TX
if (tx_type == DCT_DCT && tx_size <= TX_16X16 && eob <= 10)
#else
if (tx_size <= TX_16X16 && eob <= 10)
#endif // CONFIG_EXT_TX
memset(dqcoeff, 0, 4 * (4 << tx_size) * sizeof(dqcoeff[0]));
else if (tx_size == TX_32X32 && eob <= 34)
memset(dqcoeff, 0, 256 * sizeof(dqcoeff[0]));
@ -2128,7 +2124,6 @@ static size_t read_uncompressed_header(VP10Decoder *pbi,
return sz;
}
#if CONFIG_EXT_TX
static void read_ext_tx_probs(FRAME_CONTEXT *fc, vpx_reader *r) {
int i, j, k;
if (vpx_read(r, GROUP_DIFF_UPDATE_PROB)) {
@ -2145,7 +2140,6 @@ static void read_ext_tx_probs(FRAME_CONTEXT *fc, vpx_reader *r) {
}
}
}
#endif // CONFIG_EXT_TX
static int read_compressed_header(VP10Decoder *pbi, const uint8_t *data,
size_t partition_size) {
@ -2228,9 +2222,7 @@ static int read_compressed_header(VP10Decoder *pbi, const uint8_t *data,
#endif
read_mv_probs(nmvc, cm->allow_high_precision_mv, &r);
#if CONFIG_EXT_TX
read_ext_tx_probs(fc, &r);
#endif
}
return vpx_reader_has_error(&r);
@ -2271,12 +2263,10 @@ static void debug_check_frame_counts(const VP10_COMMON *const cm) {
assert(!memcmp(&cm->counts.tx, &zero_counts.tx, sizeof(cm->counts.tx)));
assert(!memcmp(cm->counts.skip, zero_counts.skip, sizeof(cm->counts.skip)));
assert(!memcmp(&cm->counts.mv, &zero_counts.mv, sizeof(cm->counts.mv)));
#if CONFIG_EXT_TX
assert(!memcmp(cm->counts.intra_ext_tx, zero_counts.intra_ext_tx,
sizeof(cm->counts.intra_ext_tx)));
assert(!memcmp(cm->counts.inter_ext_tx, zero_counts.inter_ext_tx,
sizeof(cm->counts.inter_ext_tx)));
#endif // CONFIG_EXT_TX
}
#endif // NDEBUG

View File

@ -297,21 +297,19 @@ static void read_intra_frame_mode_info(VP10_COMMON *const cm,
mbmi->uv_mode = read_intra_mode_uv(cm, xd, r, mbmi->mode);
#if CONFIG_EXT_TX
if (mbmi->tx_size < TX_32X32 &&
cm->base_qindex > 0 && !mbmi->skip &&
!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
FRAME_COUNTS *counts = xd->counts;
TX_TYPE tx_type_nom = intra_mode_to_tx_type_context[mbmi->mode];
mbmi->tx_type = vpx_read_tree(
r, vp10_ext_tx_tree,
cm->fc->intra_ext_tx_prob[mbmi->tx_size][tx_type_nom]);
if (counts)
++counts->intra_ext_tx[mbmi->tx_size][tx_type_nom][mbmi->tx_type];
} else {
mbmi->tx_type = DCT_DCT;
}
#endif // CONFIG_EXT_TX
if (mbmi->tx_size < TX_32X32 &&
cm->base_qindex > 0 && !mbmi->skip &&
!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
FRAME_COUNTS *counts = xd->counts;
TX_TYPE tx_type_nom = intra_mode_to_tx_type_context[mbmi->mode];
mbmi->tx_type = vpx_read_tree(
r, vp10_ext_tx_tree,
cm->fc->intra_ext_tx_prob[mbmi->tx_size][tx_type_nom]);
if (counts)
++counts->intra_ext_tx[mbmi->tx_size][tx_type_nom][mbmi->tx_type];
} else {
mbmi->tx_type = DCT_DCT;
}
}
static int read_mv_component(vpx_reader *r,
@ -669,7 +667,6 @@ static void read_inter_frame_mode_info(VP10Decoder *const pbi,
else
read_intra_block_mode_info(cm, xd, mi, r);
#if CONFIG_EXT_TX
if (mbmi->tx_size < TX_32X32 &&
cm->base_qindex > 0 && !mbmi->skip &&
!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
@ -691,7 +688,6 @@ static void read_inter_frame_mode_info(VP10Decoder *const pbi,
} else {
mbmi->tx_type = DCT_DCT;
}
#endif // CONFIG_EXT_TX
}
void vp10_read_mode_info(VP10Decoder *const pbi, MACROBLOCKD *xd,

View File

@ -58,14 +58,10 @@ static INLINE void write_uniform(vpx_writer *w, int n, int v) {
}
}
#if CONFIG_EXT_TX
static struct vp10_token ext_tx_encodings[TX_TYPES];
#endif // CONFIG_EXT_TX
void vp10_encode_token_init() {
#if CONFIG_EXT_TX
vp10_tokens_from_tree(ext_tx_encodings, vp10_ext_tx_tree);
#endif // CONFIG_EXT_TX
}
static void write_intra_mode(vpx_writer *w, PREDICTION_MODE mode,
@ -161,7 +157,6 @@ static void update_switchable_interp_probs(VP10_COMMON *cm, vpx_writer *w,
counts->switchable_interp[j], SWITCHABLE_FILTERS, w);
}
#if CONFIG_EXT_TX
static void update_ext_tx_probs(VP10_COMMON *cm, vpx_writer *w) {
const int savings_thresh = vp10_cost_one(GROUP_DIFF_UPDATE_PROB) -
vp10_cost_zero(GROUP_DIFF_UPDATE_PROB);
@ -204,7 +199,6 @@ static void update_ext_tx_probs(VP10_COMMON *cm, vpx_writer *w) {
}
}
}
#endif // CONFIG_EXT_TX
static void pack_mb_tokens(vpx_writer *w,
TOKENEXTRA **tp, const TOKENEXTRA *const stop,
@ -443,7 +437,6 @@ static void pack_inter_mode_mvs(VP10_COMP *cpi, const MODE_INFO *mi,
}
}
}
#if CONFIG_EXT_TX
if (mbmi->tx_size < TX_32X32 &&
cm->base_qindex > 0 && !mbmi->skip &&
!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
@ -463,7 +456,6 @@ static void pack_inter_mode_mvs(VP10_COMP *cpi, const MODE_INFO *mi,
if (!mbmi->skip)
assert(mbmi->tx_type == DCT_DCT);
}
#endif // CONFIG_EXT_TX
}
static void write_mb_modes_kf(const VP10_COMMON *cm, const MACROBLOCKD *xd,
@ -508,7 +500,6 @@ static void write_mb_modes_kf(const VP10_COMMON *cm, const MACROBLOCKD *xd,
write_intra_mode(w, mbmi->uv_mode, cm->fc->uv_mode_prob[mbmi->mode]);
#if CONFIG_EXT_TX
if (mbmi->tx_size < TX_32X32 &&
cm->base_qindex > 0 && !mbmi->skip &&
!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
@ -518,7 +509,6 @@ static void write_mb_modes_kf(const VP10_COMMON *cm, const MACROBLOCKD *xd,
[intra_mode_to_tx_type_context[mbmi->mode]],
&ext_tx_encodings[mbmi->tx_type]);
}
#endif // CONFIG_EXT_TX
}
static void write_modes_b(VP10_COMP *cpi, const TileInfo *const tile,
@ -1487,9 +1477,7 @@ static size_t write_compressed_header(VP10_COMP *cpi, uint8_t *data) {
vp10_write_nmv_probs(cm, cm->allow_high_precision_mv, &header_bc,
&counts->mv);
#if CONFIG_EXT_TX
update_ext_tx_probs(cm, &header_bc);
#endif // CONFIG_EXT_TX
}
vpx_stop_encode(&header_bc);

View File

@ -3024,7 +3024,6 @@ static void encode_superblock(VP10_COMP *cpi, ThreadData *td,
}
++td->counts->tx.tx_totals[mbmi->tx_size];
++td->counts->tx.tx_totals[get_uv_tx_size(mbmi, &xd->plane[1])];
#if CONFIG_EXT_TX
if (mbmi->tx_size < TX_32X32 &&
cm->base_qindex > 0 && !mbmi->skip &&
!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
@ -3036,6 +3035,5 @@ static void encode_superblock(VP10_COMP *cpi, ThreadData *td,
[mbmi->tx_type];
}
}
#endif // CONFIG_EXT_TX
}
}

View File

@ -467,10 +467,8 @@ typedef struct VP10_COMP {
int multi_arf_enabled;
int multi_arf_last_grp_enabled;
#if CONFIG_EXT_TX
int intra_tx_type_costs[EXT_TX_SIZES][TX_TYPES][TX_TYPES];
int inter_tx_type_costs[EXT_TX_SIZES][TX_TYPES];
#endif // CONFIG_EXT_TX
#if CONFIG_VP9_TEMPORAL_DENOISING
VP9_DENOISER denoiser;
#endif

View File

@ -84,7 +84,6 @@ static void fill_mode_costs(VP10_COMP *cpi) {
vp10_cost_tokens(cpi->switchable_interp_costs[i],
fc->switchable_interp_prob[i], vp10_switchable_interp_tree);
#if CONFIG_EXT_TX
for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
for (j = 0; j < TX_TYPES; ++j)
vp10_cost_tokens(cpi->intra_tx_type_costs[i][j],
@ -96,7 +95,6 @@ static void fill_mode_costs(VP10_COMP *cpi) {
fc->inter_ext_tx_prob[i],
vp10_ext_tx_tree);
}
#endif // CONFIG_EXT_TX
}
static void fill_token_costs(vp10_coeff_cost *c,

View File

@ -54,9 +54,7 @@
#define MIN_EARLY_TERM_INDEX 3
#define NEW_MV_DISCOUNT_FACTOR 8
#if CONFIG_EXT_TX
const double ext_tx_th = 0.99;
#endif // CONFIG_EXT_TX
typedef struct {
PREDICTION_MODE mode;
@ -602,7 +600,6 @@ static void choose_largest_tx_size(VP10_COMP *cpi, MACROBLOCK *x,
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
#if CONFIG_EXT_TX
TX_TYPE tx_type, best_tx_type = DCT_DCT;
int r, s;
int64_t d, psse, this_rd, best_rd = INT64_MAX;
@ -644,7 +641,8 @@ static void choose_largest_tx_size(VP10_COMP *cpi, MACROBLOCK *x,
txfm_rd_in_plane(x, rate, distortion, skip,
sse, ref_best_rd, 0, bs,
mbmi->tx_size, cpi->sf.use_fast_coef_costing);
if (mbmi->tx_size < TX_32X32 && !xd->lossless[mbmi->segment_id]) {
if (mbmi->tx_size < TX_32X32 && !xd->lossless[mbmi->segment_id] &&
*rate != INT_MAX) {
if (is_inter)
*rate += cpi->inter_tx_type_costs[mbmi->tx_size][mbmi->tx_type];
else
@ -652,13 +650,6 @@ static void choose_largest_tx_size(VP10_COMP *cpi, MACROBLOCK *x,
[intra_mode_to_tx_type_context[mbmi->mode]]
[mbmi->tx_type];
}
#else
mbmi->tx_size = VPXMIN(max_tx_size, largest_tx_size);
txfm_rd_in_plane(x, rate, distortion, skip,
sse, ref_best_rd, 0, bs,
mbmi->tx_size, cpi->sf.use_fast_coef_costing);
#endif // CONFIG_EXT_TX
}
static void choose_smallest_tx_size(VP10_COMP *cpi, MACROBLOCK *x,
@ -697,9 +688,7 @@ static void choose_tx_size_from_rd(VP10_COMP *cpi, MACROBLOCK *x,
TX_SIZE best_tx = max_tx_size;
int start_tx, end_tx;
const int tx_select = cm->tx_mode == TX_MODE_SELECT;
#if CONFIG_EXT_TX
TX_TYPE tx_type, best_tx_type = DCT_DCT;
#endif // CONFIG_EXT_TX
const int is_inter = is_inter_block(mbmi);
const vpx_prob *tx_probs = get_tx_probs2(max_tx_size, xd, &cm->fc->tx_probs);
@ -722,9 +711,7 @@ static void choose_tx_size_from_rd(VP10_COMP *cpi, MACROBLOCK *x,
*skip = 0;
*psse = INT64_MAX;
#if CONFIG_EXT_TX
for (tx_type = DCT_DCT; tx_type < TX_TYPES; ++tx_type) {
#endif // CONFIG_EXT_TX
last_rd = INT64_MAX;
for (n = start_tx; n >= end_tx; --n) {
int r_tx_size = 0;
@ -735,7 +722,6 @@ static void choose_tx_size_from_rd(VP10_COMP *cpi, MACROBLOCK *x,
r_tx_size += vp10_cost_one(tx_probs[m]);
}
#if CONFIG_EXT_TX
if (n >= TX_32X32 && tx_type != DCT_DCT) {
continue;
}
@ -753,11 +739,6 @@ static void choose_tx_size_from_rd(VP10_COMP *cpi, MACROBLOCK *x,
[intra_mode_to_tx_type_context[mbmi->mode]]
[mbmi->tx_type];
}
#else // CONFIG_EXT_TX
txfm_rd_in_plane(x, &r, &d, &s,
&sse, ref_best_rd, 0, bs, n,
cpi->sf.use_fast_coef_costing);
#endif // CONFIG_EXT_TX
if (r == INT_MAX)
continue;
@ -781,19 +762,13 @@ static void choose_tx_size_from_rd(VP10_COMP *cpi, MACROBLOCK *x,
// Early termination in transform size search.
if (cpi->sf.tx_size_search_breakout &&
(rd == INT64_MAX ||
#if CONFIG_EXT_TX
(s == 1 && tx_type != DCT_DCT && n < start_tx) ||
#else
(s == 1 && n < start_tx) ||
#endif
(n < (int) max_tx_size && rd > last_rd)))
break;
last_rd = rd;
if (rd <
#if CONFIG_EXT_TX
(is_inter && best_tx_type == DCT_DCT ? ext_tx_th : 1) *
#endif // CONFIG_EXT_TX
best_rd) {
best_tx = n;
best_rd = rd;
@ -801,24 +776,18 @@ static void choose_tx_size_from_rd(VP10_COMP *cpi, MACROBLOCK *x,
*rate = r;
*skip = s;
*psse = sse;
#if CONFIG_EXT_TX
best_tx_type = mbmi->tx_type;
#endif // CONFIG_EXT_TX
}
}
#if CONFIG_EXT_TX
}
#endif // CONFIG_EXT_TX
mbmi->tx_size = best_tx;
#if CONFIG_EXT_TX
mbmi->tx_type = best_tx_type;
if (mbmi->tx_size >= TX_32X32)
assert(mbmi->tx_type == DCT_DCT);
txfm_rd_in_plane(x, &r, &d, &s,
&sse, ref_best_rd, 0, bs, best_tx,
cpi->sf.use_fast_coef_costing);
#endif // CONFIG_EXT_TX
}
static void super_block_yrd(VP10_COMP *cpi, MACROBLOCK *x, int *rate,
@ -1171,9 +1140,7 @@ static int64_t rd_pick_intra_sby_mode(VP10_COMP *cpi, MACROBLOCK *x,
int this_rate, this_rate_tokenonly, s;
int64_t this_distortion, this_rd;
TX_SIZE best_tx = TX_4X4;
#if CONFIG_EXT_TX
TX_TYPE best_tx_type = DCT_DCT;
#endif // CONFIG_EXT_TX
int *bmode_costs;
const MODE_INFO *above_mi = xd->above_mi;
const MODE_INFO *left_mi = xd->left_mi;
@ -1200,9 +1167,7 @@ static int64_t rd_pick_intra_sby_mode(VP10_COMP *cpi, MACROBLOCK *x,
mode_selected = mode;
best_rd = this_rd;
best_tx = mic->mbmi.tx_size;
#if CONFIG_EXT_TX
best_tx_type = mic->mbmi.tx_type;
#endif // CONFIG_EXT_TX
*rate = this_rate;
*rate_tokenonly = this_rate_tokenonly;
*distortion = this_distortion;
@ -1212,9 +1177,7 @@ static int64_t rd_pick_intra_sby_mode(VP10_COMP *cpi, MACROBLOCK *x,
mic->mbmi.mode = mode_selected;
mic->mbmi.tx_size = best_tx;
#if CONFIG_EXT_TX
mic->mbmi.tx_type = best_tx_type;
#endif // CONFIG_EXT_TX
return best_rd;
}