The following patches fixed-point arithmetic to round instead of truncate. That is, instead of this:
(a * b) >> 16 the patches now do this instead: (a * b + 0x8000) >> 16 which I believe produces more accurate results. The second patch does the same thing for the color calculations in the convolution filter, where currently if the user isn't careful to normalize the convolution matrix, we can end up with opaque images becoming slightly translucent or the like. Finally, the third patch adds a file "rounding.txt" that describes in detail how the filtering code gets from a source image location to a pixel value. The fixed-point rounding does cause some changes to transformed output, so the test suite has gotten new checksums. I'd appreciate testing on architectures other than x86 to ensure the various transformed fast paths didn't break. Siarhei pointed out here: http://lists.freedesktop.org/archives/pixman/2012-June/002095.html that the current bilinear filters also have an issue where the weights are computed based on truncated rather than rounded locations. In addition to that they also have the same issue as the convolution filter in that the *color* computation should in principle also be rounded rather than truncated from 16 to 8 bits as it is now. It would be worthwhile to fix these bugs, but the patches here don't attempt to. Soren _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pixman