Allocate MB_RD_RECORD conditionally
The structure MB_RD_RECORD is used to store a partition block's
inter-mode txfm result under use_mb_rd_hash sf. Hence this patch
allocates the memory related to MB_RD_RECORD based on the sf.
Change-Id: I05e80863d39225abdc177d2140563664c467c21f
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index d7a03c6..d3d9414 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -1025,7 +1025,8 @@
if (cpi->allocated_tiles < tile_cols * tile_rows) av1_alloc_tile_data(cpi);
av1_init_tile_data(cpi);
- av1_alloc_mb_data(cm, mb, cpi->sf.rt_sf.use_nonrd_pick_mode);
+ av1_alloc_mb_data(cm, mb, cpi->sf.rt_sf.use_nonrd_pick_mode,
+ cpi->sf.rd_sf.use_mb_rd_hash);
for (tile_row = 0; tile_row < tile_rows; ++tile_row) {
for (tile_col = 0; tile_col < tile_cols; ++tile_col) {
diff --git a/av1/encoder/encodeframe_utils.h b/av1/encoder/encodeframe_utils.h
index 803b305..1da643b 100644
--- a/av1/encoder/encodeframe_utils.h
+++ b/av1/encoder/encodeframe_utils.h
@@ -426,10 +426,14 @@
static AOM_INLINE void av1_alloc_mb_data(struct AV1Common *cm,
struct macroblock *mb,
- int use_nonrd_pick_mode) {
+ int use_nonrd_pick_mode,
+ int use_mb_rd_hash) {
if (!use_nonrd_pick_mode) {
- mb->txfm_search_info.mb_rd_record =
- (MB_RD_RECORD *)aom_malloc(sizeof(MB_RD_RECORD));
+ // Memory for mb_rd_record is allocated only when use_mb_rd_hash sf is
+ // enabled.
+ if (use_mb_rd_hash)
+ 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 2ebb770..016f8ac 100644
--- a/av1/encoder/ethread.c
+++ b/av1/encoder/ethread.c
@@ -1218,7 +1218,8 @@
}
}
av1_alloc_mb_data(cm, &thread_data->td->mb,
- cpi->sf.rt_sf.use_nonrd_pick_mode);
+ cpi->sf.rt_sf.use_nonrd_pick_mode,
+ cpi->sf.rd_sf.use_mb_rd_hash);
// Reset cyclic refresh counters.
av1_init_cyclic_refresh_counters(&thread_data->td->mb);
@@ -1293,7 +1294,8 @@
}
av1_alloc_mb_data(cm, &thread_data->td->mb,
- cpi->sf.rt_sf.use_nonrd_pick_mode);
+ cpi->sf.rt_sf.use_nonrd_pick_mode,
+ cpi->sf.rd_sf.use_mb_rd_hash);
}
}
#endif