From 41184f9d8aceb7ce3031e187ead6c229ced75339 Mon Sep 17 00:00:00 2001 From: giantpune Date: Sun, 16 Jan 2011 16:44:07 +0000 Subject: [PATCH] *THP player: add libjpeg stuff for win32 git-svn-id: http://wiiqt.googlecode.com/svn/trunk@56 389f4c8b-5dfe-645f-db0e-df882bc27289 --- thp_player/jpeg62.dll | Bin 0 -> 127488 bytes thp_player/libpng/include/jconfig.h | 58 ++ thp_player/libpng/include/jerror.h | 303 +++++++ thp_player/libpng/include/jmorecfg.h | 426 ++++++++++ thp_player/libpng/include/jpeglib.h | 1110 ++++++++++++++++++++++++++ thp_player/thp_player.pro | 8 +- 6 files changed, 1904 insertions(+), 1 deletion(-) create mode 100644 thp_player/jpeg62.dll create mode 100644 thp_player/libpng/include/jconfig.h create mode 100644 thp_player/libpng/include/jerror.h create mode 100644 thp_player/libpng/include/jmorecfg.h create mode 100644 thp_player/libpng/include/jpeglib.h diff --git a/thp_player/jpeg62.dll b/thp_player/jpeg62.dll new file mode 100644 index 0000000000000000000000000000000000000000..21c03d551647c2292734f7129106564b1074a17f GIT binary patch literal 127488 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 +/* Define "boolean" as unsigned char, not int, per Windows custom */ +# if !defined __RPCNDR_H__ || defined __MINGW32__ /* don't conflict if rpcndr.h already read */ +# ifndef boolean /* don't conflict if rpcndr.h already read */ + typedef unsigned char boolean; +# endif /* boolean */ +# endif /* __RPCNDR_H__ */ +# define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ +# define USE_WINDOWS_MESSAGEBOX 1 +#endif /* _WIN32 */ + +#undef void +#undef const +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +/* Define this if you get warnings about undefined structures. */ +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED +#define INLINE __inline__ +/* These are for configuring the JPEG memory manager. */ +#undef DEFAULT_MAX_MEM +#undef NO_MKTEMP + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#define RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE + +/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ +#undef PROGRESS_REPORT + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/thp_player/libpng/include/jerror.h b/thp_player/libpng/include/jerror.h new file mode 100644 index 0000000..fcdf6a8 --- /dev/null +++ b/thp_player/libpng/include/jerror.h @@ -0,0 +1,303 @@ +/* + * jerror.h + * + * Copyright (C) 1994-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the error and message codes for the JPEG library. + * Edit this file to add new codes, or to translate the message strings to + * some other language. + * A set of error-reporting macros are defined too. Some applications using + * the JPEG library may wish to include this file to get the error codes + * and/or the macros. + */ + +/* + * To define the enum list of message codes, include this file without + * defining macro JMESSAGE. To create a message string table, include it + * again with a suitable JMESSAGE definition (see jerror.c for an example). + */ +#ifndef JMESSAGE +#ifndef JERROR_H +/* First time through, define the enum list */ +#define JMAKE_ENUM_LIST +#else +/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ +#define JMESSAGE(code,string) +#endif /* JERROR_H */ +#endif /* JMESSAGE */ + +#ifdef JMAKE_ENUM_LIST + +typedef enum { + +#define JMESSAGE(code,string) code , + +#endif /* JMAKE_ENUM_LIST */ + +JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ + +/* For maintenance convenience, list is alphabetical by message code name */ +JMESSAGE(JERR_ARITH_NOTIMPL, + "Sorry, there are legal restrictions on arithmetic coding") +JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix") +JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix") +JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode") +JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS") +JMESSAGE(JERR_BAD_CROP_SPEC, "Invalid crop request") +JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range") +JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported") +JMESSAGE(JERR_BAD_DROP_SAMPLING, + "Component index %d: mismatching sampling ratio %d:%d, %d:%d, %c") +JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition") +JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace") +JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace") +JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length") +JMESSAGE(JERR_BAD_LIB_VERSION, + "Wrong JPEG library version: library is %d, caller expects %d") +JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan") +JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d") +JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d") +JMESSAGE(JERR_BAD_PROGRESSION, + "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d") +JMESSAGE(JERR_BAD_PROG_SCRIPT, + "Invalid progressive parameters at scan script entry %d") +JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors") +JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d") +JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d") +JMESSAGE(JERR_BAD_STRUCT_SIZE, + "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u") +JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access") +JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small") +JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here") +JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet") +JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d") +JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request") +JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d") +JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x") +JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d") +JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d") +JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)") +JMESSAGE(JERR_EMS_READ, "Read from EMS failed") +JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed") +JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan") +JMESSAGE(JERR_FILE_READ, "Input file read error") +JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?") +JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet") +JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow") +JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry") +JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels") +JMESSAGE(JERR_INPUT_EMPTY, "Empty input file") +JMESSAGE(JERR_INPUT_EOF, "Premature end of input file") +JMESSAGE(JERR_MISMATCHED_QUANT_TABLE, + "Cannot transcode due to multiple use of quantization table %d") +JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data") +JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change") +JMESSAGE(JERR_NOTIMPL, "Not implemented yet") +JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") +JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported") +JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined") +JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image") +JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined") +JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x") +JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)") +JMESSAGE(JERR_QUANT_COMPONENTS, + "Cannot quantize more than %d color components") +JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") +JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") +JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") +JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") +JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") +JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") +JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") +JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") +JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") +JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") +JMESSAGE(JERR_TFILE_WRITE, + "Write failed on temporary file --- out of disk space?") +JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines") +JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x") +JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up") +JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation") +JMESSAGE(JERR_XMS_READ, "Read from XMS failed") +JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed") +JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT) +JMESSAGE(JMSG_VERSION, JVERSION) +JMESSAGE(JTRC_16BIT_TABLES, + "Caution: quantization tables are too coarse for baseline JPEG") +JMESSAGE(JTRC_ADOBE, + "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d") +JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u") +JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u") +JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x") +JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x") +JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d") +JMESSAGE(JTRC_DRI, "Define Restart Interval %u") +JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u") +JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u") +JMESSAGE(JTRC_EOI, "End Of Image") +JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d") +JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d") +JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE, + "Warning: thumbnail image size does not match data length %u") +JMESSAGE(JTRC_JFIF_EXTENSION, + "JFIF extension marker: type 0x%02x, length %u") +JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image") +JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u") +JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x") +JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u") +JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors") +JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors") +JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization") +JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d") +JMESSAGE(JTRC_RST, "RST%d") +JMESSAGE(JTRC_SMOOTH_NOTIMPL, + "Smoothing not supported with nonstandard sampling ratios") +JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d") +JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d") +JMESSAGE(JTRC_SOI, "Start of Image") +JMESSAGE(JTRC_SOS, "Start Of Scan: %d components") +JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d") +JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d") +JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s") +JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s") +JMESSAGE(JTRC_THUMB_JPEG, + "JFIF extension marker: JPEG-compressed thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_PALETTE, + "JFIF extension marker: palette thumbnail image, length %u") +JMESSAGE(JTRC_THUMB_RGB, + "JFIF extension marker: RGB thumbnail image, length %u") +JMESSAGE(JTRC_UNKNOWN_IDS, + "Unrecognized component IDs %d %d %d, assuming YCbCr") +JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u") +JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u") +JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d") +JMESSAGE(JWRN_BOGUS_PROGRESSION, + "Inconsistent progression sequence for component %d coefficient %d") +JMESSAGE(JWRN_EXTRANEOUS_DATA, + "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x") +JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment") +JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code") +JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d") +JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file") +JMESSAGE(JWRN_MUST_RESYNC, + "Corrupt JPEG data: found marker 0x%02x instead of RST%d") +JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") +JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") + +#ifdef JMAKE_ENUM_LIST + + JMSG_LASTMSGCODE +} J_MESSAGE_CODE; + +#undef JMAKE_ENUM_LIST +#endif /* JMAKE_ENUM_LIST */ + +/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ +#undef JMESSAGE + + +#ifndef JERROR_H +#define JERROR_H + +/* Macros to simplify using the error and trace message stuff */ +/* The first parameter is either type of cinfo pointer */ + +/* Fatal errors (print message and exit) */ +#define ERREXIT(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT3(cinfo,code,p1,p2,p3) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT4(cinfo,code,p1,p2,p3,p4) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (cinfo)->err->msg_parm.i[3] = (p4), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXIT6(cinfo,code,p1,p2,p3,p4,p5,p6) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (cinfo)->err->msg_parm.i[2] = (p3), \ + (cinfo)->err->msg_parm.i[3] = (p4), \ + (cinfo)->err->msg_parm.i[4] = (p5), \ + (cinfo)->err->msg_parm.i[5] = (p6), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) +#define ERREXITS(cinfo,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) + +#define MAKESTMT(stuff) do { stuff } while (0) + +/* Nonfatal errors (we can keep going, but the data is probably corrupt) */ +#define WARNMS(cinfo,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS1(cinfo,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) +#define WARNMS2(cinfo,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) + +/* Informational/debugging messages */ +#define TRACEMS(cinfo,lvl,code) \ + ((cinfo)->err->msg_code = (code), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS1(cinfo,lvl,code,p1) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS2(cinfo,lvl,code,p1,p2) \ + ((cinfo)->err->msg_code = (code), \ + (cinfo)->err->msg_parm.i[0] = (p1), \ + (cinfo)->err->msg_parm.i[1] = (p2), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) +#define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \ + MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ + _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ + _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \ + (cinfo)->err->msg_code = (code); \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) +#define TRACEMSS(cinfo,lvl,code,str) \ + ((cinfo)->err->msg_code = (code), \ + strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ + (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) + +#endif /* JERROR_H */ diff --git a/thp_player/libpng/include/jmorecfg.h b/thp_player/libpng/include/jmorecfg.h new file mode 100644 index 0000000..30178ac --- /dev/null +++ b/thp_player/libpng/include/jmorecfg.h @@ -0,0 +1,426 @@ +/* + * jmorecfg.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains additional configuration options that customize the + * JPEG software for special applications or support machine-dependent + * optimizations. Most users will not need to touch this file. + */ + + +/* + * Define BITS_IN_JSAMPLE as either + * 8 for 8-bit sample values (the usual setting) + * 12 for 12-bit sample values + * Only 8 and 12 are legal data precisions for lossy JPEG according to the + * JPEG standard, and the IJG code does not support anything else! + * We do not support run-time selection of data precision, sorry. + */ + +#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ + +#if (defined (_MSC_VER) && (_MSC_VER >= 800)) +#define HAVE_UNSIGNED_CHAR +#define HAVE_ALL_INTS +#define EXTERN(type) extern type __cdecl +#endif + +/* + * Maximum number of components (color channels) allowed in JPEG image. + * To meet the letter of the JPEG spec, set this to 255. However, darn + * few applications need more than 4 channels (maybe 5 for CMYK + alpha + * mask). We recommend 10 as a reasonable compromise; use 4 if you are + * really short on memory. (Each allowed component costs a hundred or so + * bytes of storage, whether actually used in an image or not.) + */ + +#define MAX_COMPONENTS 10 /* maximum number of image components */ + + +/* + * Basic data types. + * You may need to change these if you have a machine with unusual data + * type sizes; for example, "char" not 8 bits, "short" not 16 bits, + * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, + * but it had better be at least 16. + */ + +/* Representation of a single sample (pixel element value). + * We frequently allocate large arrays of these, so it's important to keep + * them small. But if you have memory to burn and access to char or short + * arrays is very slow on your hardware, you might want to change these. + */ + +#if BITS_IN_JSAMPLE == 8 +/* JSAMPLE should be the smallest type that will hold the values 0..255. + * You can use a signed char by having GETJSAMPLE mask it with 0xFF. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JSAMPLE; +#ifdef CHAR_IS_UNSIGNED +#define GETJSAMPLE(value) ((int) (value)) +#else +#define GETJSAMPLE(value) ((int) (value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + +#define MAXJSAMPLE 255 +#define CENTERJSAMPLE 128 + +#endif /* BITS_IN_JSAMPLE == 8 */ + + +#if BITS_IN_JSAMPLE == 12 +/* JSAMPLE should be the smallest type that will hold the values 0..4095. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 4095 +#define CENTERJSAMPLE 2048 + +#endif /* BITS_IN_JSAMPLE == 12 */ + + +/* Representation of a DCT frequency coefficient. + * This should be a signed value of at least 16 bits; "short" is usually OK. + * Again, we allocate large arrays of these, but you can change to int + * if you have memory to burn and "short" is really slow. + */ + +typedef short JCOEF; + + +/* Compressed datastreams are represented as arrays of JOCTET. + * These must be EXACTLY 8 bits wide, at least once they are written to + * external storage. Note that when using the stdio data source/destination + * managers, this is also the data type passed to fread/fwrite. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JOCTET; +#define GETJOCTET(value) (value) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JOCTET; +#ifdef CHAR_IS_UNSIGNED +#define GETJOCTET(value) (value) +#else +#define GETJOCTET(value) ((value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + + +/* These typedefs are used for various table entries and so forth. + * They must be at least as wide as specified; but making them too big + * won't cost a huge amount of memory, so we don't provide special + * extraction code like we did for JSAMPLE. (In other words, these + * typedefs live at a different point on the speed/space tradeoff curve.) + */ + +/* UINT8 must hold at least the values 0..255. */ +#ifndef HAVE_ALL_INTS + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char UINT8; +#else /* not HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char UINT8; +#else /* not CHAR_IS_UNSIGNED */ +typedef short UINT8; +#endif /* CHAR_IS_UNSIGNED */ +#endif /* HAVE_UNSIGNED_CHAR */ + +/* UINT16 must hold at least the values 0..65535. */ + +#ifdef HAVE_UNSIGNED_SHORT +typedef unsigned short UINT16; +#else /* not HAVE_UNSIGNED_SHORT */ +typedef unsigned int UINT16; +#endif /* HAVE_UNSIGNED_SHORT */ + +/* INT16 must hold at least the values -32768..32767. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ +typedef short INT16; +#endif + +/* INT32 must hold at least signed 32-bit values. */ + +#if !defined(XMD_H) && !defined(_WIN32) /* X11/xmd.h correctly defines INT32 */ +typedef long INT32; +#endif + +#endif /* HAVE_ALL_INTS */ + +/* Datatype used for image dimensions. The JPEG standard only supports + * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore + * "unsigned int" is sufficient on all machines. However, if you need to + * handle larger images and you don't mind deviating from the spec, you + * can change this datatype. + */ + +typedef unsigned int JDIMENSION; + +#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ + + +/* These macros are used in all function definitions and extern declarations. + * You could modify them if you need to change function linkage conventions; + * in particular, you'll need to do that to make the library a Windows DLL. + * Another application is to make all functions global for use with debuggers + * or code profilers that require it. + */ + +#ifdef _WIN32 +# if defined(ALL_STATIC) +# if defined(JPEG_DLL) +# undef JPEG_DLL +# endif +# if !defined(JPEG_STATIC) +# define JPEG_STATIC +# endif +# endif +# if defined(JPEG_DLL) +# if defined(JPEG_STATIC) +# undef JPEG_STATIC +# endif +# endif +# if defined(JPEG_DLL) +/* building a DLL */ +# define JPEG_IMPEXP __declspec(dllexport) +# elif defined(JPEG_STATIC) +/* building or linking to a static library */ +# define JPEG_IMPEXP +# else +/* linking to the DLL */ +# define JPEG_IMPEXP __declspec(dllimport) +# endif +# if !defined(JPEG_API) +# define JPEG_API __cdecl +# endif +/* The only remaining magic that is necessary for cygwin */ +#elif defined(__CYGWIN__) +# if !defined(JPEG_IMPEXP) +# define JPEG_IMPEXP +# endif +# if !defined(JPEG_API) +# define JPEG_API __cdecl +# endif +#endif + +/* Ensure our magic doesn't hurt other platforms */ +#if !defined(JPEG_IMPEXP) +# define JPEG_IMPEXP +#endif +#if !defined(JPEG_API) +# define JPEG_API +#endif + +/* a function called through method pointers: */ +#define METHODDEF(type) static type +/* a function used only in its module: */ +#define LOCAL(type) static type +/* a function referenced thru EXTERNs: */ +#define GLOBAL(type) type JPEG_API +/* a reference to a GLOBAL function: */ +#ifndef EXTERN +# define EXTERN(type) extern JPEG_IMPEXP type JPEG_API +/* a reference to a "GLOBAL" function exported by sourcefiles of utility progs */ +#endif /* EXTERN */ +#define EXTERN_1(type) extern type JPEG_API + + +/* This macro is used to declare a "method", that is, a function pointer. + * We want to supply prototype parameters if the compiler can cope. + * Note that the arglist parameter must be parenthesized! + * Again, you can customize this if you need special linkage keywords. + */ + +#ifdef HAVE_PROTOTYPES +#define JMETHOD(type,methodname,arglist) type (*methodname) arglist +#else +#define JMETHOD(type,methodname,arglist) type (*methodname) () +#endif + + +/* Here is the pseudo-keyword for declaring pointers that must be "far" + * on 80x86 machines. Most of the specialized coding for 80x86 is handled + * by just saying "FAR *" where such a pointer is needed. In a few places + * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. + */ + +/* jmorecfg.h line 220 */ +/* HJH modification: several of the windows header files already define FAR + because of this, the code below was changed so that it only tinkers with + the FAR define if FAR is still undefined */ +#ifndef FAR + #ifdef NEED_FAR_POINTERS + #define FAR far + #else + #define FAR + #endif +#endif + + +/* + * On a few systems, type boolean and/or its values FALSE, TRUE may appear + * in standard header files. Or you may have conflicts with application- + * specific header files that you want to include together with these files. + * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. + */ + +#ifndef HAVE_BOOLEAN +typedef int boolean; +#endif +#ifndef FALSE /* in case these macros already exist */ +#define FALSE 0 /* values of boolean */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif + + +/* + * The remaining options affect code selection within the JPEG library, + * but they don't need to be visible to most applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. + */ + +#ifdef JPEG_INTERNALS +#define JPEG_INTERNAL_OPTIONS +#endif + +#ifdef JPEG_INTERNAL_OPTIONS + + +/* + * These defines indicate whether to include various optional functions. + * Undefining some of these symbols will produce a smaller but less capable + * library. Note that you can leave certain source files out of the + * compilation/linking process if you've #undef'd the corresponding symbols. + * (You may HAVE to do that if your compiler doesn't like null source files.) + */ + +/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ + +/* Capability options common to encoder and decoder: */ + +#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ +#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ +#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ + +/* Encoder capability options: */ + +#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ +/* Note: if you selected 12-bit data precision, it is dangerous to turn off + * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit + * precision, so jchuff.c normally uses entropy optimization to compute + * usable tables for higher precision. If you don't want to do optimization, + * you'll have to supply different default Huffman tables. + * The exact same statements apply for progressive JPEG: the default tables + * don't work for progressive mode. (This may get fixed, however.) + */ +#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ + +/* Decoder capability options: */ + +#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ +#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ +#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ +#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ +#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ +#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ +#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ + +/* more capability options later, no doubt */ + + +/* + * Ordering of RGB data in scanlines passed to or from the application. + * If your application wants to deal with data in the order B,G,R, just + * change these macros. You can also deal with formats such as R,G,B,X + * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing + * the offsets will also change the order in which colormap data is organized. + * RESTRICTIONS: + * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. + * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not + * useful if you are using JPEG color spaces other than YCbCr or grayscale. + * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE + * is not 3 (they don't understand about dummy color components!). So you + * can't use color quantization if you change that value. + */ + +#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ +#define RGB_GREEN 1 /* Offset of Green */ +#define RGB_BLUE 2 /* Offset of Blue */ +#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ + + +/* Definitions for speed-related optimizations. */ + + +/* If your compiler supports inline functions, define INLINE + * as the inline keyword; otherwise define it as empty. + */ + +#ifndef INLINE +#ifdef __GNUC__ /* for instance, GNU C knows about inline */ +#define INLINE __inline__ +#endif +#ifndef INLINE +#define INLINE /* default is to define it as empty */ +#endif +#endif + + +/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying + * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER + * as short on such a machine. MULTIPLIER must be at least 16 bits wide. + */ + +#ifndef MULTIPLIER +#define MULTIPLIER int /* type for fastest integer multiply */ +#endif + + +/* FAST_FLOAT should be either float or double, whichever is done faster + * by your compiler. (Note that this type is only used in the floating point + * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) + * Typically, float is faster in ANSI C compilers, while double is faster in + * pre-ANSI compilers (because they insist on converting to double anyway). + * The code below therefore chooses float if we have ANSI-style prototypes. + */ + +#ifndef FAST_FLOAT +#ifdef HAVE_PROTOTYPES +#define FAST_FLOAT float +#else +#define FAST_FLOAT double +#endif +#endif + +#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/thp_player/libpng/include/jpeglib.h b/thp_player/libpng/include/jpeglib.h new file mode 100644 index 0000000..2091dbe --- /dev/null +++ b/thp_player/libpng/include/jpeglib.h @@ -0,0 +1,1110 @@ +/* + * jpeglib.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the application interface for the JPEG library. + * Most applications using the library need only include this file, + * and perhaps jerror.h if they want to know the exact error codes. + */ + +#ifndef JPEGLIB_H +#define JPEGLIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * First we include the configuration files that record how this + * installation of the JPEG library is set up. jconfig.h can be + * generated automatically for many systems. jmorecfg.h contains + * manual configuration options that most people need not worry about. + */ + +#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ +#include "jconfig.h" /* widely used configuration options */ +#endif +#include "jmorecfg.h" /* seldom changed options */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* Version ID for the JPEG library. + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". + */ + +#define JPEG_LIB_VERSION 62 /* Version 6b */ + + +/* Various constants determining the sizes of things. + * All of these are specified by the JPEG standard, so don't change them + * if you want to be compatible. + */ + +#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ +#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ +#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ +#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ +#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ +#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ +#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ +/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; + * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. + * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU + * to handle it. We even let you do this from the jconfig.h file. However, + * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe + * sometimes emits noncompliant files doesn't mean you should too. + */ +#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ +#ifndef D_MAX_BLOCKS_IN_MCU +#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ +#endif + + +/* Data structures for images (arrays of samples and of DCT coefficients). + * On 80x86 machines, the image arrays are too big for near pointers, + * but the pointer arrays can fit in near memory. + */ + +typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ +typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ +typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ + +typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ +typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ +typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ +typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ + +typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ + + +/* Types for JPEG compression parameters and working tables. */ + + +/* DCT coefficient quantization tables. */ + +typedef struct { + /* This array gives the coefficient quantizers in natural array order + * (not the zigzag order in which they are stored in a JPEG DQT marker). + * CAUTION: IJG versions prior to v6a kept this array in zigzag order. + */ + UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JQUANT_TBL; + + +/* Huffman coding tables. */ + +typedef struct { + /* These two fields directly represent the contents of a JPEG DHT marker */ + UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ + /* length k bits; bits[0] is unused */ + UINT8 huffval[256]; /* The symbols, in order of incr code length */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JHUFF_TBL; + + +/* Basic info about one component (color channel). */ + +typedef struct { + /* These values are fixed over the whole image. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOF marker. */ + int component_id; /* identifier for this component (0..255) */ + int component_index; /* its index in SOF or cinfo->comp_info[] */ + int h_samp_factor; /* horizontal sampling factor (1..4) */ + int v_samp_factor; /* vertical sampling factor (1..4) */ + int quant_tbl_no; /* quantization table selector (0..3) */ + /* These values may vary between scans. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOS marker. */ + /* The decompressor output side may not use these variables. */ + int dc_tbl_no; /* DC entropy table selector (0..3) */ + int ac_tbl_no; /* AC entropy table selector (0..3) */ + + /* Remaining fields should be treated as private by applications. */ + + /* These values are computed during compression or decompression startup: */ + /* Component's size in DCT blocks. + * Any dummy blocks added to complete an MCU are not counted; therefore + * these values do not depend on whether a scan is interleaved or not. + */ + JDIMENSION width_in_blocks; + JDIMENSION height_in_blocks; + /* Size of a DCT block in samples. Always DCTSIZE for compression. + * For decompression this is the size of the output from one DCT block, + * reflecting any scaling we choose to apply during the IDCT step. + * Values of 1,2,4,8 are likely to be supported. Note that different + * components may receive different IDCT scalings. + */ + int DCT_scaled_size; + /* The downsampled dimensions are the component's actual, unpadded number + * of samples at the main buffer (preprocessing/compression interface), thus + * downsampled_width = ceil(image_width * Hi/Hmax) + * and similarly for height. For decompression, IDCT scaling is included, so + * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) + */ + JDIMENSION downsampled_width; /* actual width in samples */ + JDIMENSION downsampled_height; /* actual height in samples */ + /* This flag is used only for decompression. In cases where some of the + * components will be ignored (eg grayscale output from YCbCr image), + * we can skip most computations for the unused components. + */ + boolean component_needed; /* do we need the value of this component? */ + + /* These values are computed before starting a scan of the component. */ + /* The decompressor output side may not use these variables. */ + int MCU_width; /* number of blocks per MCU, horizontally */ + int MCU_height; /* number of blocks per MCU, vertically */ + int MCU_blocks; /* MCU_width * MCU_height */ + int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ + int last_col_width; /* # of non-dummy blocks across in last MCU */ + int last_row_height; /* # of non-dummy blocks down in last MCU */ + + /* Saved quantization table for component; NULL if none yet saved. + * See jdinput.c comments about the need for this information. + * This field is currently used only for decompression. + */ + JQUANT_TBL * quant_table; + + /* Private per-component storage for DCT or IDCT subsystem. */ + void * dct_table; +} jpeg_component_info; + + +/* The script for encoding a multiple-scan file is an array of these: */ + +typedef struct { + int comps_in_scan; /* number of components encoded in this scan */ + int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ + int Ss, Se; /* progressive JPEG spectral selection parms */ + int Ah, Al; /* progressive JPEG successive approx. parms */ +} jpeg_scan_info; + +/* The decompressor can save APPn and COM markers in a list of these: */ + +typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; + +struct jpeg_marker_struct { + jpeg_saved_marker_ptr next; /* next in list, or NULL */ + UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ + unsigned int original_length; /* # bytes of data in the file */ + unsigned int data_length; /* # bytes of data saved at data[] */ + JOCTET FAR * data; /* the data contained in the marker */ + /* the marker length word is not counted in data_length or original_length */ +}; + +/* Known color spaces. */ + +typedef enum { + JCS_UNKNOWN, /* error/unspecified */ + JCS_GRAYSCALE, /* monochrome */ + JCS_RGB, /* red/green/blue */ + JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ + JCS_CMYK, /* C/M/Y/K */ + JCS_YCCK /* Y/Cb/Cr/K */ +} J_COLOR_SPACE; + +/* DCT/IDCT algorithm options. */ + +typedef enum { + JDCT_ISLOW, /* slow but accurate integer algorithm */ + JDCT_IFAST, /* faster, less accurate integer method */ + JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ +} J_DCT_METHOD; + +#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ +#define JDCT_DEFAULT JDCT_ISLOW +#endif +#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ +#define JDCT_FASTEST JDCT_IFAST +#endif + +/* Dithering options for decompression. */ + +typedef enum { + JDITHER_NONE, /* no dithering */ + JDITHER_ORDERED, /* simple ordered dither */ + JDITHER_FS /* Floyd-Steinberg error diffusion dither */ +} J_DITHER_MODE; + + +/* Common fields between JPEG compression and decompression master structs. */ + +#define jpeg_common_fields \ + struct jpeg_error_mgr * err; /* Error handler module */\ + struct jpeg_memory_mgr * mem; /* Memory manager module */\ + struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ + void * client_data; /* Available for use by application */\ + boolean is_decompressor; /* So common code can tell which is which */\ + int global_state /* For checking call sequence validity */ + +/* Routines that are to be used by both halves of the library are declared + * to receive a pointer to this structure. There are no actual instances of + * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. + */ +struct jpeg_common_struct { + jpeg_common_fields; /* Fields common to both master struct types */ + /* Additional fields follow in an actual jpeg_compress_struct or + * jpeg_decompress_struct. All three structs must agree on these + * initial fields! (This would be a lot cleaner in C++.) + */ +}; + +typedef struct jpeg_common_struct * j_common_ptr; +typedef struct jpeg_compress_struct * j_compress_ptr; +typedef struct jpeg_decompress_struct * j_decompress_ptr; + + +/* Master record for a compression instance */ + +struct jpeg_compress_struct { + jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ + + /* Destination for compressed data */ + struct jpeg_destination_mgr * dest; + + /* Description of source image --- these fields must be filled in by + * outer application before starting compression. in_color_space must + * be correct before you can even call jpeg_set_defaults(). + */ + + JDIMENSION image_width; /* input image width */ + JDIMENSION image_height; /* input image height */ + int input_components; /* # of color components in input image */ + J_COLOR_SPACE in_color_space; /* colorspace of input image */ + + double input_gamma; /* image gamma of input image */ + + /* Compression parameters --- these fields must be set before calling + * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to + * initialize everything to reasonable defaults, then changing anything + * the application specifically wants to change. That way you won't get + * burnt when new parameters are added. Also note that there are several + * helper routines to simplify changing parameters. + */ + + int data_precision; /* bits of precision in image data */ + + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + int num_scans; /* # of entries in scan_info array */ + const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ + /* The default value of scan_info is NULL, which causes a single-scan + * sequential JPEG file to be emitted. To create a multi-scan file, + * set num_scans and scan_info to point to an array of scan definitions. + */ + + boolean raw_data_in; /* TRUE=caller supplies downsampled data */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + int smoothing_factor; /* 1..100, or 0 for no input smoothing */ + J_DCT_METHOD dct_method; /* DCT algorithm selector */ + + /* The restart interval can be specified in absolute MCUs by setting + * restart_interval, or in MCU rows by setting restart_in_rows + * (in which case the correct restart_interval will be figured + * for each scan). + */ + unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ + int restart_in_rows; /* if > 0, MCU rows per restart interval */ + + /* Parameters controlling emission of special markers. */ + + boolean write_JFIF_header; /* should a JFIF marker be written? */ + UINT8 JFIF_major_version; /* What to write for the JFIF version number */ + UINT8 JFIF_minor_version; + /* These three values are not used by the JPEG code, merely copied */ + /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ + /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ + /* ratio is defined by X_density/Y_density even when density_unit=0. */ + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean write_Adobe_marker; /* should an Adobe marker be written? */ + + /* State variable: index of next scanline to be written to + * jpeg_write_scanlines(). Application may use this to control its + * processing loop, e.g., "while (next_scanline < image_height)". + */ + + JDIMENSION next_scanline; /* 0 .. image_height-1 */ + + /* Remaining fields are known throughout compressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during compression startup + */ + boolean progressive_mode; /* TRUE if scan script uses progressive mode */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ + /* The coefficient controller receives data in units of MCU rows as defined + * for fully interleaved scans (whether the JPEG file is interleaved or not). + * There are v_samp_factor * DCTSIZE sample rows of each component in an + * "iMCU" (interleaved MCU) row. + */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[C_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* + * Links to compression subobjects (methods and private variables of modules) + */ + struct jpeg_comp_master * master; + struct jpeg_c_main_controller * main; + struct jpeg_c_prep_controller * prep; + struct jpeg_c_coef_controller * coef; + struct jpeg_marker_writer * marker; + struct jpeg_color_converter * cconvert; + struct jpeg_downsampler * downsample; + struct jpeg_forward_dct * fdct; + struct jpeg_entropy_encoder * entropy; + jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ + int script_space_size; +}; + + +/* Master record for a decompression instance */ + +struct jpeg_decompress_struct { + jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ + + /* Source of compressed data */ + struct jpeg_source_mgr * src; + + /* Basic description of image --- filled in by jpeg_read_header(). */ + /* Application may inspect these values to decide how to process image. */ + + JDIMENSION image_width; /* nominal image width (from SOF marker) */ + JDIMENSION image_height; /* nominal image height */ + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + /* Decompression processing parameters --- these fields must be set before + * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes + * them to default values. + */ + + J_COLOR_SPACE out_color_space; /* colorspace for output */ + + unsigned int scale_num, scale_denom; /* fraction by which to scale image */ + + double output_gamma; /* image gamma wanted in output */ + + boolean buffered_image; /* TRUE=multiple output passes */ + boolean raw_data_out; /* TRUE=downsampled data wanted */ + + J_DCT_METHOD dct_method; /* IDCT algorithm selector */ + boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ + boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ + + boolean quantize_colors; /* TRUE=colormapped output wanted */ + /* the following are ignored if not quantize_colors: */ + J_DITHER_MODE dither_mode; /* type of color dithering to use */ + boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ + int desired_number_of_colors; /* max # colors to use in created colormap */ + /* these are significant only in buffered-image mode: */ + boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ + boolean enable_external_quant;/* enable future use of external colormap */ + boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ + + /* Description of actual output image that will be returned to application. + * These fields are computed by jpeg_start_decompress(). + * You can also use jpeg_calc_output_dimensions() to determine these values + * in advance of calling jpeg_start_decompress(). + */ + + JDIMENSION output_width; /* scaled image width */ + JDIMENSION output_height; /* scaled image height */ + int out_color_components; /* # of color components in out_color_space */ + int output_components; /* # of color components returned */ + /* output_components is 1 (a colormap index) when quantizing colors; + * otherwise it equals out_color_components. + */ + int rec_outbuf_height; /* min recommended height of scanline buffer */ + /* If the buffer passed to jpeg_read_scanlines() is less than this many rows + * high, space and time will be wasted due to unnecessary data copying. + * Usually rec_outbuf_height will be 1 or 2, at most 4. + */ + + /* When quantizing colors, the output colormap is described by these fields. + * The application can supply a colormap by setting colormap non-NULL before + * calling jpeg_start_decompress; otherwise a colormap is created during + * jpeg_start_decompress or jpeg_start_output. + * The map has out_color_components rows and actual_number_of_colors columns. + */ + int actual_number_of_colors; /* number of entries in use */ + JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ + + /* State variables: these variables indicate the progress of decompression. + * The application may examine these but must not modify them. + */ + + /* Row index of next scanline to be read from jpeg_read_scanlines(). + * Application may use this to control its processing loop, e.g., + * "while (output_scanline < output_height)". + */ + JDIMENSION output_scanline; /* 0 .. output_height-1 */ + + /* Current input scan number and number of iMCU rows completed in scan. + * These indicate the progress of the decompressor input side. + */ + int input_scan_number; /* Number of SOS markers seen so far */ + JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ + + /* The "output scan number" is the notional scan being displayed by the + * output side. The decompressor will not allow output scan/row number + * to get ahead of input scan/row, but it can fall arbitrarily far behind. + */ + int output_scan_number; /* Nominal scan number being displayed */ + JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ + + /* Current progression status. coef_bits[c][i] indicates the precision + * with which component c's DCT coefficient i (in zigzag order) is known. + * It is -1 when no data has yet been received, otherwise it is the point + * transform (shift) value for the most recent scan of the coefficient + * (thus, 0 at completion of the progression). + * This pointer is NULL when reading a non-progressive file. + */ + int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ + + /* Internal JPEG parameters --- the application usually need not look at + * these fields. Note that the decompressor output side may not use + * any parameters that can change between scans. + */ + + /* Quantization and Huffman tables are carried forward across input + * datastreams when processing abbreviated JPEG datastreams. + */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + /* These parameters are never carried across datastreams, since they + * are given in SOF/SOS markers or defined to be reset by SOI. + */ + + int data_precision; /* bits of precision in image data */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ + + /* These fields record data obtained from optional markers recognized by + * the JPEG library. + */ + boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ + /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ + UINT8 JFIF_major_version; /* JFIF version number */ + UINT8 JFIF_minor_version; + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ + UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + + /* Aside from the specific data retained from APPn markers known to the + * library, the uninterpreted contents of any or all APPn and COM markers + * can be saved in a list for examination by the application. + */ + jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ + + /* Remaining fields are known throughout decompressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during decompression startup + */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ + /* The coefficient controller's input and output progress is measured in + * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows + * in fully interleaved JPEG scans, but are used whether the scan is + * interleaved or not. We define an iMCU row as v_samp_factor DCT block + * rows of each component. Therefore, the IDCT output contains + * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. + */ + + JSAMPLE * sample_range_limit; /* table for fast range-limiting */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + * Note that the decompressor output side must not use these fields. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[D_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* This field is shared between entropy decoder and marker parser. + * It is either zero or the code of a JPEG marker that has been + * read from the data source, but has not yet been processed. + */ + int unread_marker; + + /* + * Links to decompression subobjects (methods, private variables of modules) + */ + struct jpeg_decomp_master * master; + struct jpeg_d_main_controller * main; + struct jpeg_d_coef_controller * coef; + struct jpeg_d_post_controller * post; + struct jpeg_input_controller * inputctl; + struct jpeg_marker_reader * marker; + struct jpeg_entropy_decoder * entropy; + struct jpeg_inverse_dct * idct; + struct jpeg_upsampler * upsample; + struct jpeg_color_deconverter * cconvert; + struct jpeg_color_quantizer * cquantize; +}; + + +/* "Object" declarations for JPEG modules that may be supplied or called + * directly by the surrounding application. + * As with all objects in the JPEG library, these structs only define the + * publicly visible methods and state variables of a module. Additional + * private fields may exist after the public ones. + */ + + +/* Error handler object */ + +struct jpeg_error_mgr { + /* Error exit handler: does not return to caller */ + JMETHOD(void, error_exit, (j_common_ptr cinfo)); + /* Conditionally emit a trace or warning message */ + JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); + /* Routine that actually outputs a trace or error message */ + JMETHOD(void, output_message, (j_common_ptr cinfo)); + /* Format a message string for the most recent JPEG error or message */ + JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); +#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ + /* Reset error state variables at start of a new image */ + JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); + + /* The message ID code and any parameters are saved here. + * A message can have one string parameter or up to 8 int parameters. + */ + int msg_code; +#define JMSG_STR_PARM_MAX 80 + union { + int i[8]; + char s[JMSG_STR_PARM_MAX]; + } msg_parm; + + /* Standard state variables for error facility */ + + int trace_level; /* max msg_level that will be displayed */ + + /* For recoverable corrupt-data errors, we emit a warning message, + * but keep going unless emit_message chooses to abort. emit_message + * should count warnings in num_warnings. The surrounding application + * can check for bad data by seeing if num_warnings is nonzero at the + * end of processing. + */ + long num_warnings; /* number of corrupt-data warnings */ + + /* These fields point to the table(s) of error message strings. + * An application can change the table pointer to switch to a different + * message list (typically, to change the language in which errors are + * reported). Some applications may wish to add additional error codes + * that will be handled by the JPEG library error mechanism; the second + * table pointer is used for this purpose. + * + * First table includes all errors generated by JPEG library itself. + * Error code 0 is reserved for a "no such error string" message. + */ + const char * const * jpeg_message_table; /* Library errors */ + int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ + /* Second table can be added by application (see cjpeg/djpeg for example). + * It contains strings numbered first_addon_message..last_addon_message. + */ + const char * const * addon_message_table; /* Non-library errors */ + int first_addon_message; /* code for first string in addon table */ + int last_addon_message; /* code for last string in addon table */ +}; + + +/* Progress monitor object */ + +struct jpeg_progress_mgr { + JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); + + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +}; + + +/* Data destination object for compression */ + +struct jpeg_destination_mgr { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + + JMETHOD(void, init_destination, (j_compress_ptr cinfo)); + JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); + JMETHOD(void, term_destination, (j_compress_ptr cinfo)); +}; + + +/* Data source object for decompression */ + +struct jpeg_source_mgr { + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + + JMETHOD(void, init_source, (j_decompress_ptr cinfo)); + JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); + JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); + JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); + JMETHOD(void, term_source, (j_decompress_ptr cinfo)); +}; + + +/* Memory manager object. + * Allocates "small" objects (a few K total), "large" objects (tens of K), + * and "really big" objects (virtual arrays with backing store if needed). + * The memory manager does not allow individual objects to be freed; rather, + * each created object is assigned to a pool, and whole pools can be freed + * at once. This is faster and more convenient than remembering exactly what + * to free, especially where malloc()/free() are not too speedy. + * NB: alloc routines never return NULL. They exit to error_exit if not + * successful. + */ + +#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ +#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ +#define JPOOL_NUMPOOLS 2 + +typedef struct jvirt_sarray_control * jvirt_sarray_ptr; +typedef struct jvirt_barray_control * jvirt_barray_ptr; + + +struct jpeg_memory_mgr { + /* Method pointers */ + JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, + JDIMENSION numrows)); + JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, + JDIMENSION numrows)); + JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION samplesperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION blocksperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); + JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, + jvirt_sarray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, + jvirt_barray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); + JMETHOD(void, self_destruct, (j_common_ptr cinfo)); + + /* Limit on memory allocation for this JPEG object. (Note that this is + * merely advisory, not a guaranteed maximum; it only affects the space + * used for virtual-array buffers.) May be changed by outer application + * after creating the JPEG object. + */ + long max_memory_to_use; + + /* Maximum allocation request accepted by alloc_large. */ + long max_alloc_chunk; +}; + + +/* Routine signature for application-supplied marker processing methods. + * Need not pass marker code since it is stored in cinfo->unread_marker. + */ +typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); + + +/* Declarations for routines called by application. + * The JPP macro hides prototype parameters from compilers that can't cope. + * Note JPP requires double parentheses. + */ + +#ifdef HAVE_PROTOTYPES +#define JPP(arglist) arglist +#else +#define JPP(arglist) () +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. + * We shorten external names to be unique in the first six letters, which + * is good enough for all known systems. + * (If your compiler itself needs names to be unique in less than 15 + * characters, you are out of luck. Get a better compiler.) + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_error jStdError +#define jpeg_CreateCompress jCreaCompress +#define jpeg_CreateDecompress jCreaDecompress +#define jpeg_destroy_compress jDestCompress +#define jpeg_destroy_decompress jDestDecompress +#define jpeg_stdio_dest jStdDest +#define jpeg_stdio_src jStdSrc +#define jpeg_set_defaults jSetDefaults +#define jpeg_set_colorspace jSetColorspace +#define jpeg_default_colorspace jDefColorspace +#define jpeg_set_quality jSetQuality +#define jpeg_set_linear_quality jSetLQuality +#define jpeg_add_quant_table jAddQuantTable +#define jpeg_quality_scaling jQualityScaling +#define jpeg_simple_progression jSimProgress +#define jpeg_suppress_tables jSuppressTables +#define jpeg_alloc_quant_table jAlcQTable +#define jpeg_alloc_huff_table jAlcHTable +#define jpeg_start_compress jStrtCompress +#define jpeg_write_scanlines jWrtScanlines +#define jpeg_finish_compress jFinCompress +#define jpeg_write_raw_data jWrtRawData +#define jpeg_write_marker jWrtMarker +#define jpeg_write_m_header jWrtMHeader +#define jpeg_write_m_byte jWrtMByte +#define jpeg_write_tables jWrtTables +#define jpeg_read_header jReadHeader +#define jpeg_start_decompress jStrtDecompress +#define jpeg_read_scanlines jReadScanlines +#define jpeg_finish_decompress jFinDecompress +#define jpeg_read_raw_data jReadRawData +#define jpeg_has_multiple_scans jHasMultScn +#define jpeg_start_output jStrtOutput +#define jpeg_finish_output jFinOutput +#define jpeg_input_complete jInComplete +#define jpeg_new_colormap jNewCMap +#define jpeg_consume_input jConsumeInput +#define jpeg_calc_output_dimensions jCalcDimensions +#define jpeg_save_markers jSaveMarkers +#define jpeg_set_marker_processor jSetMarker +#define jpeg_read_coefficients jReadCoefs +#define jpeg_write_coefficients jWrtCoefs +#define jpeg_copy_critical_parameters jCopyCrit +#define jpeg_abort_compress jAbrtCompress +#define jpeg_abort_decompress jAbrtDecompress +#define jpeg_abort jAbort +#define jpeg_destroy jDestroy +#define jpeg_resync_to_restart jResyncRestart +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Default error-management setup */ +EXTERN(struct jpeg_error_mgr *) jpeg_std_error + JPP((struct jpeg_error_mgr * err)); + +/* Initialization of JPEG compression objects. + * jpeg_create_compress() and jpeg_create_decompress() are the exported + * names that applications should call. These expand to calls on + * jpeg_CreateCompress and jpeg_CreateDecompress with additional information + * passed for version mismatch checking. + * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. + */ +#define jpeg_create_compress(cinfo) \ + jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_compress_struct)) +#define jpeg_create_decompress(cinfo) \ + jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_decompress_struct)) +EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, + int version, size_t structsize)); +EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, + int version, size_t structsize)); +/* Destruction of JPEG compression objects */ +EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); + +/* Standard data source and destination managers: stdio streams. */ +/* Caller is responsible for opening the file before and closing after. */ +EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); +EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); + +/* Default parameter setup for compression */ +EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); +/* Compression parameter setup aids */ +EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, + J_COLOR_SPACE colorspace)); +EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, + boolean force_baseline)); +EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, + int scale_factor, + boolean force_baseline)); +EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, + boolean force_baseline)); +EXTERN(int) jpeg_quality_scaling JPP((int quality)); +EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, + boolean suppress)); +EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); +EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); + +/* Main entry points for compression */ +EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, + boolean write_all_tables)); +EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION num_lines)); +EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); + +/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION num_lines)); + +/* Write a special marker. See libjpeg.doc concerning safe usage. */ +EXTERN(void) jpeg_write_marker + JPP((j_compress_ptr cinfo, int marker, + const JOCTET * dataptr, unsigned int datalen)); +/* Same, but piecemeal. */ +EXTERN(void) jpeg_write_m_header + JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); +EXTERN(void) jpeg_write_m_byte + JPP((j_compress_ptr cinfo, int val)); + +/* Alternate compression function: just write an abbreviated table file */ +EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); + +/* Decompression startup: read start of JPEG datastream to see what's there */ +EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, + boolean require_image)); +/* Return value is one of: */ +#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ +#define JPEG_HEADER_OK 1 /* Found valid image datastream */ +#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ +/* If you pass require_image = TRUE (normal case), you need not check for + * a TABLES_ONLY return code; an abbreviated file will cause an error exit. + * JPEG_SUSPENDED is only possible if you use a data source module that can + * give a suspension return (the stdio source module doesn't). + */ + +/* Main entry points for decompression */ +EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION max_lines)); +EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); + +/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION max_lines)); + +/* Additional entry points for buffered-image mode. */ +EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, + int scan_number)); +EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); +EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); +/* Return value is one of: */ +/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ +#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ +#define JPEG_REACHED_EOI 2 /* Reached end of image */ +#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ +#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ + +/* Precalculate output dimensions for current decompression parameters. */ +EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); + +/* Control saving of COM and APPn markers into marker_list. */ +EXTERN(void) jpeg_save_markers + JPP((j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit)); + +/* Install a special processing method for COM or APPn markers. */ +EXTERN(void) jpeg_set_marker_processor + JPP((j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine)); + +/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ +EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays)); +EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, + j_compress_ptr dstinfo)); + +/* If you choose to abort compression or decompression before completing + * jpeg_finish_(de)compress, then you need to clean up to release memory, + * temporary files, etc. You can just call jpeg_destroy_(de)compress + * if you're done with the JPEG object, but if you want to clean it up and + * reuse it, call this: + */ +EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); + +/* Generic versions of jpeg_abort and jpeg_destroy that work on either + * flavor of JPEG object. These may be more convenient in some places. + */ +EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); + +/* Default restart-marker-resync procedure for use by data source modules */ +EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, + int desired)); + + +/* These marker codes are exported since applications and data source modules + * are likely to want to use them. + */ + +#define JPEG_RST0 0xD0 /* RST0 marker code */ +#define JPEG_EOI 0xD9 /* EOI marker code */ +#define JPEG_APP0 0xE0 /* APP0 marker code */ +#define JPEG_COM 0xFE /* COM marker code */ + + +/* If we have a brain-damaged compiler that emits warnings (or worse, errors) + * for structure definitions that are never filled in, keep it quiet by + * supplying dummy definitions for the various substructures. + */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +struct jpeg_comp_master { long dummy; }; +struct jpeg_c_main_controller { long dummy; }; +struct jpeg_c_prep_controller { long dummy; }; +struct jpeg_c_coef_controller { long dummy; }; +struct jpeg_marker_writer { long dummy; }; +struct jpeg_color_converter { long dummy; }; +struct jpeg_downsampler { long dummy; }; +struct jpeg_forward_dct { long dummy; }; +struct jpeg_entropy_encoder { long dummy; }; +struct jpeg_decomp_master { long dummy; }; +struct jpeg_d_main_controller { long dummy; }; +struct jpeg_d_coef_controller { long dummy; }; +struct jpeg_d_post_controller { long dummy; }; +struct jpeg_input_controller { long dummy; }; +struct jpeg_marker_reader { long dummy; }; +struct jpeg_entropy_decoder { long dummy; }; +struct jpeg_inverse_dct { long dummy; }; +struct jpeg_upsampler { long dummy; }; +struct jpeg_color_deconverter { long dummy; }; +struct jpeg_color_quantizer { long dummy; }; +#endif /* JPEG_INTERNALS */ +#endif /* INCOMPLETE_TYPES_BROKEN */ + +#ifdef __cplusplus +} +#endif + +/* + * The JPEG library modules define JPEG_INTERNALS before including this file. + * The internal structure declarations are read only when that is true. + * Applications using the library should not include jpegint.h, but may wish + * to include jerror.h. + */ + +#ifdef JPEG_INTERNALS +#include "jpegint.h" /* fetch private declarations */ +#include "jerror.h" /* fetch error codes too */ +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* JPEGLIB_H */ diff --git a/thp_player/thp_player.pro b/thp_player/thp_player.pro index 37fae8e..f403ef6 100644 --- a/thp_player/thp_player.pro +++ b/thp_player/thp_player.pro @@ -20,7 +20,13 @@ HEADERS += thpwindow.h \ FORMS += thpwindow.ui CONFIG += static -LIBS += -ljpeg +win32 { + message("win32 build") + INCLUDEPATH += . ./libpng/include +} +else { + LIBS += -ljpeg +} RESOURCES += \ rc.qrc