Don't allow disabling in-memory src/dest managers

By default, libjpeg-turbo 1.3.x and later have enabled the in-memory
source/destination manager functions from libjpeg v8 when emulating the
libjpeg v6b or v7 API/ABI, which has allowed operating system
distributors to provide those functions without adopting the
backward-incompatible libjpeg v8 API/ABI.

Prior to libjpeg-turbo 1.5.x, it made sense to allow users to disable
the in-memory source/destination manager functions at build time and
thus retain both backward and forward API/ABI compatibility relative to
libjpeg v6b or v7.  Since then, however, we have introduced several new
libjpeg API functions that break forward API/ABI compatibility, so it no
longer makes sense to allow the in-memory source/destination managers to
be disabled.  libjpeg-turbo only claims to be
backward-API/ABI-compatible, i.e. to allow applications built against
libjpeg or an older version of libjpeg-turbo to work properly with the
current version of libjpeg-turbo.
This commit is contained in:
DRC
2022-11-03 14:39:19 -05:00
parent 664b64a9ac
commit 6c2bc901e2
21 changed files with 30 additions and 545 deletions

View File

@@ -288,15 +288,6 @@ API/ABI-compatible with libjpeg v8. See [README.md](README.md) for more
information about libjpeg v7 and v8 emulation. information about libjpeg v7 and v8 emulation.
### In-Memory Source/Destination Managers
When using libjpeg v6b or v7 API/ABI emulation, add `-DWITH_MEM_SRCDST=0` to
the CMake command line to build a version of libjpeg-turbo that lacks the
`jpeg_mem_src()` and `jpeg_mem_dest()` functions. These functions were not
part of the original libjpeg v6b and v7 APIs, so removing them ensures strict
conformance with those APIs. See [README.md](README.md) for more information.
### Arithmetic Coding Support ### Arithmetic Coding Support
Since the patent on arithmetic coding has expired, this functionality has been Since the patent on arithmetic coding has expired, this functionality has been

View File

@@ -212,8 +212,6 @@ option(WITH_JPEG7 "Emulate libjpeg v7 API/ABI (this makes ${CMAKE_PROJECT_NAME}
boolean_number(WITH_JPEG7) boolean_number(WITH_JPEG7)
option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE) option(WITH_JPEG8 "Emulate libjpeg v8 API/ABI (this makes ${CMAKE_PROJECT_NAME} backward-incompatible with libjpeg v6b)" FALSE)
boolean_number(WITH_JPEG8) boolean_number(WITH_JPEG8)
option(WITH_MEM_SRCDST "Include in-memory source/destination manager functions when emulating the libjpeg v6b or v7 API/ABI" TRUE)
boolean_number(WITH_MEM_SRCDST)
option(WITH_SIMD "Include SIMD extensions, if available for this platform" TRUE) option(WITH_SIMD "Include SIMD extensions, if available for this platform" TRUE)
boolean_number(WITH_SIMD) boolean_number(WITH_SIMD)
option(WITH_TURBOJPEG "Include the TurboJPEG API library and associated test programs" TRUE) option(WITH_TURBOJPEG "Include the TurboJPEG API library and associated test programs" TRUE)
@@ -253,9 +251,6 @@ if(WITH_JPEG8 OR WITH_JPEG7)
set(WITH_ARITH_ENC 1) set(WITH_ARITH_ENC 1)
set(WITH_ARITH_DEC 1) set(WITH_ARITH_DEC 1)
endif() endif()
if(WITH_JPEG8)
set(WITH_MEM_SRCDST 0)
endif()
report_option(WITH_12BIT "12-bit JPEG support") report_option(WITH_12BIT "12-bit JPEG support")
@@ -272,13 +267,6 @@ report_option(WITH_ARITH_ENC "Arithmetic encoding support")
report_option(WITH_TURBOJPEG "TurboJPEG API library") report_option(WITH_TURBOJPEG "TurboJPEG API library")
report_option(WITH_JAVA "TurboJPEG Java wrapper") report_option(WITH_JAVA "TurboJPEG Java wrapper")
if(WITH_MEM_SRCDST)
set(MEM_SRCDST_SUPPORTED 1)
endif()
if(NOT WITH_JPEG8)
report_option(WITH_MEM_SRCDST "In-memory source/destination managers")
endif()
# 0: Original libjpeg v6b/v7/v8 API/ABI # 0: Original libjpeg v6b/v7/v8 API/ABI
# #
# libjpeg v6b/v7 API/ABI emulation: # libjpeg v6b/v7 API/ABI emulation:
@@ -290,7 +278,7 @@ endif()
# 1: + Partial image decompression functions (libjpeg-turbo 1.5.x) # 1: + Partial image decompression functions (libjpeg-turbo 1.5.x)
# 2: + ICC functions (libjpeg-turbo 2.0.x) # 2: + ICC functions (libjpeg-turbo 2.0.x)
set(SO_AGE 2) set(SO_AGE 2)
if(WITH_MEM_SRCDST) if(NOT WITH_JPEG8)
set(SO_AGE 3) set(SO_AGE 3)
endif() endif()
@@ -531,13 +519,13 @@ configure_file(jconfig.h.in jconfig.h)
configure_file(jconfigint.h.in jconfigint.h) configure_file(jconfigint.h.in jconfigint.h)
configure_file(jversion.h.in jversion.h) configure_file(jversion.h.in jversion.h)
if(UNIX) if(UNIX)
if(WITH_MEM_SRCDST) if(NOT WITH_JPEG8)
set(MEM_SRCDST_FUNCTIONS "global: jpeg_mem_dest; jpeg_mem_src;") set(MEM_SRCDST_FUNCTIONS "global: jpeg_mem_dest; jpeg_mem_src;")
endif() endif()
set(SIMD_FUNCTIONS "jsimd_*") set(SIMD_FUNCTIONS "jsimd_*")
configure_file(libjpeg.map.in libjpeg.map) configure_file(libjpeg.map.in libjpeg.map)
if(WITH_12BIT) if(WITH_12BIT)
if(WITH_MEM_SRCDST) if(NOT WITH_JPEG8)
set(MEM_SRCDST_FUNCTIONS "global: jpeg12_mem_dest; jpeg12_mem_src;") set(MEM_SRCDST_FUNCTIONS "global: jpeg12_mem_dest; jpeg12_mem_src;")
endif() endif()
set(SIMD_FUNCTIONS "jsimd12_*") set(SIMD_FUNCTIONS "jsimd12_*")

View File

@@ -245,16 +245,6 @@ programs that need them, without breaking ABI compatibility for programs that
don't, and it allows those functions to be provided in the "official" don't, and it allows those functions to be provided in the "official"
libjpeg-turbo binaries. libjpeg-turbo binaries.
Those who are concerned about maintaining strict conformance with the libjpeg
v6b or v7 API can pass an argument of `-DWITH_MEM_SRCDST=0` to `cmake` prior to
building libjpeg-turbo. This will restore the pre-1.3 behavior, in which
`jpeg_mem_src()` and `jpeg_mem_dest()` are only included when emulating the
libjpeg v8 API/ABI.
On Un*x systems, including the in-memory source/destination managers changes
the dynamic library version from 62.2.0 to 62.3.0 if using libjpeg v6b API/ABI
emulation and from 7.2.0 to 7.3.0 if using libjpeg v7 API/ABI emulation.
Note that, on most Un*x systems, the dynamic linker will not look for a Note that, on most Un*x systems, the dynamic linker will not look for a
function in a library until that function is actually used. Thus, if a program function in a library until that function is actually used. Thus, if a program
is built against libjpeg-turbo 1.3+ and uses `jpeg_mem_src()` or is built against libjpeg-turbo 1.3+ and uses `jpeg_mem_src()` or

10
cjpeg.c
View File

@@ -226,9 +226,7 @@ usage(void)
#endif #endif
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
fprintf(stderr, " -outfile name Specify name for output file\n"); fprintf(stderr, " -outfile name Specify name for output file\n");
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n"); fprintf(stderr, " -memdst Compress to memory instead of file (useful for benchmarking)\n");
#endif
fprintf(stderr, " -report Report compression progress\n"); fprintf(stderr, " -report Report compression progress\n");
fprintf(stderr, " -strict Treat all warnings as fatal\n"); fprintf(stderr, " -strict Treat all warnings as fatal\n");
fprintf(stderr, " -verbose or -debug Emit debug output\n"); fprintf(stderr, " -verbose or -debug Emit debug output\n");
@@ -397,13 +395,7 @@ parse_switches(j_compress_ptr cinfo, int argc, char **argv,
} else if (keymatch(arg, "memdst", 2)) { } else if (keymatch(arg, "memdst", 2)) {
/* Use in-memory destination manager */ /* Use in-memory destination manager */
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
memdst = TRUE; memdst = TRUE;
#else
fprintf(stderr, "%s: sorry, in-memory destination manager was not compiled in\n",
progname);
exit(EXIT_FAILURE);
#endif
} else if (keymatch(arg, "quality", 1)) { } else if (keymatch(arg, "quality", 1)) {
/* Quality ratings (quantization table scaling factors). */ /* Quality ratings (quantization table scaling factors). */
@@ -710,11 +702,9 @@ main(int argc, char **argv)
file_index = parse_switches(&cinfo, argc, argv, 0, TRUE); file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
/* Specify data destination for compression */ /* Specify data destination for compression */
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
if (memdst) if (memdst)
jpeg_mem_dest(&cinfo, &outbuffer, &outsize); jpeg_mem_dest(&cinfo, &outbuffer, &outsize);
else else
#endif
jpeg_stdio_dest(&cinfo, output_file); jpeg_stdio_dest(&cinfo, output_file);
#ifdef CJPEG_FUZZER #ifdef CJPEG_FUZZER

12
djpeg.c
View File

@@ -164,9 +164,7 @@ usage(void)
fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n");
fprintf(stderr, " -maxscans N Maximum number of scans to allow in input file\n"); fprintf(stderr, " -maxscans N Maximum number of scans to allow in input file\n");
fprintf(stderr, " -outfile name Specify name for output file\n"); fprintf(stderr, " -outfile name Specify name for output file\n");
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
fprintf(stderr, " -memsrc Load input file into memory before decompressing\n"); fprintf(stderr, " -memsrc Load input file into memory before decompressing\n");
#endif
fprintf(stderr, " -report Report decompression progress\n"); fprintf(stderr, " -report Report decompression progress\n");
fprintf(stderr, " -skip Y0,Y1 Decompress all rows except those between Y0 and Y1 (inclusive)\n"); fprintf(stderr, " -skip Y0,Y1 Decompress all rows except those between Y0 and Y1 (inclusive)\n");
fprintf(stderr, " -crop WxH+X+Y Decompress only a rectangular subregion of the image\n"); fprintf(stderr, " -crop WxH+X+Y Decompress only a rectangular subregion of the image\n");
@@ -377,13 +375,7 @@ parse_switches(j_decompress_ptr cinfo, int argc, char **argv,
} else if (keymatch(arg, "memsrc", 2)) { } else if (keymatch(arg, "memsrc", 2)) {
/* Use in-memory source manager */ /* Use in-memory source manager */
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
memsrc = TRUE; memsrc = TRUE;
#else
fprintf(stderr, "%s: sorry, in-memory source manager was not compiled in\n",
progname);
exit(EXIT_FAILURE);
#endif
} else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) { } else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) {
/* PPM/PGM output format. */ /* PPM/PGM output format. */
@@ -535,9 +527,7 @@ main(int argc, char **argv)
FILE *input_file; FILE *input_file;
FILE *output_file; FILE *output_file;
unsigned char *inbuffer = NULL; unsigned char *inbuffer = NULL;
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
unsigned long insize = 0; unsigned long insize = 0;
#endif
JDIMENSION num_scanlines; JDIMENSION num_scanlines;
progname = argv[0]; progname = argv[0];
@@ -627,7 +617,6 @@ main(int argc, char **argv)
} }
/* Specify data source for decompression */ /* Specify data source for decompression */
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
if (memsrc) { if (memsrc) {
size_t nbytes; size_t nbytes;
do { do {
@@ -649,7 +638,6 @@ main(int argc, char **argv)
fprintf(stderr, "Compressed size: %lu bytes\n", insize); fprintf(stderr, "Compressed size: %lu bytes\n", insize);
jpeg_mem_src(&cinfo, inbuffer, insize); jpeg_mem_src(&cinfo, inbuffer, insize);
} else } else
#endif
jpeg_stdio_src(&cinfo, input_file); jpeg_stdio_src(&cinfo, input_file);
/* Read file header, set default decompression parameters */ /* Read file header, set default decompression parameters */

View File

@@ -15,9 +15,6 @@
/* Support arithmetic decoding when using 8-bit samples */ /* Support arithmetic decoding when using 8-bit samples */
#cmakedefine D_ARITH_CODING_SUPPORTED 1 #cmakedefine D_ARITH_CODING_SUPPORTED 1
/* Support in-memory source/destination managers */
#cmakedefine MEM_SRCDST_SUPPORTED 1
/* Use accelerated SIMD routines when using 8-bit samples */ /* Use accelerated SIMD routines when using 8-bit samples */
#cmakedefine WITH_SIMD 1 #cmakedefine WITH_SIMD 1

View File

@@ -38,7 +38,6 @@ typedef my_destination_mgr *my_dest_ptr;
#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */ #define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
/* Expanded data destination object for memory output */ /* Expanded data destination object for memory output */
typedef struct { typedef struct {
@@ -52,7 +51,6 @@ typedef struct {
} my_mem_destination_mgr; } my_mem_destination_mgr;
typedef my_mem_destination_mgr *my_mem_dest_ptr; typedef my_mem_destination_mgr *my_mem_dest_ptr;
#endif
/* /*
@@ -74,13 +72,11 @@ init_destination(j_compress_ptr cinfo)
dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
} }
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
METHODDEF(void) METHODDEF(void)
init_mem_destination(j_compress_ptr cinfo) init_mem_destination(j_compress_ptr cinfo)
{ {
/* no work necessary here */ /* no work necessary here */
} }
#endif
/* /*
@@ -121,7 +117,6 @@ empty_output_buffer(j_compress_ptr cinfo)
return TRUE; return TRUE;
} }
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
METHODDEF(boolean) METHODDEF(boolean)
empty_mem_output_buffer(j_compress_ptr cinfo) empty_mem_output_buffer(j_compress_ptr cinfo)
{ {
@@ -150,7 +145,6 @@ empty_mem_output_buffer(j_compress_ptr cinfo)
return TRUE; return TRUE;
} }
#endif
/* /*
@@ -179,7 +173,6 @@ term_destination(j_compress_ptr cinfo)
ERREXIT(cinfo, JERR_FILE_WRITE); ERREXIT(cinfo, JERR_FILE_WRITE);
} }
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
METHODDEF(void) METHODDEF(void)
term_mem_destination(j_compress_ptr cinfo) term_mem_destination(j_compress_ptr cinfo)
{ {
@@ -188,7 +181,6 @@ term_mem_destination(j_compress_ptr cinfo)
*dest->outbuffer = dest->buffer; *dest->outbuffer = dest->buffer;
*dest->outsize = (unsigned long)(dest->bufsize - dest->pub.free_in_buffer); *dest->outsize = (unsigned long)(dest->bufsize - dest->pub.free_in_buffer);
} }
#endif
/* /*
@@ -227,7 +219,6 @@ jpeg_stdio_dest(j_compress_ptr cinfo, FILE *outfile)
} }
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
/* /*
* Prepare for output to a memory buffer. * Prepare for output to a memory buffer.
* The caller may supply an own initial buffer with appropriate size. * The caller may supply an own initial buffer with appropriate size.
@@ -284,4 +275,3 @@ jpeg_mem_dest(j_compress_ptr cinfo, unsigned char **outbuffer,
dest->pub.next_output_byte = dest->buffer = *outbuffer; dest->pub.next_output_byte = dest->buffer = *outbuffer;
dest->pub.free_in_buffer = dest->bufsize = *outsize; dest->pub.free_in_buffer = dest->bufsize = *outsize;
} }
#endif

View File

@@ -56,13 +56,11 @@ init_source(j_decompress_ptr cinfo)
src->start_of_file = TRUE; src->start_of_file = TRUE;
} }
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
METHODDEF(void) METHODDEF(void)
init_mem_source(j_decompress_ptr cinfo) init_mem_source(j_decompress_ptr cinfo)
{ {
/* no work necessary here */ /* no work necessary here */
} }
#endif
/* /*
@@ -123,7 +121,6 @@ fill_input_buffer(j_decompress_ptr cinfo)
return TRUE; return TRUE;
} }
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
METHODDEF(boolean) METHODDEF(boolean)
fill_mem_input_buffer(j_decompress_ptr cinfo) fill_mem_input_buffer(j_decompress_ptr cinfo)
{ {
@@ -144,7 +141,6 @@ fill_mem_input_buffer(j_decompress_ptr cinfo)
return TRUE; return TRUE;
} }
#endif
/* /*
@@ -253,7 +249,6 @@ jpeg_stdio_src(j_decompress_ptr cinfo, FILE *infile)
} }
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
/* /*
* Prepare for input from a supplied memory buffer. * Prepare for input from a supplied memory buffer.
* The buffer must contain the whole JPEG data. * The buffer must contain the whole JPEG data.
@@ -292,4 +287,3 @@ jpeg_mem_src(j_decompress_ptr cinfo, const unsigned char *inbuffer,
src->bytes_in_buffer = (size_t)insize; src->bytes_in_buffer = (size_t)insize;
src->next_input_byte = (const JOCTET *)inbuffer; src->next_input_byte = (const JOCTET *)inbuffer;
} }
#endif

View File

@@ -931,14 +931,12 @@ EXTERN(void) jpeg12_destroy_decompress(j12_decompress_ptr cinfo);
EXTERN(void) jpeg12_stdio_dest(j12_compress_ptr cinfo, FILE *outfile); EXTERN(void) jpeg12_stdio_dest(j12_compress_ptr cinfo, FILE *outfile);
EXTERN(void) jpeg12_stdio_src(j12_decompress_ptr cinfo, FILE *infile); EXTERN(void) jpeg12_stdio_src(j12_decompress_ptr cinfo, FILE *infile);
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
/* Data source and destination managers: memory buffers. */ /* Data source and destination managers: memory buffers. */
EXTERN(void) jpeg12_mem_dest(j12_compress_ptr cinfo, unsigned char **outbuffer, EXTERN(void) jpeg12_mem_dest(j12_compress_ptr cinfo, unsigned char **outbuffer,
unsigned long *outsize); unsigned long *outsize);
EXTERN(void) jpeg12_mem_src(j12_decompress_ptr cinfo, EXTERN(void) jpeg12_mem_src(j12_decompress_ptr cinfo,
const unsigned char *inbuffer, const unsigned char *inbuffer,
unsigned long insize); unsigned long insize);
#endif
/* Default parameter setup for compression */ /* Default parameter setup for compression */
EXTERN(void) jpeg12_set_defaults(j12_compress_ptr cinfo); EXTERN(void) jpeg12_set_defaults(j12_compress_ptr cinfo);

View File

@@ -924,13 +924,11 @@ EXTERN(void) jpeg_destroy_decompress(j_decompress_ptr cinfo);
EXTERN(void) jpeg_stdio_dest(j_compress_ptr cinfo, FILE *outfile); EXTERN(void) jpeg_stdio_dest(j_compress_ptr cinfo, FILE *outfile);
EXTERN(void) jpeg_stdio_src(j_decompress_ptr cinfo, FILE *infile); EXTERN(void) jpeg_stdio_src(j_decompress_ptr cinfo, FILE *infile);
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
/* Data source and destination managers: memory buffers. */ /* Data source and destination managers: memory buffers. */
EXTERN(void) jpeg_mem_dest(j_compress_ptr cinfo, unsigned char **outbuffer, EXTERN(void) jpeg_mem_dest(j_compress_ptr cinfo, unsigned char **outbuffer,
unsigned long *outsize); unsigned long *outsize);
EXTERN(void) jpeg_mem_src(j_decompress_ptr cinfo, EXTERN(void) jpeg_mem_src(j_decompress_ptr cinfo,
const unsigned char *inbuffer, unsigned long insize); const unsigned char *inbuffer, unsigned long insize);
#endif
/* Default parameter setup for compression */ /* Default parameter setup for compression */
EXTERN(void) jpeg_set_defaults(j_compress_ptr cinfo); EXTERN(void) jpeg_set_defaults(j_compress_ptr cinfo);

View File

@@ -82,10 +82,8 @@
#define jpeg_stdio_dest jpeg12_stdio_dest #define jpeg_stdio_dest jpeg12_stdio_dest
#define jpeg_stdio_src jpeg12_stdio_src #define jpeg_stdio_src jpeg12_stdio_src
#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
#define jpeg_mem_dest jpeg12_mem_dest #define jpeg_mem_dest jpeg12_mem_dest
#define jpeg_mem_src jpeg12_mem_src #define jpeg_mem_src jpeg12_mem_src
#endif
#define jpeg_set_defaults jpeg12_set_defaults #define jpeg_set_defaults jpeg12_set_defaults
#define jpeg_set_colorspace jpeg12_set_colorspace #define jpeg_set_colorspace jpeg12_set_colorspace

View File

@@ -103,8 +103,7 @@ broader range of users and developers.
#--> -DWITH_12BIT=@WITH_12BIT@ -DWITH_ARITH_DEC=@WITH_ARITH_DEC@ \ #--> -DWITH_12BIT=@WITH_12BIT@ -DWITH_ARITH_DEC=@WITH_ARITH_DEC@ \
#--> -DWITH_ARITH_ENC=@WITH_ARITH_ENC@ -DWITH_JAVA=@WITH_JAVA@ \ #--> -DWITH_ARITH_ENC=@WITH_ARITH_ENC@ -DWITH_JAVA=@WITH_JAVA@ \
#--> -DWITH_JPEG7=@WITH_JPEG7@ -DWITH_JPEG8=@WITH_JPEG8@ \ #--> -DWITH_JPEG7=@WITH_JPEG7@ -DWITH_JPEG8=@WITH_JPEG8@ \
#--> -DWITH_MEM_SRCDST=@WITH_MEM_SRCDST@ -DWITH_SIMD=@WITH_SIMD@ \ #--> -DWITH_SIMD=@WITH_SIMD@ -DWITH_TURBOJPEG=@WITH_TURBOJPEG@ .
#--> -DWITH_TURBOJPEG=@WITH_TURBOJPEG@ .
#-->make DESTDIR=$RPM_BUILD_ROOT #-->make DESTDIR=$RPM_BUILD_ROOT
%install %install

View File

@@ -33,11 +33,7 @@ if(WITH_SIMD AND (MSVC_IDE OR XCODE))
endif() endif()
if(WIN32) if(WIN32)
if(WITH_MEM_SRCDST) set(DEFFILE ../win/jpeg${SO_MAJOR_VERSION}.def)
set(DEFFILE ../win/jpeg${SO_MAJOR_VERSION}-memsrcdst.def)
else()
set(DEFFILE ../win/jpeg${SO_MAJOR_VERSION}.def)
endif()
endif() endif()
if(MSVC) if(MSVC)
configure_file(${CMAKE_SOURCE_DIR}/win/jpeg.rc.in configure_file(${CMAKE_SOURCE_DIR}/win/jpeg.rc.in
@@ -72,11 +68,7 @@ endif()
if(WITH_12BIT) if(WITH_12BIT)
if(WIN32) if(WIN32)
if(WITH_MEM_SRCDST) set(DEFFILE ../win/jpeg12-${SO_MAJOR_VERSION}.def)
set(DEFFILE ../win/jpeg12-${SO_MAJOR_VERSION}-memsrcdst.def)
else()
set(DEFFILE ../win/jpeg12-${SO_MAJOR_VERSION}.def)
endif()
endif() endif()
add_library(jpeg12 SHARED ${JPEG12_SRCS} ${DEFFILE} ../jsimd_none.c) add_library(jpeg12 SHARED ${JPEG12_SRCS} ${DEFFILE} ../jsimd_none.c)
set_property(TARGET jpeg12 PROPERTY COMPILE_FLAGS "-DBITS_IN_JSAMPLE=12") set_property(TARGET jpeg12 PROPERTY COMPILE_FLAGS "-DBITS_IN_JSAMPLE=12")

View File

@@ -1,108 +0,0 @@
EXPORTS
j12copy_block_row @ 1 ;
j12copy_sample_rows @ 2 ;
j12div_round_up @ 3 ;
j12init_1pass_quantizer @ 4 ;
j12init_2pass_quantizer @ 5 ;
j12init_c_coef_controller @ 6 ;
j12init_c_main_controller @ 7 ;
j12init_c_master_control @ 8 ;
j12init_c_prep_controller @ 9 ;
j12init_color_converter @ 10 ;
j12init_color_deconverter @ 11 ;
j12init_compress_master @ 12 ;
j12init_d_coef_controller @ 13 ;
j12init_d_main_controller @ 14 ;
j12init_d_post_controller @ 15 ;
j12init_downsampler @ 16 ;
j12init_forward_dct @ 17 ;
j12init_huff_decoder @ 18 ;
j12init_huff_encoder @ 19 ;
j12init_input_controller @ 20 ;
j12init_inverse_dct @ 21 ;
j12init_marker_reader @ 22 ;
j12init_marker_writer @ 23 ;
j12init_master_decompress @ 24 ;
j12init_memory_mgr @ 25 ;
j12init_merged_upsampler @ 26 ;
j12init_phuff_decoder @ 27 ;
j12init_phuff_encoder @ 28 ;
j12init_upsampler @ 29 ;
jpeg12_CreateCompress @ 30 ;
jpeg12_CreateDecompress @ 31 ;
jpeg12_abort @ 32 ;
jpeg12_abort_compress @ 33 ;
jpeg12_abort_decompress @ 34 ;
jpeg12_add_quant_table @ 35 ;
jpeg12_alloc_huff_table @ 36 ;
jpeg12_alloc_quant_table @ 37 ;
jpeg12_calc_output_dimensions @ 38 ;
jpeg12_consume_input @ 39 ;
jpeg12_copy_critical_parameters @ 40 ;
jpeg12_default_colorspace @ 41 ;
jpeg12_destroy @ 42 ;
jpeg12_destroy_compress @ 43 ;
jpeg12_destroy_decompress @ 44 ;
jpeg12_fdct_float @ 45 ;
jpeg12_fdct_ifast @ 46 ;
jpeg12_fdct_islow @ 47 ;
jpeg12_fill_bit_buffer @ 48 ;
jpeg12_finish_compress @ 49 ;
jpeg12_finish_decompress @ 50 ;
jpeg12_finish_output @ 51 ;
jpeg12_free_large @ 52 ;
jpeg12_free_small @ 53 ;
jpeg12_gen_optimal_table @ 54 ;
jpeg12_get_large @ 55 ;
jpeg12_get_small @ 56 ;
jpeg12_has_multiple_scans @ 57 ;
jpeg12_huff_decode @ 58 ;
jpeg12_idct_1x1 @ 59 ;
jpeg12_idct_2x2 @ 60 ;
jpeg12_idct_4x4 @ 61 ;
jpeg12_idct_float @ 62 ;
jpeg12_idct_ifast @ 63 ;
jpeg12_idct_islow @ 64 ;
jpeg12_input_complete @ 65 ;
jpeg12_make_c_derived_tbl @ 66 ;
jpeg12_make_d_derived_tbl @ 67 ;
jpeg12_mem_available @ 68 ;
jpeg12_mem_init @ 69 ;
jpeg12_mem_term @ 70 ;
jpeg12_new_colormap @ 71 ;
jpeg12_open_backing_store @ 72 ;
jpeg12_quality_scaling @ 73 ;
jpeg12_read_coefficients @ 74 ;
jpeg12_read_header @ 75 ;
jpeg12_read_raw_data @ 76 ;
jpeg12_read_scanlines @ 77 ;
jpeg12_resync_to_restart @ 78 ;
jpeg12_save_markers @ 79 ;
jpeg12_set_colorspace @ 80 ;
jpeg12_set_defaults @ 81 ;
jpeg12_set_linear_quality @ 82 ;
jpeg12_set_marker_processor @ 83 ;
jpeg12_set_quality @ 84 ;
jpeg12_simple_progression @ 85 ;
jpeg12_start_compress @ 86 ;
jpeg12_start_decompress @ 87 ;
jpeg12_start_output @ 88 ;
jpeg12_std_error @ 89 ;
jpeg12_stdio_dest @ 90 ;
jpeg12_stdio_src @ 91 ;
jpeg12_suppress_tables @ 92 ;
jpeg12_write_coefficients @ 93 ;
jpeg12_write_m_byte @ 94 ;
jpeg12_write_m_header @ 95 ;
jpeg12_write_marker @ 96 ;
jpeg12_write_raw_data @ 97 ;
jpeg12_write_scanlines @ 98 ;
jpeg12_write_tables @ 99 ;
j12round_up @ 100 ;
j12zero_far @ 101 ;
jpeg12_mem_dest @ 102 ;
jpeg12_mem_src @ 103 ;
jpeg12_skip_scanlines @ 104 ;
jpeg12_crop_scanline @ 105 ;
jpeg12_read_icc_profile @ 106 ;
jpeg12_write_icc_profile @ 107 ;

View File

@@ -100,7 +100,9 @@ EXPORTS
jpeg12_write_tables @ 99 ; jpeg12_write_tables @ 99 ;
j12round_up @ 100 ; j12round_up @ 100 ;
j12zero_far @ 101 ; j12zero_far @ 101 ;
jpeg12_skip_scanlines @ 102 ; jpeg12_mem_dest @ 102 ;
jpeg12_crop_scanline @ 103 ; jpeg12_mem_src @ 103 ;
jpeg12_read_icc_profile @ 104 ; jpeg12_skip_scanlines @ 104 ;
jpeg12_write_icc_profile @ 105 ; jpeg12_crop_scanline @ 105 ;
jpeg12_read_icc_profile @ 106 ;
jpeg12_write_icc_profile @ 107 ;

View File

@@ -1,110 +0,0 @@
EXPORTS
j12copy_block_row @ 1 ;
j12copy_sample_rows @ 2 ;
j12div_round_up @ 3 ;
j12init_1pass_quantizer @ 4 ;
j12init_2pass_quantizer @ 5 ;
j12init_c_coef_controller @ 6 ;
j12init_c_main_controller @ 7 ;
j12init_c_master_control @ 8 ;
j12init_c_prep_controller @ 9 ;
j12init_color_converter @ 10 ;
j12init_color_deconverter @ 11 ;
j12init_compress_master @ 12 ;
j12init_d_coef_controller @ 13 ;
j12init_d_main_controller @ 14 ;
j12init_d_post_controller @ 15 ;
j12init_downsampler @ 16 ;
j12init_forward_dct @ 17 ;
j12init_huff_decoder @ 18 ;
j12init_huff_encoder @ 19 ;
j12init_input_controller @ 20 ;
j12init_inverse_dct @ 21 ;
j12init_marker_reader @ 22 ;
j12init_marker_writer @ 23 ;
j12init_master_decompress @ 24 ;
j12init_memory_mgr @ 25 ;
j12init_merged_upsampler @ 26 ;
j12init_phuff_decoder @ 27 ;
j12init_phuff_encoder @ 28 ;
j12init_upsampler @ 29 ;
jpeg12_CreateCompress @ 30 ;
jpeg12_CreateDecompress @ 31 ;
jpeg12_abort @ 32 ;
jpeg12_abort_compress @ 33 ;
jpeg12_abort_decompress @ 34 ;
jpeg12_add_quant_table @ 35 ;
jpeg12_alloc_huff_table @ 36 ;
jpeg12_alloc_quant_table @ 37 ;
jpeg12_calc_jpeg_dimensions @ 38 ;
jpeg12_calc_output_dimensions @ 39 ;
jpeg12_consume_input @ 40 ;
jpeg12_copy_critical_parameters @ 41 ;
jpeg12_default_colorspace @ 42 ;
jpeg12_default_qtables @ 43 ;
jpeg12_destroy @ 44 ;
jpeg12_destroy_compress @ 45 ;
jpeg12_destroy_decompress @ 46 ;
jpeg12_fdct_float @ 47 ;
jpeg12_fdct_ifast @ 48 ;
jpeg12_fdct_islow @ 49 ;
jpeg12_fill_bit_buffer @ 50 ;
jpeg12_finish_compress @ 51 ;
jpeg12_finish_decompress @ 52 ;
jpeg12_finish_output @ 53 ;
jpeg12_free_large @ 54 ;
jpeg12_free_small @ 55 ;
jpeg12_gen_optimal_table @ 56 ;
jpeg12_get_large @ 57 ;
jpeg12_get_small @ 58 ;
jpeg12_has_multiple_scans @ 59 ;
jpeg12_huff_decode @ 60 ;
jpeg12_idct_1x1 @ 61 ;
jpeg12_idct_2x2 @ 62 ;
jpeg12_idct_4x4 @ 63 ;
jpeg12_idct_float @ 64 ;
jpeg12_idct_ifast @ 65 ;
jpeg12_idct_islow @ 66 ;
jpeg12_input_complete @ 67 ;
jpeg12_make_c_derived_tbl @ 68 ;
jpeg12_make_d_derived_tbl @ 69 ;
jpeg12_mem_available @ 70 ;
jpeg12_mem_init @ 71 ;
jpeg12_mem_term @ 72 ;
jpeg12_new_colormap @ 73 ;
jpeg12_open_backing_store @ 74 ;
jpeg12_quality_scaling @ 75 ;
jpeg12_read_coefficients @ 76 ;
jpeg12_read_header @ 77 ;
jpeg12_read_raw_data @ 78 ;
jpeg12_read_scanlines @ 79 ;
jpeg12_resync_to_restart @ 80 ;
jpeg12_save_markers @ 81 ;
jpeg12_set_colorspace @ 82 ;
jpeg12_set_defaults @ 83 ;
jpeg12_set_linear_quality @ 84 ;
jpeg12_set_marker_processor @ 85 ;
jpeg12_set_quality @ 86 ;
jpeg12_simple_progression @ 87 ;
jpeg12_start_compress @ 88 ;
jpeg12_start_decompress @ 89 ;
jpeg12_start_output @ 90 ;
jpeg12_std_error @ 91 ;
jpeg12_stdio_dest @ 92 ;
jpeg12_stdio_src @ 93 ;
jpeg12_suppress_tables @ 94 ;
jpeg12_write_coefficients @ 95 ;
jpeg12_write_m_byte @ 96 ;
jpeg12_write_m_header @ 97 ;
jpeg12_write_marker @ 98 ;
jpeg12_write_raw_data @ 99 ;
jpeg12_write_scanlines @ 100 ;
jpeg12_write_tables @ 101 ;
j12round_up @ 102 ;
j12zero_far @ 103 ;
jpeg12_mem_dest @ 104 ;
jpeg12_mem_src @ 105 ;
jpeg12_skip_scanlines @ 106 ;
jpeg12_crop_scanline @ 107 ;
jpeg12_read_icc_profile @ 108 ;
jpeg12_write_icc_profile @ 109 ;

View File

@@ -102,7 +102,9 @@ EXPORTS
jpeg12_write_tables @ 101 ; jpeg12_write_tables @ 101 ;
j12round_up @ 102 ; j12round_up @ 102 ;
j12zero_far @ 103 ; j12zero_far @ 103 ;
jpeg12_skip_scanlines @ 104 ; jpeg12_mem_dest @ 104 ;
jpeg12_crop_scanline @ 105 ; jpeg12_mem_src @ 105 ;
jpeg12_read_icc_profile @ 106 ; jpeg12_skip_scanlines @ 106 ;
jpeg12_write_icc_profile @ 107 ; jpeg12_crop_scanline @ 107 ;
jpeg12_read_icc_profile @ 108 ;
jpeg12_write_icc_profile @ 109 ;

View File

@@ -1,108 +0,0 @@
EXPORTS
jcopy_block_row @ 1 ;
jcopy_sample_rows @ 2 ;
jdiv_round_up @ 3 ;
jinit_1pass_quantizer @ 4 ;
jinit_2pass_quantizer @ 5 ;
jinit_c_coef_controller @ 6 ;
jinit_c_main_controller @ 7 ;
jinit_c_master_control @ 8 ;
jinit_c_prep_controller @ 9 ;
jinit_color_converter @ 10 ;
jinit_color_deconverter @ 11 ;
jinit_compress_master @ 12 ;
jinit_d_coef_controller @ 13 ;
jinit_d_main_controller @ 14 ;
jinit_d_post_controller @ 15 ;
jinit_downsampler @ 16 ;
jinit_forward_dct @ 17 ;
jinit_huff_decoder @ 18 ;
jinit_huff_encoder @ 19 ;
jinit_input_controller @ 20 ;
jinit_inverse_dct @ 21 ;
jinit_marker_reader @ 22 ;
jinit_marker_writer @ 23 ;
jinit_master_decompress @ 24 ;
jinit_memory_mgr @ 25 ;
jinit_merged_upsampler @ 26 ;
jinit_phuff_decoder @ 27 ;
jinit_phuff_encoder @ 28 ;
jinit_upsampler @ 29 ;
jpeg_CreateCompress @ 30 ;
jpeg_CreateDecompress @ 31 ;
jpeg_abort @ 32 ;
jpeg_abort_compress @ 33 ;
jpeg_abort_decompress @ 34 ;
jpeg_add_quant_table @ 35 ;
jpeg_alloc_huff_table @ 36 ;
jpeg_alloc_quant_table @ 37 ;
jpeg_calc_output_dimensions @ 38 ;
jpeg_consume_input @ 39 ;
jpeg_copy_critical_parameters @ 40 ;
jpeg_default_colorspace @ 41 ;
jpeg_destroy @ 42 ;
jpeg_destroy_compress @ 43 ;
jpeg_destroy_decompress @ 44 ;
jpeg_fdct_float @ 45 ;
jpeg_fdct_ifast @ 46 ;
jpeg_fdct_islow @ 47 ;
jpeg_fill_bit_buffer @ 48 ;
jpeg_finish_compress @ 49 ;
jpeg_finish_decompress @ 50 ;
jpeg_finish_output @ 51 ;
jpeg_free_large @ 52 ;
jpeg_free_small @ 53 ;
jpeg_gen_optimal_table @ 54 ;
jpeg_get_large @ 55 ;
jpeg_get_small @ 56 ;
jpeg_has_multiple_scans @ 57 ;
jpeg_huff_decode @ 58 ;
jpeg_idct_1x1 @ 59 ;
jpeg_idct_2x2 @ 60 ;
jpeg_idct_4x4 @ 61 ;
jpeg_idct_float @ 62 ;
jpeg_idct_ifast @ 63 ;
jpeg_idct_islow @ 64 ;
jpeg_input_complete @ 65 ;
jpeg_make_c_derived_tbl @ 66 ;
jpeg_make_d_derived_tbl @ 67 ;
jpeg_mem_available @ 68 ;
jpeg_mem_init @ 69 ;
jpeg_mem_term @ 70 ;
jpeg_new_colormap @ 71 ;
jpeg_open_backing_store @ 72 ;
jpeg_quality_scaling @ 73 ;
jpeg_read_coefficients @ 74 ;
jpeg_read_header @ 75 ;
jpeg_read_raw_data @ 76 ;
jpeg_read_scanlines @ 77 ;
jpeg_resync_to_restart @ 78 ;
jpeg_save_markers @ 79 ;
jpeg_set_colorspace @ 80 ;
jpeg_set_defaults @ 81 ;
jpeg_set_linear_quality @ 82 ;
jpeg_set_marker_processor @ 83 ;
jpeg_set_quality @ 84 ;
jpeg_simple_progression @ 85 ;
jpeg_start_compress @ 86 ;
jpeg_start_decompress @ 87 ;
jpeg_start_output @ 88 ;
jpeg_std_error @ 89 ;
jpeg_stdio_dest @ 90 ;
jpeg_stdio_src @ 91 ;
jpeg_suppress_tables @ 92 ;
jpeg_write_coefficients @ 93 ;
jpeg_write_m_byte @ 94 ;
jpeg_write_m_header @ 95 ;
jpeg_write_marker @ 96 ;
jpeg_write_raw_data @ 97 ;
jpeg_write_scanlines @ 98 ;
jpeg_write_tables @ 99 ;
jround_up @ 100 ;
jzero_far @ 101 ;
jpeg_mem_dest @ 102 ;
jpeg_mem_src @ 103 ;
jpeg_skip_scanlines @ 104 ;
jpeg_crop_scanline @ 105 ;
jpeg_read_icc_profile @ 106 ;
jpeg_write_icc_profile @ 107 ;

View File

@@ -100,7 +100,9 @@ EXPORTS
jpeg_write_tables @ 99 ; jpeg_write_tables @ 99 ;
jround_up @ 100 ; jround_up @ 100 ;
jzero_far @ 101 ; jzero_far @ 101 ;
jpeg_skip_scanlines @ 102 ; jpeg_mem_dest @ 102 ;
jpeg_crop_scanline @ 103 ; jpeg_mem_src @ 103 ;
jpeg_read_icc_profile @ 104 ; jpeg_skip_scanlines @ 104 ;
jpeg_write_icc_profile @ 105 ; jpeg_crop_scanline @ 105 ;
jpeg_read_icc_profile @ 106 ;
jpeg_write_icc_profile @ 107 ;

View File

@@ -1,110 +0,0 @@
EXPORTS
jcopy_block_row @ 1 ;
jcopy_sample_rows @ 2 ;
jdiv_round_up @ 3 ;
jinit_1pass_quantizer @ 4 ;
jinit_2pass_quantizer @ 5 ;
jinit_c_coef_controller @ 6 ;
jinit_c_main_controller @ 7 ;
jinit_c_master_control @ 8 ;
jinit_c_prep_controller @ 9 ;
jinit_color_converter @ 10 ;
jinit_color_deconverter @ 11 ;
jinit_compress_master @ 12 ;
jinit_d_coef_controller @ 13 ;
jinit_d_main_controller @ 14 ;
jinit_d_post_controller @ 15 ;
jinit_downsampler @ 16 ;
jinit_forward_dct @ 17 ;
jinit_huff_decoder @ 18 ;
jinit_huff_encoder @ 19 ;
jinit_input_controller @ 20 ;
jinit_inverse_dct @ 21 ;
jinit_marker_reader @ 22 ;
jinit_marker_writer @ 23 ;
jinit_master_decompress @ 24 ;
jinit_memory_mgr @ 25 ;
jinit_merged_upsampler @ 26 ;
jinit_phuff_decoder @ 27 ;
jinit_phuff_encoder @ 28 ;
jinit_upsampler @ 29 ;
jpeg_CreateCompress @ 30 ;
jpeg_CreateDecompress @ 31 ;
jpeg_abort @ 32 ;
jpeg_abort_compress @ 33 ;
jpeg_abort_decompress @ 34 ;
jpeg_add_quant_table @ 35 ;
jpeg_alloc_huff_table @ 36 ;
jpeg_alloc_quant_table @ 37 ;
jpeg_calc_jpeg_dimensions @ 38 ;
jpeg_calc_output_dimensions @ 39 ;
jpeg_consume_input @ 40 ;
jpeg_copy_critical_parameters @ 41 ;
jpeg_default_colorspace @ 42 ;
jpeg_default_qtables @ 43 ;
jpeg_destroy @ 44 ;
jpeg_destroy_compress @ 45 ;
jpeg_destroy_decompress @ 46 ;
jpeg_fdct_float @ 47 ;
jpeg_fdct_ifast @ 48 ;
jpeg_fdct_islow @ 49 ;
jpeg_fill_bit_buffer @ 50 ;
jpeg_finish_compress @ 51 ;
jpeg_finish_decompress @ 52 ;
jpeg_finish_output @ 53 ;
jpeg_free_large @ 54 ;
jpeg_free_small @ 55 ;
jpeg_gen_optimal_table @ 56 ;
jpeg_get_large @ 57 ;
jpeg_get_small @ 58 ;
jpeg_has_multiple_scans @ 59 ;
jpeg_huff_decode @ 60 ;
jpeg_idct_1x1 @ 61 ;
jpeg_idct_2x2 @ 62 ;
jpeg_idct_4x4 @ 63 ;
jpeg_idct_float @ 64 ;
jpeg_idct_ifast @ 65 ;
jpeg_idct_islow @ 66 ;
jpeg_input_complete @ 67 ;
jpeg_make_c_derived_tbl @ 68 ;
jpeg_make_d_derived_tbl @ 69 ;
jpeg_mem_available @ 70 ;
jpeg_mem_init @ 71 ;
jpeg_mem_term @ 72 ;
jpeg_new_colormap @ 73 ;
jpeg_open_backing_store @ 74 ;
jpeg_quality_scaling @ 75 ;
jpeg_read_coefficients @ 76 ;
jpeg_read_header @ 77 ;
jpeg_read_raw_data @ 78 ;
jpeg_read_scanlines @ 79 ;
jpeg_resync_to_restart @ 80 ;
jpeg_save_markers @ 81 ;
jpeg_set_colorspace @ 82 ;
jpeg_set_defaults @ 83 ;
jpeg_set_linear_quality @ 84 ;
jpeg_set_marker_processor @ 85 ;
jpeg_set_quality @ 86 ;
jpeg_simple_progression @ 87 ;
jpeg_start_compress @ 88 ;
jpeg_start_decompress @ 89 ;
jpeg_start_output @ 90 ;
jpeg_std_error @ 91 ;
jpeg_stdio_dest @ 92 ;
jpeg_stdio_src @ 93 ;
jpeg_suppress_tables @ 94 ;
jpeg_write_coefficients @ 95 ;
jpeg_write_m_byte @ 96 ;
jpeg_write_m_header @ 97 ;
jpeg_write_marker @ 98 ;
jpeg_write_raw_data @ 99 ;
jpeg_write_scanlines @ 100 ;
jpeg_write_tables @ 101 ;
jround_up @ 102 ;
jzero_far @ 103 ;
jpeg_mem_dest @ 104 ;
jpeg_mem_src @ 105 ;
jpeg_skip_scanlines @ 106 ;
jpeg_crop_scanline @ 107 ;
jpeg_read_icc_profile @ 108 ;
jpeg_write_icc_profile @ 109 ;

View File

@@ -102,7 +102,9 @@ EXPORTS
jpeg_write_tables @ 101 ; jpeg_write_tables @ 101 ;
jround_up @ 102 ; jround_up @ 102 ;
jzero_far @ 103 ; jzero_far @ 103 ;
jpeg_skip_scanlines @ 104 ; jpeg_mem_dest @ 104 ;
jpeg_crop_scanline @ 105 ; jpeg_mem_src @ 105 ;
jpeg_read_icc_profile @ 106 ; jpeg_skip_scanlines @ 106 ;
jpeg_write_icc_profile @ 107 ; jpeg_crop_scanline @ 107 ;
jpeg_read_icc_profile @ 108 ;
jpeg_write_icc_profile @ 109 ;