Refactor av1_cdef_filter_fb()
Change-Id: Id9fad5c38958283513b5488e01766854ca68e0d6
diff --git a/av1/common/cdef_block.c b/av1/common/cdef_block.c
index 9620014..5953818 100644
--- a/av1/common/cdef_block.c
+++ b/av1/common/cdef_block.c
@@ -182,15 +182,11 @@
int bi;
int bx;
int by;
- int bsize, bsizex, bsizey;
-
- int pri_strength = level << coeff_shift;
+ const int pri_strength = level << coeff_shift;
sec_strength <<= coeff_shift;
damping += coeff_shift - (pli != AOM_PLANE_Y);
- bsize =
- ydec ? (xdec ? BLOCK_4X4 : BLOCK_8X4) : (xdec ? BLOCK_4X8 : BLOCK_8X8);
- bsizex = 3 - xdec;
- bsizey = 3 - ydec;
+ const int bw_log2 = 3 - xdec;
+ const int bh_log2 = 3 - ydec;
if (dirinit && pri_strength == 0 && sec_strength == 0) {
// If we're here, both primary and secondary strengths are 0, and
// we still haven't written anything to y[] yet, so we just copy
@@ -199,12 +195,12 @@
for (bi = 0; bi < cdef_count; bi++) {
by = dlist[bi].by;
bx = dlist[bi].bx;
- int iy, ix;
// TODO(stemidts/jmvalin): SIMD optimisations
- for (iy = 0; iy < 1 << bsizey; iy++)
- for (ix = 0; ix < 1 << bsizex; ix++)
- dst16[(bi << (bsizex + bsizey)) + (iy << bsizex) + ix] =
- in[((by << bsizey) + iy) * CDEF_BSTRIDE + (bx << bsizex) + ix];
+ for (int iy = 0; iy < 1 << bh_log2; iy++) {
+ memcpy(&dst16[(bi << (bw_log2 + bh_log2)) + (iy << bw_log2)],
+ &in[((by << bh_log2) + iy) * CDEF_BSTRIDE + (bx << bw_log2)],
+ (1 << bw_log2) * sizeof(*dst16));
+ }
}
return;
}
@@ -230,25 +226,28 @@
}
}
+ const int bsize =
+ ydec ? (xdec ? BLOCK_4X4 : BLOCK_8X4) : (xdec ? BLOCK_4X8 : BLOCK_8X8);
+ const int t = pri_strength;
+ const int s = sec_strength;
for (bi = 0; bi < cdef_count; bi++) {
- int t = pri_strength;
- int s = sec_strength;
by = dlist[bi].by;
bx = dlist[bi].bx;
- if (dst8)
+ if (dst8) {
cdef_filter_block(
- &dst8[(by << bsizey) * dstride + (bx << bsizex)], NULL, dstride,
- &in[(by * CDEF_BSTRIDE << bsizey) + (bx << bsizex)],
+ &dst8[(by << bh_log2) * dstride + (bx << bw_log2)], NULL, dstride,
+ &in[(by * CDEF_BSTRIDE << bh_log2) + (bx << bw_log2)],
(pli ? t : adjust_strength(t, var[by][bx])), s, t ? dir[by][bx] : 0,
damping, damping, bsize, coeff_shift);
- else
+ } else {
cdef_filter_block(
NULL,
- &dst16[dirinit ? bi << (bsizex + bsizey)
- : (by << bsizey) * dstride + (bx << bsizex)],
- dirinit ? 1 << bsizex : dstride,
- &in[(by * CDEF_BSTRIDE << bsizey) + (bx << bsizex)],
+ &dst16[dirinit ? bi << (bw_log2 + bh_log2)
+ : (by << bh_log2) * dstride + (bx << bw_log2)],
+ dirinit ? 1 << bw_log2 : dstride,
+ &in[(by * CDEF_BSTRIDE << bh_log2) + (bx << bw_log2)],
(pli ? t : adjust_strength(t, var[by][bx])), s, t ? dir[by][bx] : 0,
damping, damping, bsize, coeff_shift);
+ }
}
}