Temporary fix for 4X8 block intra prediction.

Currently the RD loop traverses 4X8 blocks in inverted N order while
the bitstream stores blocks smaller than 8x8 in Z order. This causes a
discrepancy where the RD loop reads uninitialized data while
performing intra prediction.  As a temporary fix simply disable the
use of the extended right edge for 4X8 blocks, until the bitstream can
be changed to match the logical structure of the blocks.

Change-Id: I44a9e4fc1a15cd551a7b38c3c1227bc5dac77e9a
This commit is contained in:
Brennan Shacklett 2016-08-03 10:35:01 -07:00
Родитель 521653d573
Коммит f975ac57b0
1 изменённых файлов: 8 добавлений и 0 удалений

Просмотреть файл

@ -83,6 +83,14 @@ static int av1_has_right(BLOCK_SIZE bsize, int mi_row, int mi_col,
int ss_x) {
if (!right_available) return 0;
// TODO(bshacklett, huisu): Currently the RD loop traverses 4X8 blocks in
// inverted N order while in the bitstream the subblocks are stored in Z
// order. This discrepancy makes this function incorrect when considering 4X8
// blocks in the RD loop, so we disable the extended right edge for these
// blocks. The correct solution is to change the bitstream to store these
// blocks in inverted N order, and then update this function appropriately.
if (bsize == BLOCK_4X8 && y == 1) return 0;
if (y == 0) {
int wl = mi_width_log2_lookup[bsize];
int hl = mi_height_log2_lookup[bsize];