Fix source frame border extension This commit fixes an issue in source frame border extension. It causes certain frame resolution such as 640x480 to have a portion of the right/bottom extension filled by zeros, which misleads motion search and degrades transform coding performance when large block size is used. This fix improves the speed 2 compression performance of a few yt sequence, typically ranging from 1% - 2%, up to 5% at median to low bit-rate. Change-Id: Id6b09a5695d9e7651c6dfbc2c6a72288b08af7fb
diff --git a/vp9/encoder/vp9_extend.c b/vp9/encoder/vp9_extend.c index c9b2131..a1d7daa 100644 --- a/vp9/encoder/vp9_extend.c +++ b/vp9/encoder/vp9_extend.c
@@ -110,9 +110,9 @@ // Motion estimation may use src block variance with the block size up // to 64x64, so the right and bottom need to be extended to 64 multiple // or up to 16, whichever is greater. - const int eb_y = MAX(src->y_width + 16, ALIGN_POWER_OF_TWO(src->y_width, 6)) + const int er_y = MAX(src->y_width + 16, ALIGN_POWER_OF_TWO(src->y_width, 6)) - src->y_crop_width; - const int er_y = MAX(src->y_height + 16, ALIGN_POWER_OF_TWO(src->y_height, 6)) + const int eb_y = MAX(src->y_height + 16, ALIGN_POWER_OF_TWO(src->y_height, 6)) - src->y_crop_height; const int uv_width_subsampling = (src->uv_width != src->y_width); const int uv_height_subsampling = (src->uv_height != src->y_height);