#define NB_PLANES 4
+static inline int mirror(int x, int w)
+{
+ if (!w)
+ return 0;
+
+ while ((unsigned)x > (unsigned)w) {
+ x = -x;
+ if (x < 0)
+ x += 2 * w;
+ }
+ return x;
+}
+
static void blur(uint8_t *dst, const int dst_linesize,
const uint8_t *src, const int src_linesize,
const int w, const int h, FilterParam *fp)
for (dy = 0; dy < radius*2 + 1; dy++) {
int dx;
int iy = y+dy - radius;
- if (iy < 0) iy = -iy;
- else if (iy >= h) iy = h+h-iy-1;
+ iy = mirror(iy, h-1);
for (dx = 0; dx < radius*2 + 1; dx++) {
const int ix = x+dx - radius;
for (dy = 0; dy < radius*2+1; dy++) {
int dx;
int iy = y+dy - radius;
- if (iy < 0) iy = -iy;
- else if (iy >= h) iy = h+h-iy-1;
+ iy = mirror(iy, h-1);
for (dx = 0; dx < radius*2 + 1; dx++) {
int ix = x+dx - radius;
- if (ix < 0) ix = -ix;
- else if (ix >= w) ix = w+w-ix-1;
+ ix = mirror(ix, w-1);
UPDATE_FACTOR;
}
}