Browse Source

avfilter/vf_sab: fix filtering tiny images

Fixes out of array reads

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.6
Michael Niedermayer 10 years ago
parent
commit
9bff052b51
1 changed files with 16 additions and 6 deletions
  1. +16
    -6
      libavfilter/vf_sab.c

+ 16
- 6
libavfilter/vf_sab.c View File

@@ -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;
}
}


Loading…
Cancel
Save