Fix set_skip_context logic Properly reset mi_row and mi_col values per plane. Change-Id: Ic624f286c8ee2521403557bc1d685752166b1947
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h index 22a4215..1aac7d2 100644 --- a/av1/common/onyxc_int.h +++ b/av1/common/onyxc_int.h
@@ -561,17 +561,19 @@ static INLINE void set_skip_context(MACROBLOCKD *xd, int mi_row, int mi_col) { int i; + int row_offset = mi_row; + int col_offset = mi_col; for (i = 0; i < MAX_MB_PLANE; ++i) { struct macroblockd_plane *const pd = &xd->plane[i]; #if CONFIG_CHROMA_SUB8X8 if (xd->mi[0]->mbmi.sb_type < BLOCK_8X8) { // Offset the buffer pointer - if (pd->subsampling_y && (mi_row & 0x01)) mi_row -= 1; - if (pd->subsampling_x && (mi_col & 0x01)) mi_col -= 1; + if (pd->subsampling_y && (mi_row & 0x01)) row_offset = mi_row - 1; + if (pd->subsampling_x && (mi_col & 0x01)) col_offset = mi_col - 1; } #endif - int above_idx = mi_col << (MI_SIZE_LOG2 - tx_size_wide_log2[0]); - int left_idx = (mi_row & MAX_MIB_MASK) + int above_idx = col_offset << (MI_SIZE_LOG2 - tx_size_wide_log2[0]); + int left_idx = (row_offset & MAX_MIB_MASK) << (MI_SIZE_LOG2 - tx_size_high_log2[0]); pd->above_context = &xd->above_context[i][above_idx >> pd->subsampling_x]; pd->left_context = &xd->left_context[i][left_idx >> pd->subsampling_y];