From 34dac00adc8221a8cc0a7f1c7d8257c5dbc5794f Mon Sep 17 00:00:00 2001 From: Steinar Midtskogen Date: Wed, 7 Sep 2016 08:15:11 +0200 Subject: [PATCH] Make CLPF handle frame widths and heights not divisible by 8. Change-Id: If5eb33b6b090f43ba64c82468576b89eddd872c3 --- av1/common/clpf.c | 8 ++++---- av1/common/clpf_simd.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/av1/common/clpf.c b/av1/common/clpf.c index 668c75fce..799af0184 100644 --- a/av1/common/clpf.c +++ b/av1/common/clpf.c @@ -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 diff --git a/av1/common/clpf_simd.h b/av1/common/clpf_simd.h index faaf8ea9f..0df6cd74e 100644 --- a/av1/common/clpf_simd.h +++ b/av1/common/clpf_simd.h @@ -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 {