Fixing CDEF right and bottom tile boundaries We just get the top and left flags from the next superblock Change-Id: I2ea59541edaa46208f3328cc118ebdc7cc2cde08
diff --git a/av1/common/cdef.c b/av1/common/cdef.c index 13d96b1..1bd1fa3 100644 --- a/av1/common/cdef.c +++ b/av1/common/cdef.c
@@ -233,18 +233,28 @@ nhb = AOMMIN(MAX_MIB_SIZE, cm->mi_cols - MAX_MIB_SIZE * sbc); nvb = AOMMIN(MAX_MIB_SIZE, cm->mi_rows - MAX_MIB_SIZE * sbr); int tile_top, tile_left, tile_bottom, tile_right; + int mi_idx = MAX_MIB_SIZE * sbr * cm->mi_stride + MAX_MIB_SIZE * sbc; BOUNDARY_TYPE boundary_tl = cm->mi_grid_visible[MAX_MIB_SIZE * sbr * cm->mi_stride + MAX_MIB_SIZE * sbc] ->mbmi.boundary_info; - BOUNDARY_TYPE boundary_br = - cm->mi_grid_visible[(MAX_MIB_SIZE * sbr + nvb - 1) * cm->mi_stride + - MAX_MIB_SIZE * sbc + nhb - 1] - ->mbmi.boundary_info; tile_top = boundary_tl & TILE_ABOVE_BOUNDARY; tile_left = boundary_tl & TILE_LEFT_BOUNDARY; - tile_bottom = boundary_br & TILE_BOTTOM_BOUNDARY; - tile_right = boundary_br & TILE_RIGHT_BOUNDARY; + /* Right and bottom information appear unreliable, so we use the top + and left flags for the next superblocks. */ + if (sbr != nvsb - 1 && + cm->mi_grid_visible[mi_idx + MAX_MIB_SIZE * cm->mi_stride]) + tile_bottom = cm->mi_grid_visible[mi_idx + MAX_MIB_SIZE * cm->mi_stride] + ->mbmi.boundary_info & + TILE_ABOVE_BOUNDARY; + else + tile_bottom = 1; + if (sbc != nhsb - 1 && cm->mi_grid_visible[mi_idx + MAX_MIB_SIZE]) + tile_right = + cm->mi_grid_visible[mi_idx + MAX_MIB_SIZE]->mbmi.boundary_info & + TILE_LEFT_BOUNDARY; + else + tile_right = 1; const int mbmi_cdef_strength = cm->mi_grid_visible[MAX_MIB_SIZE * sbr * cm->mi_stride + MAX_MIB_SIZE * sbc]