]> granicus.if.org Git - libvpx/commitdiff
Correct the miscalculation in uv dimensions
authorYaowu Xu <yaowu@google.com>
Fri, 6 Feb 2015 20:19:32 +0000 (12:19 -0800)
committerYaowu Xu <yaowu@google.com>
Fri, 6 Feb 2015 20:19:32 +0000 (12:19 -0800)
The calculation of required extension used in HBD case was wrong due
to rounding for UV when y dimension is odd. This commit replace the
computation with correct version.

This fixes a crash caused by writting beyond buffer boundary.

Change-Id: Ic7c9afeb7388cd1341ec4974a611dacfb74ac6b6

vpx_scale/generic/yv12extend.c

index 0485452aec36d4f41645baa04957df81c41d625a..953527faf84c4d6cecae8ca39e097201bb5656e5 100644 (file)
@@ -122,17 +122,17 @@ void vp8_yv12_extend_frame_borders_c(YV12_BUFFER_CONFIG *ybf) {
 
     extend_plane_high(
         ybf->u_buffer, ybf->uv_stride,
-        (ybf->y_crop_width + 1) / 2, (ybf->y_crop_height + 1) / 2,
-        ybf->border / 2, ybf->border / 2,
-        (ybf->border + ybf->y_height - ybf->y_crop_height + 1) / 2,
-        (ybf->border + ybf->y_width - ybf->y_crop_width + 1) / 2);
+        ybf->uv_crop_width, ybf->uv_crop_height,
+        uv_border, uv_border,
+        uv_border + ybf->uv_height - ybf->uv_crop_height,
+        uv_border + ybf->uv_width - ybf->uv_crop_width);
 
     extend_plane_high(
         ybf->v_buffer, ybf->uv_stride,
-        (ybf->y_crop_width + 1) / 2, (ybf->y_crop_height + 1) / 2,
-        ybf->border / 2, ybf->border / 2,
-        (ybf->border + ybf->y_height - ybf->y_crop_height + 1) / 2,
-        (ybf->border + ybf->y_width - ybf->y_crop_width + 1) / 2);
+        ybf->uv_crop_width, ybf->uv_crop_height,
+        uv_border, uv_border,
+        uv_border + ybf->uv_height - ybf->uv_crop_height,
+        uv_border + ybf->uv_width - ybf->uv_crop_width);
     return;
   }
 #endif