aomedia /
avm /
d706ed258b631901cb7df1e0687f4c957bd87778 Fix encode/decode mismatch when enabling frame resizing
There was a bug caused by the following sequence of events:
* A frame was coded full-size, filling out the
cm->above_context array as normal.
* The next frame was coded at a reduced size
* Due to changes between VP9 and AV1, we now clear the
context arrays per-tile on the decoder side. The amount
cleared is the span of the tile, rounded up to the next
mi unit. Since this frame is at a reduced size, this
leaves some entries "off the edge of the frame" set to 1.
* get_entropy_context() reads a full transform block's worth
of data from cm->above_context. This could read the off-frame
1s, even when all the in-frame values were 0 (eg, because
we're working on the topmost block of the frame).
* This leads to the decoder getting the wrong context, causing
an encode/decode mismatch.
We fix this by rounding up to the next superblock, rather than
the next mi unit, when clearing the context arrays per-tile.
This is safe because all tiles other than the rightmost column
must be an integer number of superblocks wide.
BUG=aomedia:481
Change-Id: I8283c69957900572d44eb8d7f633cb59e352da3c
1 file changed