freebsd-ports/graphics/libimg/files/patch-jpeg

606 lines
17 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--- imgJPEG.c Thu Jun 9 06:36:41 2005
+++ imgJPEG.c Thu Jun 9 20:27:11 2005
@@ -173,115 +173,4 @@
j_common_ptr cinfo));
static int load_jpeg_library _ANSI_ARGS_((Tcl_Interp *interp));
-static int CreateCompress _ANSI_ARGS_((j_compress_ptr, int, size_t));
-static int CreateDecompress _ANSI_ARGS_((j_decompress_ptr, int, size_t));
-
-/*
- * Stuff to support dynamic loading of libjpeg
- */
-
-static struct JpegFunctions {
- VOID *handle;
- int (* abort_decompress) _ANSI_ARGS_((j_decompress_ptr));
- int (* destroy_compress) _ANSI_ARGS_((j_compress_ptr));
- int (* destroy_decompress) _ANSI_ARGS_((j_decompress_ptr));
- int (* finish_compress) _ANSI_ARGS_((j_compress_ptr));
- int (* finish_decompress) _ANSI_ARGS_((j_decompress_ptr));
- int (* read_header) _ANSI_ARGS_((j_decompress_ptr, int));
- JDIMENSION (* read_scanlines) _ANSI_ARGS_((j_decompress_ptr,
- JSAMPARRAY, JDIMENSION));
- boolean (* resync_to_restart) _ANSI_ARGS_((j_decompress_ptr, int));
- int (* set_defaults) _ANSI_ARGS_((j_compress_ptr));
- int (* start_compress) _ANSI_ARGS_((j_compress_ptr, int));
- int (* start_decompress) _ANSI_ARGS_((j_decompress_ptr));
- struct jpeg_error_mgr *(* std_error) _ANSI_ARGS_((struct jpeg_error_mgr *));
- JDIMENSION (* write_scanlines) _ANSI_ARGS_((j_compress_ptr,
- JSAMPARRAY, JDIMENSION));
- int (* set_colorspace) _ANSI_ARGS_((j_compress_ptr, J_COLOR_SPACE));
- int (* set_quality) _ANSI_ARGS_((j_compress_ptr, int, int));
- int (* simple_progression) _ANSI_ARGS_((j_compress_ptr));
- int (* CreateCompress) _ANSI_ARGS_((j_compress_ptr, int, size_t));
- int (* CreateDecompress) _ANSI_ARGS_((j_decompress_ptr, int, size_t));
- int (* create_compress) _ANSI_ARGS_((j_compress_ptr));
- int (* create_decompress) _ANSI_ARGS_((j_decompress_ptr));
- void (* destroy) _ANSI_ARGS_((j_common_ptr));
- JDIMENSION (* write_raw_data) _ANSI_ARGS_((j_compress_ptr,
- JSAMPIMAGE, JDIMENSION));
- void (* suppress_tables) _ANSI_ARGS_((j_compress_ptr, boolean));
- void (* write_tables) _ANSI_ARGS_((j_compress_ptr));
- JDIMENSION (* read_raw_data) _ANSI_ARGS_((j_decompress_ptr,
- JSAMPIMAGE, JDIMENSION));
- void (* abort) _ANSI_ARGS_((j_common_ptr));
-} jpeg = {0};
-
-static char *symbols[] = {
-#ifdef NEED_SHORT_EXTERNAL_NAMES
- "jAbrtDecompress",
- "jDestCompress",
- "jDestDecompress",
- "jFinCompress",
- "jFinDecompress",
- "jReadHeader",
- "jReadScanlines",
- "jResyncRestart",
- "jSetDefaults",
- "jStrtCompress",
- "jStrtDecompress",
- "jStdError",
- "jWrtScanlines",
- /* the following 3 symbols are not crucial. They implement
- resp. the "-grayscale", "-quality" and "-progressive"
- options. If any of the symbols are missing from the
- library, the corresponding option just has no effect. */
- "jSetColorspace",
- "jSetQuality",
- "jSimProgress",
- "jCreaCompress",
- "jCreaDecompress",
- "jCreaCompress",
- "jCreaDecompress",
- "jDestroy",
- "jWrtRawData",
- "jSuppressTables",
- "jWrtTables",
- "jReadRawData",
- "jAbort",
-#else
- "jpeg_abort_decompress",
- "jpeg_destroy_compress",
- "jpeg_destroy_decompress",
- "jpeg_finish_compress",
- "jpeg_finish_decompress",
- "jpeg_read_header",
- "jpeg_read_scanlines",
- "jpeg_resync_to_restart",
- "jpeg_set_defaults",
- "jpeg_start_compress",
- "jpeg_start_decompress",
- "jpeg_std_error",
- "jpeg_write_scanlines",
- /* the following 3 symbols are not crucial. They implement
- resp. the "-grayscale", "-quality" and "-progressive"
- options. If any of the symbols are missing from the
- library, the corresponding option just has no effect. */
- "jpeg_set_colorspace",
- "jpeg_set_quality",
- "jpeg_simple_progression",
- /* In later versions, jpeg_create_compress and jpeg_create_decompress
- are macros pointing to jpeg_CreateCompress and jpeg_CreateDecompres.
- Which one is found depends on the version. */
- "jpeg_CreateCompress",
- "jpeg_CreateDecompress",
- "jpeg_create_compress",
- "jpeg_create_decompress",
- "jpeg_destroy",
- "jpeg_write_raw_data",
- "jpeg_suppress_tables",
- "jpeg_write_tables",
- "jpeg_read_raw_data",
- "jpeg_abort",
-#endif
- (char *) NULL
-};
-
static int
@@ -292,21 +181,10 @@
struct my_error_mgr jerror; /* for controlling libjpeg error handling */
int i;
+ static int initialized;
- if (ImgLoadLib(interp, JPEG_LIB_NAME, &jpeg.handle, symbols, 13)
- != TCL_OK) {
- return TCL_ERROR;
- }
- if (jpeg.CreateCompress == NULL) {
- if (jpeg.create_compress == NULL) {
- goto load_failed;
- }
- jpeg.CreateCompress = CreateCompress;
- }
- if (jpeg.CreateDecompress == NULL) {
- if (jpeg.create_decompress == NULL) {
- goto load_failed;
- }
- jpeg.CreateDecompress = CreateDecompress;
- }
+ if (initialized)
+ return TCL_OK;
+
+ initialized = 1;
/* The followin code tries to determine if the JPEG library is
@@ -322,5 +200,5 @@
cinfo = (struct jpeg_compress_struct *)
ckalloc(8*sizeof(struct jpeg_compress_struct));
- cinfo->err = jpeg.std_error(&jerror.pub);
+ cinfo->err = jpeg_std_error(&jerror.pub);
jerror.pub.error_exit = my_error_exit;
jerror.pub.output_message = my_output_message;
@@ -328,18 +206,16 @@
if (setjmp(jerror.setjmp_buffer)) {
/* If we get here, the JPEG library is invalid. */
- jpeg.destroy_compress(cinfo);
+ jpeg_destroy_compress(cinfo);
ckfree((char *)cinfo);
-load_failed:
if (interp) {
- Tcl_AppendResult(interp, "couldn't load \"", JPEG_LIB_NAME,
- "\": please upgrade to at least version 6a", (char *) NULL);
+ Tcl_AppendResult(interp, "JPEG library mismatch, expecting \"",
+ JPEG_LIB_NAME, NULL);
}
- ImgLoadFailed(&jpeg.handle);
return TCL_ERROR;
}
/* Now we can initialize libjpeg. */
((char *) cinfo)[sizeof(struct jpeg_compress_struct)] = 53;
- jpeg.CreateCompress(cinfo, JPEG_LIB_VERSION,
+ jpeg_CreateCompress(cinfo, JPEG_LIB_VERSION,
(size_t) sizeof(struct jpeg_compress_struct));
if (((char *) cinfo)[sizeof(struct jpeg_compress_struct)] != 53) {
@@ -359,5 +235,5 @@
cinfo->X_density = 0;
cinfo->Y_density = 0;
- jpeg.set_defaults(cinfo);
+ jpeg_set_defaults(cinfo);
if ((cinfo->data_precision != BITS_IN_JSAMPLE) ||
@@ -375,5 +251,5 @@
}
}
- jpeg.destroy_compress(cinfo);
+ jpeg_destroy_compress(cinfo);
ckfree((char *) cinfo);
return TCL_OK;
@@ -383,13 +259,6 @@
ImgLoadJpegLibrary()
{
- if ((load_jpeg_library(NULL) == TCL_OK)
- && jpeg.destroy
- && jpeg.write_raw_data
- && jpeg.suppress_tables
- && jpeg.write_tables
- && jpeg.read_raw_data
- && jpeg.abort) {
+ if (load_jpeg_library(NULL) == TCL_OK)
return TCL_OK;
- }
return TCL_ERROR;
}
@@ -420,179 +289,4 @@
JSAMPARRAY, JDIMENSION));
-static int
-CreateCompress(cinfo, version, size)
- j_compress_ptr cinfo;
- int version;
- size_t size;
-{
- return jpeg.create_compress(cinfo);
-}
-
-static int
-CreateDecompress(cinfo, version, size)
- j_decompress_ptr cinfo;
- int version;
- size_t size;
-{
- return jpeg.create_decompress(cinfo);
-}
-
-int
-Imgjpeg_CreateCompress(cinfo, version, size)
- j_compress_ptr cinfo;
- int version;
- size_t size;
-{
- return jpeg.CreateCompress(cinfo, version, size);
-}
-
-int
-Imgjpeg_CreateDecompress(cinfo, version, size)
- j_decompress_ptr cinfo;
- int version;
- size_t size;
-{
- return jpeg.CreateDecompress(cinfo, version, size);
-}
-
-boolean
-Imgjpeg_resync_to_restart(a,b)
- j_decompress_ptr a;
- int b;
-{
- return jpeg.resync_to_restart(a,b);
-}
-
-JDIMENSION
-Imgjpeg_read_scanlines(a,b,c)
- j_decompress_ptr a;
- JSAMPARRAY b;
- JDIMENSION c;
-{
- return jpeg.read_scanlines(a,b,c);
-}
-
-int
-Imgjpeg_set_colorspace(a,b)
- j_compress_ptr a;
- J_COLOR_SPACE b;
-{
- return jpeg.set_colorspace(a,b);
-}
-
-int
-Imgjpeg_set_defaults(a)
- j_compress_ptr a;
-{
- return jpeg.set_defaults(a);
-}
-
-int
-Imgjpeg_start_decompress(a)
- j_decompress_ptr a;
-{
- return jpeg.start_decompress(a);
-}
-
-void
-Imgjpeg_destroy(a)
- j_common_ptr a;
-{
- jpeg.destroy(a);
-}
-
-struct jpeg_error_mgr *
-Imgjpeg_std_error(a)
- struct jpeg_error_mgr *a;
-{
- return jpeg.std_error(a);
-}
-
-JDIMENSION Imgjpeg_write_raw_data(a,b,c)
- j_compress_ptr a;
- JSAMPIMAGE b;
- JDIMENSION c;
-{
- return jpeg.write_raw_data(a,b,c);
-}
-
-void
-Imgjpeg_suppress_tables(a,b)
- j_compress_ptr a;
- boolean b;
-{
- jpeg.suppress_tables(a,b);
-}
-
-void
-Imgjpeg_abort(a)
- j_common_ptr a;
-{
- jpeg.abort(a);
-}
-
-int
-Imgjpeg_read_header(a,b)
- j_decompress_ptr a;
- int b;
-{
- return jpeg.read_header(a,b);
-}
-
-int
-Imgjpeg_start_compress(a,b)
- j_compress_ptr a;
- int b;
-{
- return jpeg.start_compress(a,b);
-}
-
-void
-Imgjpeg_write_tables(a)
- j_compress_ptr a;
-{
- jpeg.write_tables(a);
-}
-
-int
-Imgjpeg_finish_decompress(a)
- j_decompress_ptr a;
-{
- return jpeg.finish_decompress(a);
-}
-
-int
-Imgjpeg_finish_compress(a)
- j_compress_ptr a;
-{
- return jpeg.finish_compress(a);
-}
-
-JDIMENSION
-Imgjpeg_read_raw_data(a,b,c)
- j_decompress_ptr a;
- JSAMPIMAGE b;
- JDIMENSION c;
-{
- return jpeg.read_raw_data(a,b,c);
-}
-
-int
-Imgjpeg_set_quality(a,b,c)
- j_compress_ptr a;
- int b;
- int c;
-{
- return jpeg.set_quality(a,b,c);
-}
-
-JDIMENSION
-Imgjpeg_write_scanlines(a,b,c)
- j_compress_ptr a;
- JSAMPARRAY b;
- JDIMENSION c;
-{
- return jpeg.write_scanlines(a,b,c);
-}
@@ -794,5 +488,5 @@
/* Initialize JPEG error handler */
/* We set up the normal JPEG error routines, then override error_exit. */
- cinfo.err = jpeg.std_error(&jerror.pub);
+ cinfo.err = jpeg_std_error(&jerror.pub);
jerror.pub.error_exit = my_error_exit;
jerror.pub.output_message = my_output_message;
@@ -803,10 +497,10 @@
Tcl_AppendResult(interp, "couldn't read JPEG string: ", (char *) NULL);
append_jpeg_message(interp, (j_common_ptr) &cinfo);
- jpeg.destroy_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
return TCL_ERROR;
}
/* Now we can initialize libjpeg. */
- jpeg.CreateDecompress(&cinfo, JPEG_LIB_VERSION,
+ jpeg_CreateDecompress(&cinfo, JPEG_LIB_VERSION,
(size_t) sizeof(struct jpeg_decompress_struct));
jpeg_channel_src(&cinfo, chan);
@@ -817,5 +511,5 @@
/* Reclaim libjpeg's internal resources. */
- jpeg.destroy_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
return result;
@@ -865,5 +559,5 @@
/* Initialize JPEG error handler */
/* We set up the normal JPEG error routines, then override error_exit. */
- cinfo.err = jpeg.std_error(&jerror.pub);
+ cinfo.err = jpeg_std_error(&jerror.pub);
jerror.pub.error_exit = my_error_exit;
jerror.pub.output_message = my_output_message;
@@ -874,10 +568,10 @@
Tcl_AppendResult(interp, "couldn't read JPEG string: ", (char *) NULL);
append_jpeg_message(interp, (j_common_ptr) &cinfo);
- jpeg.destroy_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
return TCL_ERROR;
}
/* Now we can initialize libjpeg. */
- jpeg.CreateDecompress(&cinfo, JPEG_LIB_VERSION,
+ jpeg_CreateDecompress(&cinfo, JPEG_LIB_VERSION,
(size_t) sizeof(struct jpeg_decompress_struct));
jpeg_obj_src(&cinfo, data);
@@ -888,5 +582,5 @@
/* Reclaim libjpeg's internal resources. */
- jpeg.destroy_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
return result;
@@ -926,5 +620,5 @@
* in image being read. */
{
- static char *jpegReadOptions[] = {"-fast", "-grayscale", NULL};
+ static const char *jpegReadOptions[] = {"-fast", "-grayscale", NULL};
int fileWidth, fileHeight, stopY, curY, outY, outWidth, outHeight;
myblock bl;
@@ -935,5 +629,5 @@
/* Ready to read header data. */
- jpeg.read_header(cinfo, TRUE);
+ jpeg_read_header(cinfo, TRUE);
/* This code only supports 8-bit-precision JPEG files. */
@@ -972,5 +666,5 @@
}
- jpeg.start_decompress(cinfo);
+ jpeg_start_decompress(cinfo);
/* Check dimensions. */
@@ -1029,5 +723,5 @@
outY = destY;
for (curY = 0; curY < stopY; curY++) {
- jpeg.read_scanlines(cinfo, buffer, 1);
+ jpeg_read_scanlines(cinfo, buffer, 1);
if (curY >= srcY) {
Tk_PhotoPutBlock(imageHandle, &block, destX, outY, outWidth, 1, TK_PHOTO_COMPOSITE_SET);
@@ -1038,7 +732,7 @@
/* Do normal cleanup if we read the whole image; else early abort */
if (cinfo->output_scanline == cinfo->output_height)
- jpeg.finish_decompress(cinfo);
+ jpeg_finish_decompress(cinfo);
else
- jpeg.abort_decompress(cinfo);
+ jpeg_abort_decompress(cinfo);
return TCL_OK;
@@ -1086,5 +780,5 @@
/* Initialize JPEG error handler */
/* We set up the normal JPEG error routines, then override error_exit. */
- cinfo.err = jpeg.std_error(&jerror.pub);
+ cinfo.err = jpeg_std_error(&jerror.pub);
jerror.pub.error_exit = my_error_exit;
jerror.pub.output_message = my_output_message;
@@ -1096,11 +790,11 @@
"\": ", (char *) NULL);
append_jpeg_message(interp, (j_common_ptr) &cinfo);
- jpeg.destroy_compress(&cinfo);
+ jpeg_destroy_compress(&cinfo);
Tcl_Close(interp, chan);
return TCL_ERROR;
}
/* Now we can initialize libjpeg. */
- jpeg.CreateCompress(&cinfo, JPEG_LIB_VERSION,
+ jpeg_CreateCompress(&cinfo, JPEG_LIB_VERSION,
(size_t) sizeof(struct jpeg_compress_struct));
jpeg_channel_dest(&cinfo, chan);
@@ -1109,5 +803,5 @@
result = CommonWriteJPEG(interp, &cinfo, format, blockPtr);
- jpeg.destroy_compress(&cinfo);
+ jpeg_destroy_compress(&cinfo);
if (Tcl_Close(interp, chan) == TCL_ERROR) {
return TCL_ERROR;
@@ -1154,5 +848,5 @@
/* Initialize JPEG error handler */
/* We set up the normal JPEG error routines, then override error_exit. */
- cinfo.err = jpeg.std_error(&jerror.pub);
+ cinfo.err = jpeg_std_error(&jerror.pub);
jerror.pub.error_exit = my_error_exit;
jerror.pub.output_message = my_output_message;
@@ -1167,6 +861,6 @@
}
/* Now we can initialize libjpeg. */
- jpeg.CreateCompress(&cinfo, JPEG_LIB_VERSION,
+ jpeg_CreateCompress(&cinfo, JPEG_LIB_VERSION,
(size_t) sizeof(struct jpeg_compress_struct));
jpeg_string_dest(&cinfo, dataPtr);
@@ -1177,5 +871,5 @@
writeend:
- jpeg.destroy_compress(&cinfo);
+ jpeg_destroy_compress(&cinfo);
if (dataPtr == &data) {
if (result == TCL_OK) {
@@ -1210,5 +904,5 @@
Tk_PhotoImageBlock *blockPtr;
{
- static char *jpegWriteOptions[] = {"-grayscale", "-optimize",
+ static const char *jpegWriteOptions[] = {"-grayscale", "-optimize",
"-progressive", "-quality", "-smooth", NULL};
JSAMPROW row_pointer[1]; /* pointer to original data scanlines */
@@ -1239,5 +933,5 @@
cinfo->in_color_space = JCS_RGB;
- jpeg.set_defaults(cinfo);
+ jpeg_set_defaults(cinfo);
/* Parse options, if any, and alter default parameters */
@@ -1262,7 +956,7 @@
}
case 2: {
- if (jpeg.simple_progression != NULL) {
+ if (jpeg_simple_progression != NULL) {
/* Select simple progressive mode. */
- jpeg.simple_progression(cinfo);
+ jpeg_simple_progression(cinfo);
}
break;
@@ -1278,5 +972,5 @@
return TCL_ERROR;
}
- jpeg.set_quality(cinfo, quality, FALSE);
+ jpeg_set_quality(cinfo, quality, FALSE);
break;
}
@@ -1301,11 +995,11 @@
greenOffset = blockPtr->offset[1] - blockPtr->offset[0];
blueOffset = blockPtr->offset[2] - blockPtr->offset[0];
- if ((jpeg.set_colorspace != NULL) &&
+ if ((jpeg_set_colorspace != NULL) &&
(grayscale || (!greenOffset && !blueOffset))) {
/* Generate monochrome JPEG file if source block is grayscale. */
- jpeg.set_colorspace(cinfo, JCS_GRAYSCALE);
+ jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
}
- jpeg.start_compress(cinfo, TRUE);
+ jpeg_start_compress(cinfo, TRUE);
/* note: we assume libjpeg is configured for standard RGB pixel order. */
@@ -1315,5 +1009,5 @@
for (h = blockPtr->height; h > 0; h--) {
row_pointer[0] = (JSAMPROW) pixLinePtr;
- jpeg.write_scanlines(cinfo, row_pointer, 1);
+ jpeg_write_scanlines(cinfo, row_pointer, 1);
pixLinePtr += blockPtr->pitch;
}
@@ -1341,10 +1035,10 @@
pixelPtr += blockPtr->pixelSize;
}
- jpeg.write_scanlines(cinfo, buffer, 1);
+ jpeg_write_scanlines(cinfo, buffer, 1);
pixLinePtr += blockPtr->pitch;
}
}
- jpeg.finish_compress(cinfo);
+ jpeg_finish_compress(cinfo);
return TCL_OK;
}
@@ -1370,5 +1064,5 @@
src->pub.fill_input_buffer = fill_input_buffer;
src->pub.skip_input_data = skip_input_data;
- src->pub.resync_to_restart = jpeg.resync_to_restart; /* use default method */
+ src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
src->pub.term_source = dummy_source;
@@ -1443,5 +1137,5 @@
src->pub.fill_input_buffer = fill_input_buffer;
src->pub.skip_input_data = skip_input_data;
- src->pub.resync_to_restart = jpeg.resync_to_restart; /* use default method */
+ src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
src->pub.term_source = dummy_source;