SOURCES (PPCRCD): splashutils-jpeg_scale.patch (NEW) - simple imag...
sparky
sparky at pld-linux.org
Fri Jun 23 16:11:26 CEST 2006
Author: sparky Date: Fri Jun 23 14:11:26 2006 GMT
Module: SOURCES Tag: PPCRCD
---- Log message:
- simple image scaling (no mipmap, blur or something)
---- Files affected:
SOURCES:
splashutils-jpeg_scale.patch (NONE -> 1.1.2.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/splashutils-jpeg_scale.patch
diff -u /dev/null SOURCES/splashutils-jpeg_scale.patch:1.1.2.1
--- /dev/null Fri Jun 23 16:11:26 2006
+++ SOURCES/splashutils-jpeg_scale.patch Fri Jun 23 16:11:21 2006
@@ -0,0 +1,99 @@
+--- splashutils-1.1.9.10/image.c.orig 2006-06-23 13:08:41.000000000 +0000
++++ splashutils-1.1.9.10/image.c 2006-06-23 14:00:39.000000000 +0000
+@@ -61,6 +61,21 @@
+ }
+ }
+
++void inline rescale_line( rgbcolor* in_data, rgbcolor* out_data, int in_width, int out_width ) {
++ int in_pix = 0, out_pix, act;
++ for ( out_pix = 0; out_pix < out_width; out_pix++) {
++ act = out_pix * in_width / out_width;
++ while (act > in_pix) {
++ in_pix++;
++ in_data++;
++ }
++ out_data->r = in_data->r;
++ out_data->g = in_data->g;
++ out_data->b = in_data->b;
++ out_data++;
++ }
++}
++
+ #ifdef CONFIG_PNG
+ #define PALETTE_COLORS 240
+ int load_png(char *filename, u8 **data, struct fb_cmap *cmap, int *width, int *height, u8 want_alpha)
+@@ -208,8 +223,8 @@
+ struct jpeg_error_mgr jerr;
+ FILE* injpeg;
+
+- u8 *buf = NULL;
+- int i, bytespp = (fb_var.bits_per_pixel+7) >> 3;
++ u8 *buf = NULL, *buf_sc = NULL;
++ int bytespp = (fb_var.bits_per_pixel+7) >> 3;
+
+ cinfo.err = jpeg_std_error(&jerr);
+ jpeg_create_decompress(&cinfo);
+@@ -223,6 +238,7 @@
+ jpeg_read_header(&cinfo, TRUE);
+ jpeg_start_decompress(&cinfo);
+
++ /*
+ if ((width && cinfo.output_width != *width) || (height && cinfo.output_height != *height)) {
+ printerr("Image size mismatch: %s.\n", filename);
+ return -2;
+@@ -230,29 +246,50 @@
+ *width = cinfo.output_width;
+ *height = cinfo.output_height;
+ }
++ */
+
+ buf = malloc(cinfo.output_width * cinfo.output_components * sizeof(char));
+ if (!buf) {
+ printerr("Failed to allocate JPEG decompression buffer.\n");
+ return -1;
+ }
++ buf_sc = malloc(*width * cinfo.output_components * sizeof(char));
++ if (!buf_sc) {
++ printerr("Failed to allocate scale buffer.\n");
++ return -1;
++ }
+
+- *data = malloc(cinfo.output_width * cinfo.output_height * bytespp);
++ *data = malloc(*width * *height * bytespp);
+ if (!*data) {
+ printerr("Failed to allocate memory for image: %s.\n", filename);
+ return -4;
+ }
+-
+- for (i = 0; i < cinfo.output_height; i++) {
+- jpeg_read_scanlines(&cinfo, (JSAMPARRAY) &buf, 1);
+- truecolor2fb((truecolor*)buf, *data + cinfo.output_width * bytespp * i, cinfo.output_width, i, 0);
++
++ int in_line = -1, out_line, act;
++ for (out_line = 0; out_line < *height; out_line++) {
++ act = out_line * cinfo.output_height / *height; // line which should be read
++ if (act < in_line) {
++ // should not happen
++ printerr("Some error orurred while scaling: %s.\n", filename);
++ return -4;
++ }
++ while (act > in_line) {
++ in_line++;
++ jpeg_read_scanlines(&cinfo, (JSAMPARRAY) &buf, 1);
++ rescale_line( (rgbcolor*)buf, (rgbcolor*)buf_sc,
++ cinfo.output_width, *width);
++ }
++ truecolor2fb((truecolor*)buf_sc, *data + *width * bytespp * out_line, *width, out_line, 0);
+ }
++ while ( ++in_line < cinfo.output_height )
++ jpeg_read_scanlines(&cinfo, (JSAMPARRAY) &buf, 1);
+
+ jpeg_finish_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
+ fclose(injpeg);
+
+ free(buf);
++ free(buf_sc);
+ return 0;
+ }
+
================================================================
More information about the pld-cvs-commit
mailing list