]> granicus.if.org Git - libvpx/commitdiff
Make CLPF handle frame widths and heights not divisible by 8.
authorSteinar Midtskogen <stemidts@cisco.com>
Wed, 7 Sep 2016 06:15:11 +0000 (08:15 +0200)
committerYaowu Xu <yaowu@google.com>
Mon, 10 Oct 2016 18:26:15 +0000 (11:26 -0700)
Change-Id: If5eb33b6b090f43ba64c82468576b89eddd872c3

av1/common/clpf.c
av1/common/clpf_simd.h

index 668c75fcebab1900f94b584f5d3c05ff1f1e345d..799af01846af52d24dd66d9b6b0ff2708502c4a8 100644 (file)
@@ -59,12 +59,12 @@ int av1_clpf_frame(const YV12_BUFFER_CONFIG *dst, const YV12_BUFFER_CONFIG *rec,
   /* Constrained low-pass filter (CLPF) */
   int c, k, l, m, n;
   const int bs = MI_SIZE;
-  int width = cm->mi_cols * bs;
-  int height = cm->mi_rows * bs;
+  int width = rec->y_crop_width;
+  int height = rec->y_crop_height;
   int xpos, ypos;
   int stride_y = rec->y_stride;
-  int num_fb_hor = (width + (1 << fb_size_log2) - bs) >> fb_size_log2;
-  int num_fb_ver = (height + (1 << fb_size_log2) - bs) >> fb_size_log2;
+  int num_fb_hor = (width + (1 << fb_size_log2) - 1) >> fb_size_log2;
+  int num_fb_ver = (height + (1 << fb_size_log2) - 1) >> fb_size_log2;
   int block_index = 0;
 
   // Iterate over all filter blocks
index faaf8ea9fe28cd23985e01415e75e9e8a7fa0481..0df6cd74ee80411bcdc8eaa198a86314384473bd 100644 (file)
@@ -187,7 +187,8 @@ void SIMD_FUNC(aom_clpf_block)(const uint8_t *src, uint8_t *dst, int stride,
   // This will only be used if 4:2:0 and width not a multiple of 16 and along
   // the right edge only, so we can fall back to the plain C implementation in
   // this case.  If not extended to chroma, this test will be redundant.
-  if (sizex != 8 || width < 16) {  // Fallback to C if frame width < 16
+  if (sizex != 8 || width < 16 || y0 + 8 > height || x0 + 8 > width) {
+    // Fallback to C for odd sizes
     aom_clpf_block_c(src, dst, stride, x0, y0, sizex, sizey, width, height,
                      strength);
   } else {