Cleanup TxbRdRecords structure
The structure TxbRdRecords holds an instance of type
MB_RD_RECORD. Hence, the definition of TxbRdRecords
structure and the code related to TxbRdRecords is cleaned-up.
Change-Id: If89b27ffebd419543debf4491118b528d2fc4581
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 9696859..518bd3f 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -248,10 +248,11 @@
uint32_t hash_value;
} MB_RD_INFO;
-/*! \brief Hash records of txfm search results for the partition block.
+/*! \brief Hash records of inter-mode txfm results for the
+ * whole partition block.
*/
typedef struct {
- //! Circular buffer that stores the txfm search results.
+ //! Circular buffer that stores the inter-mode txfm results.
MB_RD_INFO tx_rd_info[RD_RECORD_BUFFER_LEN];
//! Index to insert the newest rd record.
int index_start;
@@ -442,28 +443,6 @@
#define MAX_NUM_64X64_TXBS ((MAX_MIB_SIZE >> 4) * (MAX_MIB_SIZE >> 4))
/*!\endcond */
-/*! \brief Txfm hash records
- *
- * Hash records of the transform search results based on the residue. There
- * are two main types here:
- * - MB_RD_RECORD: records a whole *partition block*'s inter-mode txfm result.
- * Since this operates on the partition block level, this can give us a
- * whole txfm partition tree.
- * - TXB_RD_RECORD: records a txfm search result within a transform block
- * itself. This operates on txb level only and only applies to square
- * txfms.
- */
-typedef struct {
- /*****************************************************************************
- * \name TXB RD Record
- ****************************************************************************/
- /**@{*/
- //! Txfm hash record for the whole coding block.
- MB_RD_RECORD mb_rd_record;
-
- /**@}*/
-} TxbRdRecords;
-
/*! \brief Stores various encoding/search decisions related to txfm search.
*
* This struct contains a cache of previous txfm results, and some buffers for
@@ -493,18 +472,13 @@
*/
uint8_t tx_type_map_[MAX_MIB_SIZE * MAX_MIB_SIZE];
- /*! \brief Txfm hash records
+ /*! \brief Txfm hash records of inter-modes
*
- * Hash records of the transform search results based on the residue. There
- * are two main types here:
- * - MB_RD_RECORD: records a whole *partition block*'s inter-mode txfm result.
- * Since this operates on the partition block level, this can give us a
- * whole txfm partition tree.
- * - TXB_RD_RECORD: records a txfm search result within a transform block
- * itself. This operates on txb level only and only applies to square
- * txfms.
+ * This records a whole *partition block*'s inter-mode txfm result.
+ * Since this operates on the partition block level, this can give us a
+ * whole txfm partition tree.
*/
- TxbRdRecords *txb_rd_records;
+ MB_RD_RECORD *mb_rd_record;
/*! \brief Number of txb splits.
*
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 29f285a..d7a03c6 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -591,7 +591,7 @@
(void)gather_tpl_data;
#endif
- reset_hash_records(&x->txfm_search_info);
+ reset_mb_rd_record(x->txfm_search_info.mb_rd_record);
av1_zero(x->picked_ref_frames_mask);
av1_invalid_rd_stats(rd_cost);
}
@@ -995,9 +995,9 @@
if (cpi->oxcf.intra_mode_cfg.enable_cfl_intra)
cfl_init(&td->mb.e_mbd.cfl, cm->seq_params);
- if (td->mb.txfm_search_info.txb_rd_records != NULL) {
+ if (td->mb.txfm_search_info.mb_rd_record != NULL) {
av1_crc32c_calculator_init(
- &td->mb.txfm_search_info.txb_rd_records->mb_rd_record.crc_calculator);
+ &td->mb.txfm_search_info.mb_rd_record->crc_calculator);
}
for (int mi_row = tile_info->mi_row_start; mi_row < tile_info->mi_row_end;
diff --git a/av1/encoder/encodeframe_utils.h b/av1/encoder/encodeframe_utils.h
index 3604616..803b305 100644
--- a/av1/encoder/encodeframe_utils.h
+++ b/av1/encoder/encodeframe_utils.h
@@ -405,8 +405,8 @@
static AOM_INLINE void av1_dealloc_mb_data(struct AV1Common *cm,
struct macroblock *mb) {
- aom_free(mb->txfm_search_info.txb_rd_records);
- mb->txfm_search_info.txb_rd_records = NULL;
+ aom_free(mb->txfm_search_info.mb_rd_record);
+ mb->txfm_search_info.mb_rd_record = NULL;
aom_free(mb->inter_modes_info);
mb->inter_modes_info = NULL;
@@ -428,8 +428,8 @@
struct macroblock *mb,
int use_nonrd_pick_mode) {
if (!use_nonrd_pick_mode) {
- mb->txfm_search_info.txb_rd_records =
- (TxbRdRecords *)aom_malloc(sizeof(TxbRdRecords));
+ mb->txfm_search_info.mb_rd_record =
+ (MB_RD_RECORD *)aom_malloc(sizeof(MB_RD_RECORD));
if (!frame_is_intra_only(cm))
CHECK_MEM_ERROR(
cm, mb->inter_modes_info,
diff --git a/av1/encoder/ethread.c b/av1/encoder/ethread.c
index 79d12b9..2ebb770 100644
--- a/av1/encoder/ethread.c
+++ b/av1/encoder/ethread.c
@@ -496,9 +496,9 @@
&td->mb.e_mbd);
cfl_init(&td->mb.e_mbd.cfl, cm->seq_params);
- if (td->mb.txfm_search_info.txb_rd_records != NULL) {
+ if (td->mb.txfm_search_info.mb_rd_record != NULL) {
av1_crc32c_calculator_init(
- &td->mb.txfm_search_info.txb_rd_records->mb_rd_record.crc_calculator);
+ &td->mb.txfm_search_info.mb_rd_record->crc_calculator);
}
av1_encode_sb_row(cpi, td, tile_row, tile_col, current_mi_row);
diff --git a/av1/encoder/rd.h b/av1/encoder/rd.h
index 7256ff9..8d0277e 100644
--- a/av1/encoder/rd.h
+++ b/av1/encoder/rd.h
@@ -298,13 +298,12 @@
}
}
-// Used to reset the state of tx/mb rd hash information
-static INLINE void reset_hash_records(TxfmSearchInfo *const txfm_info) {
- if (!txfm_info->txb_rd_records) return;
+// Used to reset the state of mb rd hash information
+static INLINE void reset_mb_rd_record(MB_RD_RECORD *const mb_rd_record) {
+ if (!mb_rd_record) return;
// Reset the state for use_mb_rd_hash
- txfm_info->txb_rd_records->mb_rd_record.num =
- txfm_info->txb_rd_records->mb_rd_record.index_start = 0;
+ mb_rd_record->num = mb_rd_record->index_start = 0;
}
void av1_setup_pred_block(const MACROBLOCKD *xd,
diff --git a/av1/encoder/rdopt_utils.h b/av1/encoder/rdopt_utils.h
index 8dacc2e..0fe0021 100644
--- a/av1/encoder/rdopt_utils.h
+++ b/av1/encoder/rdopt_utils.h
@@ -474,7 +474,6 @@
const SPEED_FEATURES *sf = &cpi->sf;
const WinnerModeParams *winner_mode_params = &cpi->winner_mode_params;
TxfmSearchParams *txfm_params = &x->txfm_search_params;
- TxfmSearchInfo *txfm_info = &x->txfm_search_info;
switch (mode_eval_type) {
case DEFAULT_EVAL:
@@ -553,7 +552,7 @@
set_tx_type_prune(sf, txfm_params,
sf->tx_sf.tx_type_search.winner_mode_tx_type_pruning,
1);
- reset_hash_records(txfm_info);
+ reset_mb_rd_record(x->txfm_search_info.mb_rd_record);
break;
default: assert(0);
}
diff --git a/av1/encoder/tx_search.c b/av1/encoder/tx_search.c
index b02ccef..1eb9cb8 100644
--- a/av1/encoder/tx_search.c
+++ b/av1/encoder/tx_search.c
@@ -81,9 +81,9 @@
const int rows = block_size_high[bsize];
const int cols = block_size_wide[bsize];
const int16_t *diff = x->plane[0].src_diff;
- const uint32_t hash = av1_get_crc32c_value(
- &x->txfm_search_info.txb_rd_records->mb_rd_record.crc_calculator,
- (uint8_t *)diff, 2 * rows * cols);
+ const uint32_t hash =
+ av1_get_crc32c_value(&x->txfm_search_info.mb_rd_record->crc_calculator,
+ (uint8_t *)diff, 2 * rows * cols);
return (hash << 5) + bsize;
}
@@ -3345,7 +3345,7 @@
const int n4 = bsize_to_num_blk(bsize);
if (is_mb_rd_hash_enabled) {
hash = get_block_residue_hash(x, bsize);
- mb_rd_record = &x->txfm_search_info.txb_rd_records->mb_rd_record;
+ mb_rd_record = x->txfm_search_info.mb_rd_record;
const int match_index = find_mb_rd_info(mb_rd_record, ref_best_rd, hash);
if (match_index != -1) {
MB_RD_INFO *tx_rd_info = &mb_rd_record->tx_rd_info[match_index];
@@ -3416,7 +3416,7 @@
(mi_col + mi_size_wide[bs] < xd->tile.mi_col_end);
if (within_border) {
hash = get_block_residue_hash(x, bs);
- mb_rd_record = &x->txfm_search_info.txb_rd_records->mb_rd_record;
+ mb_rd_record = x->txfm_search_info.mb_rd_record;
const int match_index = find_mb_rd_info(mb_rd_record, ref_best_rd, hash);
if (match_index != -1) {
MB_RD_INFO *tx_rd_info = &mb_rd_record->tx_rd_info[match_index];