|
|
@@ -220,6 +220,19 @@ static int config_props(AVFilterLink *inlink) |
|
|
|
|
|
|
|
#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) |
|
|
@@ -253,8 +266,7 @@ static void blur(uint8_t *dst, const int dst_linesize, |
|
|
|
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; |
|
|
@@ -265,13 +277,11 @@ static void blur(uint8_t *dst, const int dst_linesize, |
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
|