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 {