Rework sb_compute_dering_list()
Use a unified is_8x8_block_skip() to find if an 8x8 block is coded
in skip mode. This covers cases w/o cb4x4 mode turned on.
Change-Id: I94b72ca7cf0fadbb61bfaa8b97f482feb94fd0f2
diff --git a/av1/common/cdef.c b/av1/common/cdef.c
index c113579..65d4791 100644
--- a/av1/common/cdef.c
+++ b/av1/common/cdef.c
@@ -44,6 +44,16 @@
return skip;
}
+static int is_8x8_block_skip(MODE_INFO **grid, int mi_row, int mi_col,
+ int mi_stride) {
+ int is_skip = 1;
+ for (int r = 0; r < mi_size_high[BLOCK_8X8]; ++r)
+ for (int c = 0; c < mi_size_wide[BLOCK_8X8]; ++c)
+ is_skip &= grid[(mi_row + r) * mi_stride + (mi_col + c)]->mbmi.skip;
+
+ return is_skip;
+}
+
int sb_compute_dering_list(const AV1_COMMON *const cm, int mi_row, int mi_col,
dering_list *dlist) {
int r, c;
@@ -63,14 +73,17 @@
const int r_step = mi_size_high[BLOCK_8X8];
const int c_step = mi_size_wide[BLOCK_8X8];
+ const int r_shift = (r_step == 2);
+ const int c_shift = (c_step == 2);
+
+ assert(r_step == 1 || r_step == 2);
+ assert(c_step == 1 || c_step == 2);
for (r = 0; r < maxr; r += r_step) {
- MODE_INFO **grid_row;
- grid_row = &grid[(mi_row + r) * cm->mi_stride + mi_col];
for (c = 0; c < maxc; c += c_step) {
- if (!grid_row[c]->mbmi.skip) {
- dlist[count].by = r;
- dlist[count].bx = c;
+ if (!is_8x8_block_skip(grid, mi_row + r, mi_col + c, cm->mi_stride)) {
+ dlist[count].by = r >> r_shift;
+ dlist[count].bx = c >> c_shift;
count++;
}
}