diff options
Diffstat (limited to 'packages/gtk+/gtk+-2.10.12/plana-pixops.patch')
-rw-r--r-- | packages/gtk+/gtk+-2.10.12/plana-pixops.patch | 569 |
1 files changed, 0 insertions, 569 deletions
diff --git a/packages/gtk+/gtk+-2.10.12/plana-pixops.patch b/packages/gtk+/gtk+-2.10.12/plana-pixops.patch deleted file mode 100644 index 21fe4879c5..0000000000 --- a/packages/gtk+/gtk+-2.10.12/plana-pixops.patch +++ /dev/null @@ -1,569 +0,0 @@ -diff -urN gtk+-2.10.9.orig/config.h.in gtk+-2.10.9-integer-pixops/config.h.in ---- gtk+-2.10.9.orig/config.h.in 2007-01-22 09:01:23.000000000 -0700 -+++ gtk+-2.10.9-integer-pixops/config.h.in 2007-02-10 12:15:39.000000000 -0700 -@@ -259,3 +259,7 @@ - - /* Define to `int' if <sys/types.h> doesn't define. */ - #undef uid_t -+ -+/* Define to use integer math rather than floating point where possible. */ -+#undef ENABLE_INTEGER_PIXOPS -+ -diff -urN gtk+-2.10.9.orig/configure.in gtk+-2.10.9-integer-pixops/configure.in ---- gtk+-2.10.9.orig/configure.in 2007-01-22 08:59:41.000000000 -0700 -+++ gtk+-2.10.9-integer-pixops/configure.in 2007-02-10 12:15:39.000000000 -0700 -@@ -203,6 +203,15 @@ - [AC_HELP_STRING([--disable-rebuilds], - [disable all source autogeneration rules])],, - [enable_rebuilds=yes]) -+AC_ARG_ENABLE(integer-pixops, -+ [AC_HELP_STRING([--enable-integer-pixops], -+ [use integer math where possible])],, -+ [enable_integer_pixops=no]) -+ -+if test "x$enable_integer_pixops" = "xyes"; then -+ AC_DEFINE(ENABLE_INTEGER_PIXOPS) -+fi -+ - AC_ARG_ENABLE(visibility, - [AC_HELP_STRING([--disable-visibility], - [don't use ELF visibility attributes])],, -diff -urN gtk+-2.10.9.orig/gdk-pixbuf/pixops/pixops.c gtk+-2.10.9-integer-pixops/gdk-pixbuf/pixops/pixops.c ---- gtk+-2.10.9.orig/gdk-pixbuf/pixops/pixops.c 2007-01-22 08:50:43.000000000 -0700 -+++ gtk+-2.10.9-integer-pixops/gdk-pixbuf/pixops/pixops.c 2007-02-12 01:00:23.000000000 -0700 -@@ -28,21 +28,42 @@ - #define SUBSAMPLE_MASK ((1 << SUBSAMPLE_BITS)-1) - #define SCALE_SHIFT 16 - -+/* TODO: Add a FLOOR() and CEIL() macro to handle normalized values) */ -+/* TODO: Get rid of standard C numeric types (ie. int). Replace with glib types */ -+#ifdef ENABLE_INTEGER_PIXOPS -+/* The bigger the value of FRAC is, the better the accuracy. Be wary of -+ overflows, though */ -+#define FRAC 0x10000ULL -+#define NORMALIZE(d) (d * FRAC) -+#define UNNORMALIZE(t,i) ((t)(i) / FRAC) -+#define FLOOR(i) (int)((i) / FRAC) -+#define CEIL(i) (((i) - 1) / FRAC + 1) -+#define DOUBLE_TYPE gint32 -+#define BIG_DOUBLE_TYPE gint64 -+#else -+#define NORMALIZE(d) (d) -+#define UNNORMALIZE(t,i) (t)(i) -+#define FLOOR(i) floor(i) -+#define CEIL(i) ceil(i) -+#define DOUBLE_TYPE double -+#define BIG_DOUBLE_TYPE double -+#endif -+ - typedef struct _PixopsFilter PixopsFilter; - typedef struct _PixopsFilterDimension PixopsFilterDimension; - - struct _PixopsFilterDimension - { - int n; -- double offset; -- double *weights; -+ BIG_DOUBLE_TYPE offset; -+ DOUBLE_TYPE *weights; - }; - - struct _PixopsFilter - { - PixopsFilterDimension x; - PixopsFilterDimension y; -- double overall_alpha; -+ gint32 overall_alpha; /* Normalized: alpha * 255; Not sure why original devs chose 255 */ - }; - - typedef guchar *(*PixopsLineFunc) (int *weights, int n_x, int n_y, -@@ -86,13 +107,13 @@ - int src_rowstride, - int src_channels, - gboolean src_has_alpha, -- double scale_x, -- double scale_y) -+ DOUBLE_TYPE scale_x, -+ DOUBLE_TYPE scale_y) - { - int i; - int x; -- int x_step = (1 << SCALE_SHIFT) / scale_x; -- int y_step = (1 << SCALE_SHIFT) / scale_y; -+ int x_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_x; -+ int y_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_y; - int xmax, xstart, xstop, x_pos, y_pos; - const guchar *p; - -@@ -175,14 +196,14 @@ - int src_rowstride, - int src_channels, - gboolean src_has_alpha, -- double scale_x, -- double scale_y, -+ DOUBLE_TYPE scale_x, -+ DOUBLE_TYPE scale_y, - int overall_alpha) - { - int i; - int x; -- int x_step = (1 << SCALE_SHIFT) / scale_x; -- int y_step = (1 << SCALE_SHIFT) / scale_y; -+ int x_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_x; -+ int y_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_y; - int xmax, xstart, xstop, x_pos, y_pos; - const guchar *p; - unsigned int a0; -@@ -260,8 +281,8 @@ - int src_rowstride, - int src_channels, - gboolean src_has_alpha, -- double scale_x, -- double scale_y, -+ DOUBLE_TYPE scale_x, -+ DOUBLE_TYPE scale_y, - int overall_alpha, - int check_x, - int check_y, -@@ -271,8 +292,8 @@ - { - int i, j; - int x; -- int x_step = (1 << SCALE_SHIFT) / scale_x; -- int y_step = (1 << SCALE_SHIFT) / scale_y; -+ int x_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_x; -+ int y_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_y; - int r1, g1, b1, r2, g2, b2; - int check_shift = get_check_shift (check_size); - int xmax, xstart, xstop, x_pos, y_pos; -@@ -977,9 +998,9 @@ - int n_x, - int n_y, - int total, -- double overall_alpha) -+ gint32 overall_alpha) - { -- int correction = (int)(0.5 + 65536 * overall_alpha) - total; -+ int correction = (int)(0.5 + 65536 / 255 * overall_alpha) - total; - int remaining, c, d, i; - - if (correction != 0) -@@ -1009,7 +1030,7 @@ - for (i_offset=0; i_offset < SUBSAMPLE; i_offset++) - for (j_offset=0; j_offset < SUBSAMPLE; j_offset++) - { -- double weight; -+ DOUBLE_TYPE weight; - int *pixel_weights = weights + ((i_offset*SUBSAMPLE) + j_offset) * n_x * n_y; - int total = 0; - int i, j; -@@ -1017,13 +1038,15 @@ - for (i=0; i < n_y; i++) - for (j=0; j < n_x; j++) - { -- weight = filter->x.weights[(j_offset * n_x) + j] * -+ weight = UNNORMALIZE(DOUBLE_TYPE, filter->x.weights[(j_offset * n_x) + j] * - filter->y.weights[(i_offset * n_y) + i] * -- filter->overall_alpha * 65536 + 0.5; -+ filter->overall_alpha * 65536 / 255) + NORMALIZE(0.5); -+ /* Wonder how I should treat the "+ 0.5" for scientific -+ rouding off */ - -- total += (int)weight; -+ total += UNNORMALIZE(int, weight); - -- *(pixel_weights + n_x * i + j) = weight; -+ *(pixel_weights + n_x * i + j) = UNNORMALIZE(int, weight); - } - - correct_total (pixel_weights, n_x, n_y, total, filter->overall_alpha); -@@ -1047,8 +1070,8 @@ - int src_rowstride, - int src_channels, - gboolean src_has_alpha, -- double scale_x, -- double scale_y, -+ DOUBLE_TYPE scale_x, -+ DOUBLE_TYPE scale_y, - int check_x, - int check_y, - int check_size, -@@ -1064,12 +1087,13 @@ - guchar **line_bufs = g_new (guchar *, filter->y.n); - int *filter_weights = make_filter_table (filter); - -- int x_step = (1 << SCALE_SHIFT) / scale_x; /* X step in source (fixed point) */ -- int y_step = (1 << SCALE_SHIFT) / scale_y; /* Y step in source (fixed point) */ -+ int x_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_x; /* X step in source (fixed point) */ -+ int y_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_y; /* Y step in source (fixed point) */ - - int check_shift = check_size ? get_check_shift (check_size) : 0; - -- int scaled_x_offset = floor (filter->x.offset * (1 << SCALE_SHIFT)); -+ /* Possible overflow when scale-shifting which is why offset is BIG_DOUBLE_TYPE */ -+ int scaled_x_offset = FLOOR(filter->x.offset * (1 << SCALE_SHIFT)); - - /* Compute the index where we run off the end of the source buffer. The furthest - * source pixel we access at index i is: -@@ -1087,7 +1111,7 @@ - int run_end_index = MYDIV (run_end_x + x_step - 1, x_step) - render_x0; - run_end_index = MIN (run_end_index, render_x1 - render_x0); - -- y = render_y0 * y_step + floor (filter->y.offset * (1 << SCALE_SHIFT)); -+ y = render_y0 * y_step + FLOOR(filter->y.offset * (1 << SCALE_SHIFT)); - for (i = 0; i < (render_y1 - render_y0); i++) - { - int dest_x; -@@ -1180,37 +1204,37 @@ - */ - static void - tile_make_weights (PixopsFilterDimension *dim, -- double scale) -+ DOUBLE_TYPE scale) - { -- int n = ceil (1 / scale + 1); -- double *pixel_weights = g_new (double, SUBSAMPLE * n); -+ int n = CEIL(NORMALIZE(NORMALIZE(1)) / scale + NORMALIZE(1)); /* Another possible overflow */ -+ DOUBLE_TYPE *pixel_weights = g_new (DOUBLE_TYPE, SUBSAMPLE * n); - int offset; - int i; -- -+ - dim->n = n; -- dim->offset = 0; -+ dim->offset = NORMALIZE(0); - dim->weights = pixel_weights; - - for (offset = 0; offset < SUBSAMPLE; offset++) - { -- double x = (double)offset / SUBSAMPLE; -- double a = x + 1 / scale; -+ DOUBLE_TYPE x = (DOUBLE_TYPE)NORMALIZE(offset) / SUBSAMPLE; -+ DOUBLE_TYPE a = x + NORMALIZE(NORMALIZE(1)) / scale; - - for (i = 0; i < n; i++) - { -- if (i < x) -+ if (NORMALIZE(i) < x) - { -- if (i + 1 > x) -- *(pixel_weights++) = (MIN (i + 1, a) - x) * scale; -+ if (NORMALIZE(i + 1) > x) -+ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, (MIN(NORMALIZE(i + 1), a) - x) * scale); - else -- *(pixel_weights++) = 0; -+ *(pixel_weights++) = NORMALIZE(0); - } - else - { -- if (a > i) -- *(pixel_weights++) = (MIN (i + 1, a) - i) * scale; -+ if (a > NORMALIZE(i)) -+ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, (MIN(NORMALIZE(i + 1), a) - i) * scale); - else -- *(pixel_weights++) = 0; -+ *(pixel_weights++) = NORMALIZE(0); - } - } - } -@@ -1222,41 +1246,44 @@ - */ - static void - bilinear_magnify_make_weights (PixopsFilterDimension *dim, -- double scale) -+ DOUBLE_TYPE scale) - { -- double *pixel_weights; -+ DOUBLE_TYPE *pixel_weights; - int n; - int offset; - int i; - -- if (scale > 1.0) /* Linear */ -+ if (scale > NORMALIZE(1.0)) /* Linear */ - { - n = 2; -- dim->offset = 0.5 * (1 / scale - 1); -+ dim->offset = NORMALIZE(NORMALIZE(0.5) / (scale - NORMALIZE(1))); - } - else /* Tile */ - { -- n = ceil (1.0 + 1.0 / scale); -- dim->offset = 0.0; -+ n = CEIL(NORMALIZE(1.0) + NORMALIZE(NORMALIZE(1.0)) / scale); -+ dim->offset = NORMALIZE(0.0); - } -- -+ - dim->n = n; -- dim->weights = g_new (double, SUBSAMPLE * n); -+ dim->weights = g_new (DOUBLE_TYPE, SUBSAMPLE * n); - - pixel_weights = dim->weights; - - for (offset=0; offset < SUBSAMPLE; offset++) - { -- double x = (double)offset / SUBSAMPLE; -+ DOUBLE_TYPE x = (DOUBLE_TYPE)NORMALIZE(offset) / SUBSAMPLE; - -- if (scale > 1.0) /* Linear */ -+ if (scale > NORMALIZE(1.0)) /* Linear */ - { - for (i = 0; i < n; i++) -- *(pixel_weights++) = (((i == 0) ? (1 - x) : x) / scale) * scale; -+ /* In the original, what is the point of dividing by scale then multiplying by scale? */ -+ /* *(pixel_weights++) = (((i == 0) ? (1 - x) : x) / scale) * scale;*/ -+ /* *(pixel_weights++) = i == 0 ? NORMALIZE(1) - x : x; */ -+ *(pixel_weights++) = (((i == 0) ? NORMALIZE(1) - x : x) / scale) * scale; - } - else /* Tile */ - { -- double a = x + 1 / scale; -+ DOUBLE_TYPE a = x + NORMALIZE(NORMALIZE(1)) / scale; - - /* x - * ---------|--.-|----|--.-|------- SRC -@@ -1264,19 +1291,19 @@ - */ - for (i = 0; i < n; i++) - { -- if (i < x) -+ if (NORMALIZE(i) < x) - { -- if (i + 1 > x) -- *(pixel_weights++) = (MIN (i + 1, a) - x) * scale; -+ if (NORMALIZE(i + 1) > x) -+ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, (MIN(NORMALIZE(i + 1), a) - x) * scale); - else -- *(pixel_weights++) = 0; -+ *(pixel_weights++) = NORMALIZE(0); - } - else - { -- if (a > i) -- *(pixel_weights++) = (MIN (i + 1, a) - i) * scale; -+ if (a > NORMALIZE(i)) -+ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, (MIN(NORMALIZE(i + 1), a) - i) * scale); - else -- *(pixel_weights++) = 0; -+ *(pixel_weights++) = NORMALIZE(0); - } - } - } -@@ -1291,14 +1318,14 @@ - * We combine two of these to compute the convolution of - * a box filter with a triangular spike. - */ --static double --linear_box_half (double b0, double b1) -+static DOUBLE_TYPE -+linear_box_half (DOUBLE_TYPE b0, DOUBLE_TYPE b1) - { -- double a0, a1; -- double x0, x1; -+ DOUBLE_TYPE a0, a1; -+ DOUBLE_TYPE x0, x1; - -- a0 = 0.; -- a1 = 1.; -+ a0 = NORMALIZE(0.); -+ a1 = NORMALIZE(1.); - - if (a0 < b0) - { -@@ -1308,7 +1335,7 @@ - x1 = MIN (a1, b1); - } - else -- return 0; -+ return NORMALIZE(0); - } - else - { -@@ -1318,10 +1345,10 @@ - x1 = MIN (a1, b1); - } - else -- return 0; -+ return NORMALIZE(0); - } - -- return 0.5 * (x1*x1 - x0*x0); -+ return UNNORMALIZE(DOUBLE_TYPE, NORMALIZE(0.5) * UNNORMALIZE(DOUBLE_TYPE, (x1*x1 - x0*x0))); - } - - /* Compute weights for reconstructing with bilinear -@@ -1329,28 +1356,28 @@ - */ - static void - bilinear_box_make_weights (PixopsFilterDimension *dim, -- double scale) -+ DOUBLE_TYPE scale) - { -- int n = ceil (1/scale + 3.0); -- double *pixel_weights = g_new (double, SUBSAMPLE * n); -- double w; -+ int n = CEIL(NORMALIZE(NORMALIZE(1))/scale + NORMALIZE(3.0)); -+ DOUBLE_TYPE *pixel_weights = g_new (DOUBLE_TYPE, SUBSAMPLE * n); -+ DOUBLE_TYPE w; - int offset, i; - -- dim->offset = -1.0; -+ dim->offset = NORMALIZE(-1.0); - dim->n = n; - dim->weights = pixel_weights; - - for (offset = 0; offset < SUBSAMPLE; offset++) - { -- double x = (double)offset / SUBSAMPLE; -- double a = x + 1 / scale; -+ DOUBLE_TYPE x = (DOUBLE_TYPE)NORMALIZE(offset) / SUBSAMPLE; -+ DOUBLE_TYPE a = x + NORMALIZE(NORMALIZE(1)) / scale; - - for (i = 0; i < n; i++) - { -- w = linear_box_half (0.5 + i - a, 0.5 + i - x); -- w += linear_box_half (1.5 + x - i, 1.5 + a - i); -+ w = linear_box_half (NORMALIZE(0.5) + NORMALIZE(i) - a, NORMALIZE(0.5) + NORMALIZE(i) - x); -+ w += linear_box_half (NORMALIZE(1.5) - NORMALIZE(i) + x, NORMALIZE(1.5) - NORMALIZE(i) + a); - -- *(pixel_weights++) = w * scale; -+ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, w * scale); - } - } - } -@@ -1358,8 +1385,8 @@ - static void - make_weights (PixopsFilter *filter, - PixopsInterpType interp_type, -- double scale_x, -- double scale_y) -+ DOUBLE_TYPE scale_x, -+ DOUBLE_TYPE scale_y) - { - switch (interp_type) - { -@@ -1399,8 +1426,8 @@ - int src_rowstride, - int src_channels, - gboolean src_has_alpha, -- double scale_x, -- double scale_y, -+ double scale_x_d, -+ double scale_y_d, - PixopsInterpType interp_type, - int overall_alpha, - int check_x, -@@ -1409,6 +1436,8 @@ - guint32 color1, - guint32 color2) - { -+ DOUBLE_TYPE scale_x = NORMALIZE(scale_x_d); -+ DOUBLE_TYPE scale_y = NORMALIZE(scale_y_d); - PixopsFilter filter; - PixopsLineFunc line_func; - -@@ -1419,7 +1448,7 @@ - g_return_if_fail (!(dest_channels == 3 && dest_has_alpha)); - g_return_if_fail (!(src_channels == 3 && src_has_alpha)); - -- if (scale_x == 0 || scale_y == 0) -+ if (scale_x == NORMALIZE(0) || scale_y == NORMALIZE(0)) - return; - - if (!src_has_alpha && overall_alpha == 255) -@@ -1427,7 +1456,7 @@ - _pixops_scale (dest_buf, render_x0, render_y0, render_x1, render_y1, - dest_rowstride, dest_channels, dest_has_alpha, - src_buf, src_width, src_height, src_rowstride, src_channels, -- src_has_alpha, scale_x, scale_y, interp_type); -+ src_has_alpha, UNNORMALIZE(double, scale_x), UNNORMALIZE(double, scale_y), interp_type); - return; - } - -@@ -1441,7 +1470,8 @@ - return; - } - -- filter.overall_alpha = overall_alpha / 255.; -+ /* filter.overall_alpha = overall_alpha / 255.; /* Why is it 255 instead of 256? */ -+ filter.overall_alpha = overall_alpha; - make_weights (&filter, interp_type, scale_x, scale_y); - - #ifdef USE_MMX -@@ -1501,11 +1531,13 @@ - int src_rowstride, - int src_channels, - gboolean src_has_alpha, -- double scale_x, -- double scale_y, -+ double scale_x_d, -+ double scale_y_d, - PixopsInterpType interp_type, - int overall_alpha) - { -+ DOUBLE_TYPE scale_x = NORMALIZE(scale_x_d); -+ DOUBLE_TYPE scale_y = NORMALIZE(scale_y_d); - PixopsFilter filter; - PixopsLineFunc line_func; - -@@ -1516,7 +1548,7 @@ - g_return_if_fail (!(dest_channels == 3 && dest_has_alpha)); - g_return_if_fail (!(src_channels == 3 && src_has_alpha)); - -- if (scale_x == 0 || scale_y == 0) -+ if (scale_x == NORMALIZE(0) || scale_y == NORMALIZE(0)) - return; - - if (!src_has_alpha && overall_alpha == 255) -@@ -1524,7 +1556,7 @@ - _pixops_scale (dest_buf, render_x0, render_y0, render_x1, render_y1, - dest_rowstride, dest_channels, dest_has_alpha, - src_buf, src_width, src_height, src_rowstride, src_channels, -- src_has_alpha, scale_x, scale_y, interp_type); -+ src_has_alpha, UNNORMALIZE(double, scale_x), UNNORMALIZE(double, scale_y), interp_type); - return; - } - -@@ -1537,7 +1569,7 @@ - return; - } - -- filter.overall_alpha = overall_alpha / 255.; -+ filter.overall_alpha = overall_alpha; - make_weights (&filter, interp_type, scale_x, scale_y); - - if (filter.x.n == 2 && filter.y.n == 2 && -@@ -1578,10 +1610,12 @@ - int src_rowstride, - int src_channels, - gboolean src_has_alpha, -- double scale_x, -- double scale_y, -+ double scale_x_d, -+ double scale_y_d, - PixopsInterpType interp_type) - { -+ DOUBLE_TYPE scale_x = NORMALIZE(scale_x_d); -+ DOUBLE_TYPE scale_y = NORMALIZE(scale_y_d); - PixopsFilter filter; - PixopsLineFunc line_func; - -@@ -1593,7 +1627,7 @@ - g_return_if_fail (!(src_channels == 3 && src_has_alpha)); - g_return_if_fail (!(src_has_alpha && !dest_has_alpha)); - -- if (scale_x == 0 || scale_y == 0) -+ if (scale_x == NORMALIZE(0) || scale_y == NORMALIZE(0)) - return; - - if (interp_type == PIXOPS_INTERP_NEAREST) -@@ -1605,7 +1639,7 @@ - return; - } - -- filter.overall_alpha = 1.0; -+ filter.overall_alpha = 255; - make_weights (&filter, interp_type, scale_x, scale_y); - - if (filter.x.n == 2 && filter.y.n == 2 && dest_channels == 3 && src_channels == 3) |