[Webkit-unassigned] [Bug 42273] Convolution computation causes bad alpha channel values

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Jul 15 00:53:00 PDT 2010


https://bugs.webkit.org/show_bug.cgi?id=42273


Nikolas Zimmermann <zimmermann at kde.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #61614|review+                     |review-
               Flag|                            |




--- Comment #18 from Nikolas Zimmermann <zimmermann at kde.org>  2010-07-15 00:52:59 PST ---
(From update of attachment 61614)
LayoutTests/ChangeLog:5
 +          Bug https://bugs.webkit.org/show_bug.cgi?id=42273
Please rerun, prepare-ChangeLog --bug=42273. It generates the correct template to be used in WebKit ChangeLogs.
It will list the bug title, that's currently missing here, and leads to confusion.

WebCore/ChangeLog:5
 +          Bug https://bugs.webkit.org/show_bug.cgi?id=42273
Ditto.

WebCore/platform/graphics/skia/SkiaUtils.cpp:89
 +          // A 0 alpha when there are non-zero R, G, or B channels is an 
I'd use "A zero alpha value" instead of "A 0 alpha".

WebCore/platform/graphics/skia/SkiaUtils.cpp:90
 +          // invalid premultiplid color (since all channels should have been
Typo, premultiplied.

WebCore/platform/graphics/skia/SkiaUtils.cpp:91
 +          // multiplied by 0 if a=0). Assert(false) to catch in debug mode.
I don't think you need to mention that you're asserting, pretty clear from the line below :-)

WebCore/platform/graphics/skia/SkiaUtils.cpp:93
 +          // In production, return 0 to protect against divide by 0.
rephrase, to protect against division by zero.

WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp:207
 +  ALWAYS_INLINE void setDestinationPixels(CanvasPixelArray *image, int *pixel, float *totals, float divisor, float bias, CanvasPixelArray *src)
Style issues: the star * goes next to the type. I'd suggest to use int& pixel, to avoid, using (*pixel)++, see the next comments.

WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp:209
 +      for (int i = 0; i < 3 + !preserveAlphaValues; ++i)
I hope this compiles on Windows, it's sometimes picky about these contructs, to be safe, I'd use: "3 + (preserveAlphaValues ? 0 : 1)". That's also used in other parts of the code.


WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp:214
 +          image->set((*pixel)++, clampRGBAValue(totals[0], alpha));
Okay, this should really read: image->set(pixel++, clampRGBAValue(....)), just pass the pixel int by reference, that's faster and avoids the unnecessary dereference operator usage.

I still think the function could be more readable, suggestion:

template<bool preserveAlphaValues>
ALWAYS_INLINE void setDestinationPixels(CanvasPixelArray* image, int& pixel, float* totals, float divisor, float bias, CanvasPixelArray* src)
{
    unsigned char maxAlpha = 255;
    if (!preserveAlphaValues)
        maxAlpha = clampRGBAValue(totals[3]);

    for (int i = 0; i < 3; ++i)
        image->set(pixel++, clampRGBAValue(totals[i], maxAlpha);

    image->set(pixel + 1, preserveAlphaValues ? src->get(pixel) : alpha);
    ++pixel;
}

Note that I've decided to not use the "image->set(pixel++ ? src->get(pixel) : alpha)" approach, as I think it's hard to read, better be explicit than confusing.
What do you think?

Other than that, it's a nice patch! Looking forward to the next one.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list