[PATCH 1/2] Minor fixes in the new downscaling code.

Krzysztof Kosiński <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
This adresses issues brought up on the mailing list. If we use
a non-impulse samping kernel, there is no need to use anything
more sophisticated than box reconstruction. Similarly, using
a non-box reconstruction kernel is OK with impulse sampling.

Also addressed is PIXMAN_FILTER_BEST, which previously fell through
to the default case.

Signed-off-by: Krzysztof Kosiński <[email protected]>
---
 src/cairo-image-source.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/cairo-image-source.c b/src/cairo-image-source.c
index 661bc10..fcd7801 100644
--- a/src/cairo-image-source.c
+++ b/src/cairo-image-source.c
@@ -590,6 +590,7 @@ _pixman_image_set_properties (pixman_image_t *pixman_image,
 	    pixman_filter = PIXMAN_FILTER_BEST;
 	    pixman_kernel_sample = PIXMAN_KERNEL_LANCZOS3;
 	    pixman_kernel_reconstruct = PIXMAN_KERNEL_LANCZOS3;
+	    break;
 	case CAIRO_FILTER_GAUSSIAN:
 	    /* XXX: The GAUSSIAN value has no implementation in cairo
 	     * whatsoever, so it was really a mistake to have it in the
@@ -604,18 +605,31 @@ _pixman_image_set_properties (pixman_image_t *pixman_image,
 
 	if (pixman_filter != PIXMAN_FILTER_NEAREST && (shrink_x || shrink_y)) {
 	    pixman_kernel_t sampling_kernel_x, sampling_kernel_y;
+	    pixman_kernel_t reconstruction_kernel_x, reconstruction_kernel_y;
 	    int n_params;
 	    pixman_fixed_t *params;
 
-	    sampling_kernel_x = shrink_x ? pixman_kernel_sample : PIXMAN_KERNEL_IMPULSE;
-	    sampling_kernel_y = shrink_y ? pixman_kernel_sample : PIXMAN_KERNEL_IMPULSE;
+	    if (shrink_x) {
+		sampling_kernel_x = pixman_kernel_sample;
+		reconstruction_kernel_x = PIXMAN_KERNEL_BOX;
+	    } else {
+		sampling_kernel_x = PIXMAN_KERNEL_IMPULSE;
+		reconstruction_kernel_x = pixman_kernel_reconstruct;
+	    }
+	    if (shrink_y) {
+		sampling_kernel_y = pixman_kernel_sample;
+		reconstruction_kernel_y = PIXMAN_KERNEL_BOX;
+	    } else {
+		sampling_kernel_y = PIXMAN_KERNEL_IMPULSE;
+		reconstruction_kernel_y = pixman_kernel_reconstruct;
+	    }
 
 	    n_params = 0;
 	    params = pixman_filter_create_separable_convolution (&n_params,
 								 scale_x * 65536.0 + 0.5,
 								 scale_y * 65536.0 + 0.5,
-								 pixman_kernel_reconstruct,
-								 pixman_kernel_reconstruct,
+								 reconstruction_kernel_x,
+								 reconstruction_kernel_y,
 								 sampling_kernel_x,
 								 sampling_kernel_y,
 								 1, 1);
-- 
1.8.3.2

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.