Clean up and refactor CDEF code
The codes related to second index under ERP are no longer needed since
no transform block can cross the 64X64 boundary.
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 2463760..791bbf6 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -20,6 +20,7 @@
#include "aom_scale/yv12config.h"
#include "av1/common/alloccommon.h"
+#include "av1/common/cdef_block.h"
#include "av1/common/common_data.h"
#include "av1/common/quant_common.h"
#include "av1/common/entropy.h"
@@ -2133,7 +2134,7 @@
* stored in the MB_MODE_INFO of the 1st block in this CDEF unit (inside
* cm->mi_params.mi_grid_base).
*/
- bool cdef_transmitted[4];
+ bool cdef_transmitted[CDEF_IN_SB];
/*!
* Mask for this block used for compound prediction.
diff --git a/av1/common/cdef.h b/av1/common/cdef.h
index d0c2469..75c12de 100644
--- a/av1/common/cdef.h
+++ b/av1/common/cdef.h
@@ -34,6 +34,14 @@
AOMMIN(abs(diff), AOMMAX(0, threshold - (abs(diff) >> shift)));
}
+static AOM_INLINE int av1_get_cdef_transmitted_index(int mi_row, int mi_col) {
+ // Find index of this CDEF unit in this superblock.
+ const int index_mask = 1 << MI_IN_CDEF_LINEAR_LOG2;
+ const int cdef_unit_row_in_sb = !!(mi_row & index_mask);
+ const int cdef_unit_col_in_sb = !!(mi_col & index_mask);
+ return cdef_unit_col_in_sb + CDEF_IN_SB_STRIDE * cdef_unit_row_in_sb;
+}
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/av1/common/cdef_block.h b/av1/common/cdef_block.h
index aee6644..db9bcbd 100644
--- a/av1/common/cdef_block.h
+++ b/av1/common/cdef_block.h
@@ -19,6 +19,9 @@
#define CDEF_BLOCKSIZE_LOG2 6
#define CDEF_NBLOCKS ((1 << MAX_SB_SIZE_LOG2) / 8)
#define CDEF_SB_SHIFT (MAX_SB_SIZE_LOG2 - CDEF_BLOCKSIZE_LOG2)
+#define CDEF_IN_SB_STRIDE (1 << (CDEF_SB_SHIFT))
+#define CDEF_IN_SB (1 << (CDEF_SB_SHIFT * 2))
+#define MI_IN_CDEF_LINEAR_LOG2 (CDEF_BLOCKSIZE_LOG2 - MI_SIZE_LOG2)
/* We need to buffer three vertical lines. */
#define CDEF_VBORDER (3)
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 10ad849..3dfa75d 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -13,6 +13,8 @@
#include <assert.h>
#include "av1/common/blockd.h"
+#include "av1/common/cdef.h"
+#include "av1/common/cdef_block.h"
#include "av1/common/cfl.h"
#include "av1/common/common.h"
#include "av1/common/entropy.h"
@@ -62,37 +64,14 @@
const int mi_row_in_sb = (xd->mi_row & sb_mask);
const int mi_col_in_sb = (xd->mi_col & sb_mask);
if (mi_row_in_sb == 0 && mi_col_in_sb == 0) {
- xd->cdef_transmitted[0] = xd->cdef_transmitted[1] =
- xd->cdef_transmitted[2] = xd->cdef_transmitted[3] = false;
+ av1_zero(xd->cdef_transmitted);
}
// CDEF unit size is 64x64 irrespective of the superblock size.
- const int cdef_size = 1 << (6 - MI_SIZE_LOG2);
+ const int cdef_size = 1 << MI_IN_CDEF_LINEAR_LOG2;
// Find index of this CDEF unit in this superblock.
- const int index_mask = cdef_size;
- const int cdef_unit_row_in_sb = ((xd->mi_row & index_mask) != 0);
- const int cdef_unit_col_in_sb = ((xd->mi_col & index_mask) != 0);
- const int index = (cm->seq_params.sb_size == BLOCK_128X128)
- ? cdef_unit_col_in_sb + 2 * cdef_unit_row_in_sb
- : 0;
-#if CONFIG_EXT_RECUR_PARTITIONS
- int second_index = index;
- const int current_grid_idx =
- get_mi_grid_idx(&cm->mi_params, xd->mi_row, xd->mi_col);
- const MB_MODE_INFO *const current_mbmi =
- cm->mi_params.mi_grid_base[current_grid_idx];
- const BLOCK_SIZE current_bsize = current_mbmi->sb_type[0];
- const int mi_row_end = xd->mi_row + mi_size_high[current_bsize] - 1;
- const int mi_col_end = xd->mi_col + mi_size_wide[current_bsize] - 1;
- if (cm->seq_params.sb_size == BLOCK_128X128 &&
- block_size_wide[current_bsize] != 128 &&
- block_size_high[current_bsize] != 128) {
- const int second_cdef_unit_row_in_sb = ((mi_row_end & index_mask) != 0);
- const int second_cdef_unit_col_in_sb = ((mi_col_end & index_mask) != 0);
- second_index = second_cdef_unit_col_in_sb + 2 * second_cdef_unit_row_in_sb;
- }
-#endif // CONFIG_EXT_RECUR_PARTITIONS
+ const int index = av1_get_cdef_transmitted_index(xd->mi_row, xd->mi_col);
// Read CDEF strength from the first non-skip coding block in this CDEF unit.
if (!xd->cdef_transmitted[index] && !skip_txfm) {
@@ -108,38 +87,6 @@
aom_read_literal(r, cm->cdef_info.cdef_bits, ACCT_STR);
xd->cdef_transmitted[index] = true;
}
-#if CONFIG_EXT_RECUR_PARTITIONS
- if (!xd->cdef_transmitted[second_index] && !skip_txfm) {
- // CDEF strength for this CDEF unit needs to be read into the MB_MODE_INFO
- // of the 1st block in this CDEF unit.
- const int first_block_mask = ~(cdef_size - 1);
- CommonModeInfoParams *const mi_params = &cm->mi_params;
- const int grid_idx =
- get_mi_grid_idx(mi_params, mi_row_end & first_block_mask,
- mi_col_end & first_block_mask);
- assert(IMPLIES(!mi_params->mi_grid_base[grid_idx],
- xd->tree_type == LUMA_PART));
- if (!mi_params->mi_grid_base[grid_idx]) {
- const int mi_alloc_idx =
- get_alloc_mi_idx(mi_params, mi_row_end & first_block_mask,
- mi_col_end & first_block_mask);
- mi_params->mi_grid_base[grid_idx] = &mi_params->mi_alloc[mi_alloc_idx];
- }
- MB_MODE_INFO *const mbmi = mi_params->mi_grid_base[grid_idx];
- mbmi->cdef_strength =
- aom_read_literal(r, cm->cdef_info.cdef_bits, ACCT_STR);
- xd->cdef_transmitted[second_index] = true;
- for (int x = 0; x < mi_size_wide[current_bsize]; x++) {
- for (int y = 0; y < mi_size_high[current_bsize]; y++) {
- const int mi_x = xd->mi_col + x;
- const int mi_y = xd->mi_row + y;
- const int idx = get_alloc_mi_idx(mi_params, mi_y, mi_x);
- if (mi_y < mi_params->mi_rows && mi_x < mi_params->mi_cols)
- mi_params->mi_alloc[idx].cdef_strength = mbmi->cdef_strength;
- }
- }
- }
-#endif // CONFIG_EXT_RECUR_PARTITIONS
}
#if CONFIG_CCSO
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 9149446..bf75996 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1399,38 +1399,14 @@
const int mi_row_in_sb = (xd->mi_row & sb_mask);
const int mi_col_in_sb = (xd->mi_col & sb_mask);
if (mi_row_in_sb == 0 && mi_col_in_sb == 0) {
- xd->cdef_transmitted[0] = xd->cdef_transmitted[1] =
- xd->cdef_transmitted[2] = xd->cdef_transmitted[3] = false;
+ av1_zero(xd->cdef_transmitted);
}
// CDEF unit size is 64x64 irrespective of the superblock size.
const int cdef_size = 1 << (6 - MI_SIZE_LOG2);
// Find index of this CDEF unit in this superblock.
- const int index_mask = cdef_size;
- const int cdef_unit_row_in_sb = ((xd->mi_row & index_mask) != 0);
- const int cdef_unit_col_in_sb = ((xd->mi_col & index_mask) != 0);
- const int index = (cm->seq_params.sb_size == BLOCK_128X128)
- ? cdef_unit_col_in_sb + 2 * cdef_unit_row_in_sb
- : 0;
-#if CONFIG_EXT_RECUR_PARTITIONS
- int second_index = index;
- const int current_grid_idx =
- get_mi_grid_idx(&cm->mi_params, xd->mi_row, xd->mi_col);
- const MB_MODE_INFO *const current_mbmi =
- cm->mi_params.mi_grid_base[current_grid_idx];
- assert(xd->tree_type != CHROMA_PART);
- const BLOCK_SIZE current_bsize = current_mbmi->sb_type[0];
- const int mi_row_end = xd->mi_row + mi_size_high[current_bsize] - 1;
- const int mi_col_end = xd->mi_col + mi_size_wide[current_bsize] - 1;
- if (cm->seq_params.sb_size == BLOCK_128X128 &&
- block_size_wide[current_bsize] != 128 &&
- block_size_high[current_bsize] != 128) {
- const int second_cdef_unit_row_in_sb = ((mi_row_end & index_mask) != 0);
- const int second_cdef_unit_col_in_sb = ((mi_col_end & index_mask) != 0);
- second_index = second_cdef_unit_col_in_sb + 2 * second_cdef_unit_row_in_sb;
- }
-#endif // CONFIG_EXT_RECUR_PARTITIONS
+ const int index = av1_get_cdef_transmitted_index(xd->mi_row, xd->mi_col);
// Write CDEF strength to the first non-skip coding block in this CDEF unit.
if (!xd->cdef_transmitted[index] && !skip) {
@@ -1445,20 +1421,6 @@
aom_write_literal(w, mbmi->cdef_strength, cm->cdef_info.cdef_bits);
xd->cdef_transmitted[index] = true;
}
-#if CONFIG_EXT_RECUR_PARTITIONS
- if (!xd->cdef_transmitted[second_index] && !skip) {
- // CDEF strength for this CDEF unit needs to be stored in the MB_MODE_INFO
- // of the 1st block in this CDEF unit.
- const int first_block_mask = ~(cdef_size - 1);
- const CommonModeInfoParams *const mi_params = &cm->mi_params;
- const int grid_idx =
- get_mi_grid_idx(mi_params, mi_row_end & first_block_mask,
- mi_col_end & first_block_mask);
- const MB_MODE_INFO *const mbmi = mi_params->mi_grid_base[grid_idx];
- aom_write_literal(w, mbmi->cdef_strength, cm->cdef_info.cdef_bits);
- xd->cdef_transmitted[second_index] = true;
- }
-#endif // CONFIG_EXT_RECUR_PARTITIONS
}
#if CONFIG_CCSO