diff options
| author | Mattias Andrée <maandree@kth.se> | 2017-01-22 17:18:37 +0100 |
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2017-01-22 17:18:37 +0100 |
| commit | bf4b16dc0579b5156bdd78f4eb4722689449660e (patch) | |
| tree | 7c6617a905485ce7d23e7587544c6bf74d295497 /src | |
| parent | Add man pages (diff) | |
| download | blind-bf4b16dc0579b5156bdd78f4eb4722689449660e.tar.gz blind-bf4b16dc0579b5156bdd78f4eb4722689449660e.tar.bz2 blind-bf4b16dc0579b5156bdd78f4eb4722689449660e.tar.xz | |
blind-gauss-blur: fix -a
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
| -rw-r--r-- | src/blind-gauss-blur.c | 76 |
1 files changed, 35 insertions, 41 deletions
diff --git a/src/blind-gauss-blur.c b/src/blind-gauss-blur.c index e6ce1a7..ef0ebba 100644 --- a/src/blind-gauss-blur.c +++ b/src/blind-gauss-blur.c @@ -176,8 +176,7 @@ process_xyza(char *restrict output, char *restrict cbuf, char *restrict sbuf, img[i2][0] += clr[i1][0] * m;\ img[i2][1] += clr[i1][1] * m;\ img[i2][2] += clr[i1][2] * m;\ - if (!noalpha)\ - img[i2][3] += clr[i1][3] * m;\ + img[i2][3] += clr[i1][3] * m;\ }\ } else {\ blurred = 0;\ @@ -191,21 +190,12 @@ process_xyza(char *restrict output, char *restrict cbuf, char *restrict sbuf, if (!blur[i])\ continue;\ START;\ - if (!noalpha) {\ - for (LOOP) {\ - d = (DISTANCE);\ - d *= d;\ - m = c[i] * exp(d * k[i]);\ - img[i2][i] += clr[i1][i] * m;\ - img[i2][3] += clr[i1][3] * m / blurred;\ - }\ - } else {\ - for (LOOP) {\ - d = (DISTANCE);\ - d *= d;\ - m = c[i] * exp(d * k[i]);\ - img[i2][i] += clr[i1][i] * m;\ - }\ + for (LOOP) {\ + d = (DISTANCE);\ + d *= d;\ + m = c[i] * exp(d * k[i]);\ + img[i2][i] += clr[i1][i] * m;\ + img[i2][3] += clr[i1][3] * m / blurred;\ }\ }\ } @@ -262,38 +252,42 @@ process_xyza(char *restrict output, char *restrict cbuf, char *restrict sbuf, y2 = y2start; y2 < y2end; (y2++, i2 += colour->width), (ssize_t)y1 - (ssize_t)y2); - if (chroma || !noalpha) { - start = 0, end = colour->height; - is_master = efork_jobs(&start, &end, jobs, &children); + start = 0, end = colour->height; + is_master = efork_jobs(&start, &end, jobs, &children); - /* convert back to CIE XYZ */ - if (chroma) { - i1 = start * colour->width; - for (y1 = start; y1 < end; y1++) { - for (x1 = 0; x1 < colour->width; x1++, i1++) { - img[i1][0] = (img[i1][0] + img[i1][1]) * X; - img[i1][2] = (img[i1][2] + img[i1][1]) * Z; - } + /* convert back to CIE XYZ */ + if (chroma) { + i1 = start * colour->width; + for (y1 = start; y1 < end; y1++) { + for (x1 = 0; x1 < colour->width; x1++, i1++) { + img[i1][0] = (img[i1][0] + img[i1][1]) * X; + img[i1][2] = (img[i1][2] + img[i1][1]) * Z; } } + } - /* unpremultiply alpha channel */ - if (!noalpha) { - i1 = start * colour->width; - for (y1 = start; y1 < end; y1++) { - for (x1 = 0; x1 < colour->width; x1++, i1++) { - if (!img[i1][3]) - continue; - img[i1][0] /= img[i1][3]; - img[i1][1] /= img[i1][3]; - img[i1][2] /= img[i1][3]; - } - } + /* unpremultiply alpha channel */ + i1 = start * colour->width; + for (y1 = start; y1 < end; y1++) { + for (x1 = 0; x1 < colour->width; x1++, i1++) { + if (!img[i1][3]) + continue; + img[i1][0] /= img[i1][3]; + img[i1][1] /= img[i1][3]; + img[i1][2] /= img[i1][3]; } + } - ejoin_jobs(is_master, children); + /* ensure the video if opaque if -a was used */ + if (!noalpha) { + i1 = start * colour->width; + for (y1 = start; y1 < end; y1++) + for (x1 = 0; x1 < colour->width; x1++, i1++) + img[i1][3] = 1; } + ejoin_jobs(is_master, children); + (void) sigma; (void) sn; } |
