Rename the RD search hash tables
Previous names are a bit confusing.
Change-Id: Idb6684f018013ccdc87b6c7b0b7e147eff3b44ca
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 6424036..f7e7b98 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -108,15 +108,15 @@
TX_TYPE txk_type[TXK_TYPE_BUF_LEN];
RD_STATS rd_stats;
uint32_t hash_value;
-} TX_RD_INFO;
+} MB_RD_INFO;
#define RD_RECORD_BUFFER_LEN 8
typedef struct {
- TX_RD_INFO tx_rd_info[RD_RECORD_BUFFER_LEN]; // Circular buffer.
+ MB_RD_INFO tx_rd_info[RD_RECORD_BUFFER_LEN]; // Circular buffer.
int index_start;
int num;
CRC_CALCULATOR crc_calculator; // Hash function.
-} TX_RD_RECORD;
+} MB_RD_RECORD;
typedef struct {
int64_t dist;
@@ -128,28 +128,25 @@
uint8_t txb_entropy_ctx;
uint8_t valid;
uint8_t fast; // This is not being used now.
-} TX_SIZE_RD_INFO;
+} TXB_RD_INFO;
#define TX_SIZE_RD_RECORD_BUFFER_LEN 256
typedef struct {
uint32_t hash_vals[TX_SIZE_RD_RECORD_BUFFER_LEN];
- TX_SIZE_RD_INFO tx_rd_info[TX_SIZE_RD_RECORD_BUFFER_LEN];
+ TXB_RD_INFO tx_rd_info[TX_SIZE_RD_RECORD_BUFFER_LEN];
int index_start;
int num;
-} TX_SIZE_RD_RECORD;
+} TXB_RD_RECORD;
typedef struct tx_size_rd_info_node {
- TX_SIZE_RD_INFO *rd_info_array; // Points to array of size TX_TYPES.
+ TXB_RD_INFO *rd_info_array; // Points to array of size TX_TYPES.
struct tx_size_rd_info_node *children[4];
-} TX_SIZE_RD_INFO_NODE;
+} TXB_RD_INFO_NODE;
typedef struct macroblock MACROBLOCK;
struct macroblock {
struct macroblock_plane plane[MAX_MB_PLANE];
- // Save the transform RD search info.
- TX_RD_RECORD tx_rd_record;
-
// Determine if one would go with reduced complexity transform block
// search model to select prediction modes, or full complexity model
// to select transform kernel.
@@ -163,17 +160,17 @@
// Activate constrained coding block partition search range.
int use_cb_search_range;
- // Also save RD info on the TX size search level for square TX sizes.
- TX_SIZE_RD_RECORD
- tx_size_rd_record_8X8[(MAX_MIB_SIZE >> 1) * (MAX_MIB_SIZE >> 1)];
- TX_SIZE_RD_RECORD
- tx_size_rd_record_16X16[(MAX_MIB_SIZE >> 2) * (MAX_MIB_SIZE >> 2)];
- TX_SIZE_RD_RECORD
- tx_size_rd_record_32X32[(MAX_MIB_SIZE >> 3) * (MAX_MIB_SIZE >> 3)];
- TX_SIZE_RD_RECORD
- tx_size_rd_record_64X64[(MAX_MIB_SIZE >> 4) * (MAX_MIB_SIZE >> 4)];
+ // Inter macroblock RD search info.
+ MB_RD_RECORD mb_rd_record;
- TX_SIZE_RD_RECORD tx_size_rd_record_intra;
+ // Inter transform block RD search info. for square TX sizes.
+ TXB_RD_RECORD txb_rd_record_8X8[(MAX_MIB_SIZE >> 1) * (MAX_MIB_SIZE >> 1)];
+ TXB_RD_RECORD txb_rd_record_16X16[(MAX_MIB_SIZE >> 2) * (MAX_MIB_SIZE >> 2)];
+ TXB_RD_RECORD txb_rd_record_32X32[(MAX_MIB_SIZE >> 3) * (MAX_MIB_SIZE >> 3)];
+ TXB_RD_RECORD txb_rd_record_64X64[(MAX_MIB_SIZE >> 4) * (MAX_MIB_SIZE >> 4)];
+
+ // Intra transform block RD search info. for square TX sizes.
+ TXB_RD_RECORD txb_rd_record_intra;
MACROBLOCKD e_mbd;
MB_MODE_INFO_EXT *mbmi_ext;
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index f74b66d..9ca9013 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -3468,12 +3468,13 @@
}
}
- x->tx_rd_record.num = x->tx_rd_record.index_start = 0;
- av1_zero(x->tx_size_rd_record_8X8);
- av1_zero(x->tx_size_rd_record_16X16);
- av1_zero(x->tx_size_rd_record_32X32);
- av1_zero(x->tx_size_rd_record_64X64);
- av1_zero(x->tx_size_rd_record_intra);
+ x->mb_rd_record.num = x->mb_rd_record.index_start = 0;
+
+ av1_zero(x->txb_rd_record_8X8);
+ av1_zero(x->txb_rd_record_16X16);
+ av1_zero(x->txb_rd_record_32X32);
+ av1_zero(x->txb_rd_record_64X64);
+ av1_zero(x->txb_rd_record_intra);
av1_zero(x->pred_mv);
pc_root->index = 0;
@@ -3592,11 +3593,12 @@
}
}
- x->tx_rd_record.num = x->tx_rd_record.index_start = 0;
- av1_zero(x->tx_size_rd_record_8X8);
- av1_zero(x->tx_size_rd_record_16X16);
- av1_zero(x->tx_size_rd_record_32X32);
- av1_zero(x->tx_size_rd_record_64X64);
+ x->mb_rd_record.num = x->mb_rd_record.index_start = 0;
+ av1_zero(x->txb_rd_record_8X8);
+ av1_zero(x->txb_rd_record_16X16);
+ av1_zero(x->txb_rd_record_32X32);
+ av1_zero(x->txb_rd_record_64X64);
+ av1_zero(x->txb_rd_record_intra);
av1_zero(x->pred_mv);
pc_root->index = 0;
@@ -3747,7 +3749,7 @@
#endif // CONFIG_LOOPFILTERING_ACROSS_TILES_EXT
#endif // CONFIG_LOOPFILTERING_ACROSS_TILES
- av1_crc_calculator_init(&td->mb.tx_rd_record.crc_calculator, 24, 0x5D6DCB);
+ av1_crc_calculator_init(&td->mb.mb_rd_record.crc_calculator, 24, 0x5D6DCB);
td->intrabc_used_this_tile = 0;
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index dea4388..5ff808d 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1834,8 +1834,7 @@
}
}
-static int find_tx_size_rd_info(TX_SIZE_RD_RECORD *cur_record,
- const uint32_t hash);
+static int find_tx_size_rd_info(TXB_RD_RECORD *cur_record, const uint32_t hash);
static uint32_t get_intra_txb_hash(MACROBLOCK *x, int plane, int blk_row,
int blk_col, BLOCK_SIZE plane_bsize,
@@ -1852,7 +1851,7 @@
cur_hash_row += txb_w;
cur_diff_row += diff_stride;
}
- return av1_get_crc_value(&x->tx_rd_record.crc_calculator,
+ return av1_get_crc_value(&x->mb_rd_record.crc_calculator,
(uint8_t *)hash_data, 2 * txb_w * txb_h);
}
@@ -1871,36 +1870,35 @@
uint16_t best_eob = 0;
av1_invalid_rd_stats(best_rd_stats);
- TX_SIZE_RD_INFO *intra_tx_size_rd_info = NULL;
+ TXB_RD_INFO *intra_txb_rd_info = NULL;
uint16_t cur_joint_ctx = 0;
if (cpi->sf.use_intra_txb_hash && frame_is_intra_only(cm) && !is_inter &&
plane == 0 && tx_size_wide[tx_size] == tx_size_high[tx_size]) {
const uint32_t intra_hash =
get_intra_txb_hash(x, plane, blk_row, blk_col, plane_bsize, tx_size);
const int intra_hash_idx =
- find_tx_size_rd_info(&x->tx_size_rd_record_intra, intra_hash);
- intra_tx_size_rd_info =
- &x->tx_size_rd_record_intra.tx_rd_info[intra_hash_idx];
+ find_tx_size_rd_info(&x->txb_rd_record_intra, intra_hash);
+ intra_txb_rd_info = &x->txb_rd_record_intra.tx_rd_info[intra_hash_idx];
TXB_CTX txb_ctx;
get_txb_ctx(plane_bsize, tx_size, plane, a, l, &txb_ctx);
cur_joint_ctx = (txb_ctx.dc_sign_ctx << 8) + txb_ctx.txb_skip_ctx;
if (intra_hash_idx > 0 &&
- intra_tx_size_rd_info->entropy_context == cur_joint_ctx &&
- x->tx_size_rd_record_intra.tx_rd_info[intra_hash_idx].valid) {
- best_rd_stats->rate = intra_tx_size_rd_info->rate;
- best_rd_stats->dist = intra_tx_size_rd_info->dist;
- best_rd_stats->sse = intra_tx_size_rd_info->sse;
- best_rd_stats->skip = intra_tx_size_rd_info->eob == 0;
- x->plane[plane].eobs[block] = intra_tx_size_rd_info->eob;
+ intra_txb_rd_info->entropy_context == cur_joint_ctx &&
+ x->txb_rd_record_intra.tx_rd_info[intra_hash_idx].valid) {
+ best_rd_stats->rate = intra_txb_rd_info->rate;
+ best_rd_stats->dist = intra_txb_rd_info->dist;
+ best_rd_stats->sse = intra_txb_rd_info->sse;
+ best_rd_stats->skip = intra_txb_rd_info->eob == 0;
+ x->plane[plane].eobs[block] = intra_txb_rd_info->eob;
x->plane[plane].txb_entropy_ctx[block] =
- intra_tx_size_rd_info->txb_entropy_ctx;
+ intra_txb_rd_info->txb_entropy_ctx;
if (plane == 0) {
update_txk_array(mbmi->txk_type, plane_bsize, blk_row, blk_col, tx_size,
- intra_tx_size_rd_info->tx_type);
+ intra_txb_rd_info->tx_type);
}
best_rd = RDCOST(x->rdmult, best_rd_stats->rate, best_rd_stats->dist);
- best_eob = intra_tx_size_rd_info->eob;
+ best_eob = intra_txb_rd_info->eob;
goto RECON_INTRA;
}
}
@@ -2012,15 +2010,15 @@
x->plane[plane].txb_entropy_ctx[block] = best_txb_ctx;
x->plane[plane].eobs[block] = best_eob;
- if (intra_tx_size_rd_info != NULL) {
- intra_tx_size_rd_info->valid = 1;
- intra_tx_size_rd_info->entropy_context = cur_joint_ctx;
- intra_tx_size_rd_info->rate = best_rd_stats->rate;
- intra_tx_size_rd_info->dist = best_rd_stats->dist;
- intra_tx_size_rd_info->sse = best_rd_stats->sse;
- intra_tx_size_rd_info->eob = best_eob;
- intra_tx_size_rd_info->txb_entropy_ctx = best_txb_ctx;
- if (plane == 0) intra_tx_size_rd_info->tx_type = best_tx_type;
+ if (intra_txb_rd_info != NULL) {
+ intra_txb_rd_info->valid = 1;
+ intra_txb_rd_info->entropy_context = cur_joint_ctx;
+ intra_txb_rd_info->rate = best_rd_stats->rate;
+ intra_txb_rd_info->dist = best_rd_stats->dist;
+ intra_txb_rd_info->sse = best_rd_stats->sse;
+ intra_txb_rd_info->eob = best_eob;
+ intra_txb_rd_info->txb_entropy_ctx = best_txb_ctx;
+ if (plane == 0) intra_txb_rd_info->tx_type = best_tx_type;
}
RECON_INTRA:
@@ -3449,7 +3447,7 @@
int plane_bsize, const ENTROPY_CONTEXT *a,
const ENTROPY_CONTEXT *l, RD_STATS *rd_stats,
int fast_tx_search, int64_t ref_rdcost,
- TX_SIZE_RD_INFO *rd_info_array) {
+ TXB_RD_INFO *rd_info_array) {
const struct macroblock_plane *const p = &x->plane[plane];
TXB_CTX txb_ctx;
get_txb_ctx(plane_bsize, tx_size, plane, a, l, &txb_ctx);
@@ -3502,7 +3500,7 @@
TXFM_CONTEXT *tx_above, TXFM_CONTEXT *tx_left,
RD_STATS *rd_stats, int64_t ref_best_rd,
int *is_cost_valid, int fast_tx_search,
- TX_SIZE_RD_INFO_NODE *rd_info_node) {
+ TXB_RD_INFO_NODE *rd_info_node) {
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
struct macroblock_plane *const p = &x->plane[plane];
@@ -3771,7 +3769,7 @@
static void select_inter_block_yrd(const AV1_COMP *cpi, MACROBLOCK *x,
RD_STATS *rd_stats, BLOCK_SIZE bsize,
int64_t ref_best_rd, int fast_tx_search,
- TX_SIZE_RD_INFO_NODE *rd_info_tree) {
+ TXB_RD_INFO_NODE *rd_info_tree) {
MACROBLOCKD *const xd = &x->e_mbd;
int is_cost_valid = 1;
int64_t this_rd = 0;
@@ -3842,7 +3840,7 @@
static int64_t select_tx_size_fix_type(const AV1_COMP *cpi, MACROBLOCK *x,
RD_STATS *rd_stats, BLOCK_SIZE bsize,
int64_t ref_best_rd,
- TX_SIZE_RD_INFO_NODE *rd_info_tree) {
+ TXB_RD_INFO_NODE *rd_info_tree) {
const int fast_tx_search = cpi->sf.tx_size_search_method > USE_FULL_RD;
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
@@ -4056,7 +4054,7 @@
const int16_t *diff = &p->src_diff[0];
uint16_t hash_data[MAX_SB_SQUARE];
memcpy(hash_data, diff, sizeof(*hash_data) * rows * cols);
- return (av1_get_crc_value(&x->tx_rd_record.crc_calculator,
+ return (av1_get_crc_value(&x->mb_rd_record.crc_calculator,
(uint8_t *)hash_data, 2 * rows * cols)
<< 7) +
bsize;
@@ -4064,7 +4062,7 @@
static void save_tx_rd_info(int n4, uint32_t hash, const MACROBLOCK *const x,
const RD_STATS *const rd_stats,
- TX_RD_RECORD *tx_rd_record) {
+ MB_RD_RECORD *tx_rd_record) {
int index;
if (tx_rd_record->num < RD_RECORD_BUFFER_LEN) {
index =
@@ -4075,7 +4073,7 @@
tx_rd_record->index_start =
(tx_rd_record->index_start + 1) % RD_RECORD_BUFFER_LEN;
}
- TX_RD_INFO *const tx_rd_info = &tx_rd_record->tx_rd_info[index];
+ MB_RD_INFO *const tx_rd_info = &tx_rd_record->tx_rd_info[index];
const MACROBLOCKD *const xd = &x->e_mbd;
const MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
tx_rd_info->hash_value = hash;
@@ -4087,7 +4085,7 @@
tx_rd_info->rd_stats = *rd_stats;
}
-static void fetch_tx_rd_info(int n4, const TX_RD_INFO *const tx_rd_info,
+static void fetch_tx_rd_info(int n4, const MB_RD_INFO *const tx_rd_info,
RD_STATS *const rd_stats, MACROBLOCK *const x) {
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
@@ -4099,7 +4097,7 @@
*rd_stats = tx_rd_info->rd_stats;
}
-static int find_tx_size_rd_info(TX_SIZE_RD_RECORD *cur_record,
+static int find_tx_size_rd_info(TXB_RD_RECORD *cur_record,
const uint32_t hash) {
// Linear search through the circular buffer to find matching hash.
int index;
@@ -4131,12 +4129,11 @@
// partition and TX size search. The resulting RD info records are returned in
// the form of a quadtree for easier access in actual TX size search.
static int find_tx_size_rd_records(MACROBLOCK *x, BLOCK_SIZE bsize, int mi_row,
- int mi_col,
- TX_SIZE_RD_INFO_NODE *dst_rd_info) {
- TX_SIZE_RD_RECORD *rd_records_table[4] = { x->tx_size_rd_record_8X8,
- x->tx_size_rd_record_16X16,
- x->tx_size_rd_record_32X32,
- x->tx_size_rd_record_64X64 };
+ int mi_col, TXB_RD_INFO_NODE *dst_rd_info) {
+ TXB_RD_RECORD *rd_records_table[4] = { x->txb_rd_record_8X8,
+ x->txb_rd_record_16X16,
+ x->txb_rd_record_32X32,
+ x->txb_rd_record_64X64 };
const TX_SIZE max_square_tx_size = max_txsize_lookup[bsize];
const int bw = block_size_wide[bsize];
const int bh = block_size_high[bsize];
@@ -4183,7 +4180,7 @@
cur_hash_row += cur_tx_bw;
cur_diff_row += diff_stride;
}
- const int hash = av1_get_crc_value(&x->tx_rd_record.crc_calculator,
+ const int hash = av1_get_crc_value(&x->mb_rd_record.crc_calculator,
(uint8_t *)hash_data,
2 * cur_tx_bw * cur_tx_bh);
@@ -4375,15 +4372,15 @@
av1_invalid_rd_stats(rd_stats);
const uint32_t hash = get_block_residue_hash(x, bsize);
- TX_RD_RECORD *tx_rd_record = &x->tx_rd_record;
+ MB_RD_RECORD *mb_rd_record = &x->mb_rd_record;
if (ref_best_rd != INT64_MAX && within_border) {
- for (int i = 0; i < tx_rd_record->num; ++i) {
- const int index = (tx_rd_record->index_start + i) % RD_RECORD_BUFFER_LEN;
+ for (int i = 0; i < mb_rd_record->num; ++i) {
+ const int index = (mb_rd_record->index_start + i) % RD_RECORD_BUFFER_LEN;
// If there is a match in the tx_rd_record, fetch the RD decision and
// terminate early.
- if (tx_rd_record->tx_rd_info[index].hash_value == hash) {
- TX_RD_INFO *tx_rd_info = &tx_rd_record->tx_rd_info[index];
+ if (mb_rd_record->tx_rd_info[index].hash_value == hash) {
+ MB_RD_INFO *tx_rd_info = &mb_rd_record->tx_rd_info[index];
fetch_tx_rd_info(n4, tx_rd_info, rd_stats, x);
return;
}
@@ -4397,13 +4394,13 @@
predict_skip_flag(x, bsize, &dist, cm->reduced_tx_set_used)) {
set_skip_flag(cpi, x, rd_stats, bsize, dist);
// Save the RD search results into tx_rd_record.
- if (within_border) save_tx_rd_info(n4, hash, x, rd_stats, tx_rd_record);
+ if (within_border) save_tx_rd_info(n4, hash, x, rd_stats, mb_rd_record);
return;
}
// Precompute residual hashes and find existing or add new RD records to
// store and reuse rate and distortion values to speed up TX size search.
- TX_SIZE_RD_INFO_NODE matched_rd_info[16 + 64 + 256];
+ TXB_RD_INFO_NODE matched_rd_info[16 + 64 + 256];
int found_rd_info = 0;
if (ref_best_rd != INT64_MAX && within_border) {
found_rd_info =
@@ -4447,7 +4444,7 @@
memcpy(x->blk_skip[0], best_blk_skip, sizeof(best_blk_skip[0]) * n4);
// Save the RD search results into tx_rd_record.
- if (within_border) save_tx_rd_info(n4, hash, x, rd_stats, tx_rd_record);
+ if (within_border) save_tx_rd_info(n4, hash, x, rd_stats, mb_rd_record);
}
static void tx_block_uvrd(const AV1_COMP *cpi, MACROBLOCK *x, int blk_row,