From f553646d70fba8e265d436103a73520eb7adec8c Mon Sep 17 00:00:00 2001 From: David Michael Barr Date: Thu, 8 Jul 2021 13:39:59 +0900 Subject: [PATCH] Initialise residual when less than the transform width is visible The input stride for forward transforms did not match the output stride of residual computation in this case. Extend the residual stride to the transform width and zero the non-visible portion. Fixes #2662. Fixes #2757. --- src/encoder.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/encoder.rs b/src/encoder.rs index 564d78d7e..1ccf8c831 100644 --- a/src/encoder.rs +++ b/src/encoder.rs @@ -1209,12 +1209,20 @@ pub fn encode_tx_block( residual, &ts.input_tile.planes[p].subregion(area), &rec.subregion(area), - visible_tx_w, + tx_size.width(), visible_tx_h, ); + if visible_tx_w < tx_size.width() { + for row in residual.chunks_mut(tx_size.width()).take(visible_tx_h) { + for a in &mut row[visible_tx_w..] { + *a = 0; + } + } + } } - let visible_area = visible_tx_w * visible_tx_h; - for a in residual[visible_area..].iter_mut() { + let initialized_area = + if visible_tx_w == 0 { 0 } else { tx_size.width() * visible_tx_h }; + for a in residual[initialized_area..].iter_mut() { *a = 0; }