From bbf00919220fc3b759450466863cc813f9269b46 Mon Sep 17 00:00:00 2001 From: "fix94.1" Date: Sat, 22 Mar 2014 21:32:40 +0000 Subject: [PATCH] -plugin videos now need to be in subfolders if you have "coverFolder" for the ini set -plugins now also play videos which have the magic number as name if no specific video was found -switched from libjpeg to the turbojpeg wrapper from libjpeg-turbo to simplify the whole jpeg decoding code by alot -heavly optimized the video decoding code --- Makefile.main | 2 +- portlibs/include/jconfig.h | 45 -- portlibs/include/jerror.h | 291 --------- portlibs/include/jmorecfg.h | 363 ----------- portlibs/include/jpeglib.h | 1096 ---------------------------------- portlibs/include/turbojpeg.h | 932 +++++++++++++++++++++++++++++ portlibs/lib/libjpeg.a | Bin 180988 -> 0 bytes portlibs/lib/libturbojpeg.a | Bin 0 -> 345198 bytes source/gui/WiiMovie.cpp | 11 +- source/gui/WiiMovie.hpp | 1 + source/gui/gcvid.cpp | 239 ++------ source/gui/gcvid.h | 24 +- source/gui/texture.cpp | 85 +-- source/menu/menu_game.cpp | 40 +- 14 files changed, 1062 insertions(+), 2067 deletions(-) delete mode 100644 portlibs/include/jconfig.h delete mode 100644 portlibs/include/jerror.h delete mode 100644 portlibs/include/jmorecfg.h delete mode 100644 portlibs/include/jpeglib.h create mode 100644 portlibs/include/turbojpeg.h delete mode 100644 portlibs/lib/libjpeg.a create mode 100644 portlibs/lib/libturbojpeg.a diff --git a/Makefile.main b/Makefile.main index d8026bf9..5de5d18e 100644 --- a/Makefile.main +++ b/Makefile.main @@ -67,7 +67,7 @@ endif #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- -LIBS := -lcustomfat -lcustomntfs -lcustomext2fs -lpng -ljpeg -lm -lz -lwiiuse -lbte -lasnd -logc -lfreetype -lvorbisidec -lmad +LIBS := -lcustomfat -lcustomntfs -lcustomext2fs -lpng -lturbojpeg -lm -lz -lwiiuse -lbte -lasnd -logc -lfreetype -lvorbisidec -lmad #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing diff --git a/portlibs/include/jconfig.h b/portlibs/include/jconfig.h deleted file mode 100644 index 9594ec56..00000000 --- a/portlibs/include/jconfig.h +++ /dev/null @@ -1,45 +0,0 @@ -/* jconfig.h. Generated automatically by configure. */ -/* jconfig.cfg --- source file edited by configure script */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -#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 */ -#undef 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/portlibs/include/jerror.h b/portlibs/include/jerror.h deleted file mode 100644 index fc2fffea..00000000 --- a/portlibs/include/jerror.h +++ /dev/null @@ -1,291 +0,0 @@ -/* - * 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_DCT_COEF, "DCT coefficient out of range") -JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported") -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 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/portlibs/include/jmorecfg.h b/portlibs/include/jmorecfg.h deleted file mode 100644 index 54a7d1c4..00000000 --- a/portlibs/include/jmorecfg.h +++ /dev/null @@ -1,363 +0,0 @@ -/* - * 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 */ - - -/* - * 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. */ - -#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. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ -typedef long INT32; -#endif - -/* 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. - */ - -/* 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 -/* a reference to a GLOBAL function: */ -#define EXTERN(type) extern type - - -/* 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. - */ - -#ifdef NEED_FAR_POINTERS -#define FAR far -#else -#define FAR -#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/portlibs/include/jpeglib.h b/portlibs/include/jpeglib.h deleted file mode 100644 index d1be8dde..00000000 --- a/portlibs/include/jpeglib.h +++ /dev/null @@ -1,1096 +0,0 @@ -/* - * 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 - -/* - * 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 */ - - -/* 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 */ - - -/* - * 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 - -#endif /* JPEGLIB_H */ diff --git a/portlibs/include/turbojpeg.h b/portlibs/include/turbojpeg.h new file mode 100644 index 00000000..a563c818 --- /dev/null +++ b/portlibs/include/turbojpeg.h @@ -0,0 +1,932 @@ +/* + * Copyright (C)2009-2013 D. R. Commander. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * - Neither the name of the libjpeg-turbo Project nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __TURBOJPEG_H__ +#define __TURBOJPEG_H__ + +#if defined(_WIN32) && defined(DLLDEFINE) +#define DLLEXPORT __declspec(dllexport) +#else +#define DLLEXPORT +#endif +#define DLLCALL + + +/** + * @addtogroup TurboJPEG + * TurboJPEG API. This API provides an interface for generating, decoding, and + * transforming planar YUV and JPEG images in memory. + * + * @{ + */ + + +/** + * The number of chrominance subsampling options + */ +#define TJ_NUMSAMP 5 + +/** + * Chrominance subsampling options. + * When an image is converted from the RGB to the YCbCr colorspace as part of + * the JPEG compression process, some of the Cb and Cr (chrominance) components + * can be discarded or averaged together to produce a smaller image with little + * perceptible loss of image clarity (the human eye is more sensitive to small + * changes in brightness than small changes in color.) This is called + * "chrominance subsampling". + *

+ * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the + * convention of the digital video community, the TurboJPEG API uses "YUV" to + * refer to an image format consisting of Y, Cb, and Cr image planes. + */ +enum TJSAMP +{ + /** + * 4:4:4 chrominance subsampling (no chrominance subsampling). The JPEG or + * YUV image will contain one chrominance component for every pixel in the + * source image. + */ + TJSAMP_444=0, + /** + * 4:2:2 chrominance subsampling. The JPEG or YUV image will contain one + * chrominance component for every 2x1 block of pixels in the source image. + */ + TJSAMP_422, + /** + * 4:2:0 chrominance subsampling. The JPEG or YUV image will contain one + * chrominance component for every 2x2 block of pixels in the source image. + */ + TJSAMP_420, + /** + * Grayscale. The JPEG or YUV image will contain no chrominance components. + */ + TJSAMP_GRAY, + /** + * 4:4:0 chrominance subsampling. The JPEG or YUV image will contain one + * chrominance component for every 1x2 block of pixels in the source image. + * Note that 4:4:0 subsampling is not fully accelerated in libjpeg-turbo. + */ + TJSAMP_440 +}; + +/** + * MCU block width (in pixels) for a given level of chrominance subsampling. + * MCU block sizes: + * - 8x8 for no subsampling or grayscale + * - 16x8 for 4:2:2 + * - 8x16 for 4:4:0 + * - 16x16 for 4:2:0 + */ +static const int tjMCUWidth[TJ_NUMSAMP] = {8, 16, 16, 8, 8}; + +/** + * MCU block height (in pixels) for a given level of chrominance subsampling. + * MCU block sizes: + * - 8x8 for no subsampling or grayscale + * - 16x8 for 4:2:2 + * - 8x16 for 4:4:0 + * - 16x16 for 4:2:0 + */ +static const int tjMCUHeight[TJ_NUMSAMP] = {8, 8, 16, 8, 16}; + + +/** + * The number of pixel formats + */ +#define TJ_NUMPF 11 + +/** + * Pixel formats + */ +enum TJPF +{ + /** + * RGB pixel format. The red, green, and blue components in the image are + * stored in 3-byte pixels in the order R, G, B from lowest to highest byte + * address within each pixel. + */ + TJPF_RGB=0, + /** + * BGR pixel format. The red, green, and blue components in the image are + * stored in 3-byte pixels in the order B, G, R from lowest to highest byte + * address within each pixel. + */ + TJPF_BGR, + /** + * RGBX pixel format. The red, green, and blue components in the image are + * stored in 4-byte pixels in the order R, G, B from lowest to highest byte + * address within each pixel. The X component is ignored when compressing + * and undefined when decompressing. + */ + TJPF_RGBX, + /** + * BGRX pixel format. The red, green, and blue components in the image are + * stored in 4-byte pixels in the order B, G, R from lowest to highest byte + * address within each pixel. The X component is ignored when compressing + * and undefined when decompressing. + */ + TJPF_BGRX, + /** + * XBGR pixel format. The red, green, and blue components in the image are + * stored in 4-byte pixels in the order R, G, B from highest to lowest byte + * address within each pixel. The X component is ignored when compressing + * and undefined when decompressing. + */ + TJPF_XBGR, + /** + * XRGB pixel format. The red, green, and blue components in the image are + * stored in 4-byte pixels in the order B, G, R from highest to lowest byte + * address within each pixel. The X component is ignored when compressing + * and undefined when decompressing. + */ + TJPF_XRGB, + /** + * Grayscale pixel format. Each 1-byte pixel represents a luminance + * (brightness) level from 0 to 255. + */ + TJPF_GRAY, + /** + * RGBA pixel format. This is the same as @ref TJPF_RGBX, except that when + * decompressing, the X component is guaranteed to be 0xFF, which can be + * interpreted as an opaque alpha channel. + */ + TJPF_RGBA, + /** + * BGRA pixel format. This is the same as @ref TJPF_BGRX, except that when + * decompressing, the X component is guaranteed to be 0xFF, which can be + * interpreted as an opaque alpha channel. + */ + TJPF_BGRA, + /** + * ABGR pixel format. This is the same as @ref TJPF_XBGR, except that when + * decompressing, the X component is guaranteed to be 0xFF, which can be + * interpreted as an opaque alpha channel. + */ + TJPF_ABGR, + /** + * ARGB pixel format. This is the same as @ref TJPF_XRGB, except that when + * decompressing, the X component is guaranteed to be 0xFF, which can be + * interpreted as an opaque alpha channel. + */ + TJPF_ARGB +}; + +/** + * Red offset (in bytes) for a given pixel format. This specifies the number + * of bytes that the red component is offset from the start of the pixel. For + * instance, if a pixel of format TJ_BGRX is stored in char pixel[], + * then the red component will be pixel[tjRedOffset[TJ_BGRX]]. + */ +static const int tjRedOffset[TJ_NUMPF] = {0, 2, 0, 2, 3, 1, 0, 0, 2, 3, 1}; +/** + * Green offset (in bytes) for a given pixel format. This specifies the number + * of bytes that the green component is offset from the start of the pixel. + * For instance, if a pixel of format TJ_BGRX is stored in + * char pixel[], then the green component will be + * pixel[tjGreenOffset[TJ_BGRX]]. + */ +static const int tjGreenOffset[TJ_NUMPF] = {1, 1, 1, 1, 2, 2, 0, 1, 1, 2, 2}; +/** + * Blue offset (in bytes) for a given pixel format. This specifies the number + * of bytes that the Blue component is offset from the start of the pixel. For + * instance, if a pixel of format TJ_BGRX is stored in char pixel[], + * then the blue component will be pixel[tjBlueOffset[TJ_BGRX]]. + */ +static const int tjBlueOffset[TJ_NUMPF] = {2, 0, 2, 0, 1, 3, 0, 2, 0, 1, 3}; + +/** + * Pixel size (in bytes) for a given pixel format. + */ +static const int tjPixelSize[TJ_NUMPF] = {3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4}; + + +/** + * The uncompressed source/destination image is stored in bottom-up (Windows, + * OpenGL) order, not top-down (X11) order. + */ +#define TJFLAG_BOTTOMUP 2 +/** + * Turn off CPU auto-detection and force TurboJPEG to use MMX code (if the + * underlying codec supports it.) + */ +#define TJFLAG_FORCEMMX 8 +/** + * Turn off CPU auto-detection and force TurboJPEG to use SSE code (if the + * underlying codec supports it.) + */ +#define TJFLAG_FORCESSE 16 +/** + * Turn off CPU auto-detection and force TurboJPEG to use SSE2 code (if the + * underlying codec supports it.) + */ +#define TJFLAG_FORCESSE2 32 +/** + * Turn off CPU auto-detection and force TurboJPEG to use SSE3 code (if the + * underlying codec supports it.) + */ +#define TJFLAG_FORCESSE3 128 +/** + * When decompressing an image that was compressed using chrominance + * subsampling, use the fastest chrominance upsampling algorithm available in + * the underlying codec. The default is to use smooth upsampling, which + * creates a smooth transition between neighboring chrominance components in + * order to reduce upsampling artifacts in the decompressed image. + */ +#define TJFLAG_FASTUPSAMPLE 256 +/** + * Disable buffer (re)allocation. If passed to #tjCompress2() or + * #tjTransform(), this flag will cause those functions to generate an error if + * the JPEG image buffer is invalid or too small rather than attempting to + * allocate or reallocate that buffer. This reproduces the behavior of earlier + * versions of TurboJPEG. + */ +#define TJFLAG_NOREALLOC 1024 +/** + * Use the fastest DCT/IDCT algorithm available in the underlying codec. The + * default if this flag is not specified is implementation-specific. For + * example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast + * algorithm by default when compressing, because this has been shown to have + * only a very slight effect on accuracy, but it uses the accurate algorithm + * when decompressing, because this has been shown to have a larger effect. + */ +#define TJFLAG_FASTDCT 2048 +/** + * Use the most accurate DCT/IDCT algorithm available in the underlying codec. + * The default if this flag is not specified is implementation-specific. For + * example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast + * algorithm by default when compressing, because this has been shown to have + * only a very slight effect on accuracy, but it uses the accurate algorithm + * when decompressing, because this has been shown to have a larger effect. + */ +#define TJFLAG_ACCURATEDCT 4096 + + +/** + * The number of transform operations + */ +#define TJ_NUMXOP 8 + +/** + * Transform operations for #tjTransform() + */ +enum TJXOP +{ + /** + * Do not transform the position of the image pixels + */ + TJXOP_NONE=0, + /** + * Flip (mirror) image horizontally. This transform is imperfect if there + * are any partial MCU blocks on the right edge (see #TJXOPT_PERFECT.) + */ + TJXOP_HFLIP, + /** + * Flip (mirror) image vertically. This transform is imperfect if there are + * any partial MCU blocks on the bottom edge (see #TJXOPT_PERFECT.) + */ + TJXOP_VFLIP, + /** + * Transpose image (flip/mirror along upper left to lower right axis.) This + * transform is always perfect. + */ + TJXOP_TRANSPOSE, + /** + * Transverse transpose image (flip/mirror along upper right to lower left + * axis.) This transform is imperfect if there are any partial MCU blocks in + * the image (see #TJXOPT_PERFECT.) + */ + TJXOP_TRANSVERSE, + /** + * Rotate image clockwise by 90 degrees. This transform is imperfect if + * there are any partial MCU blocks on the bottom edge (see + * #TJXOPT_PERFECT.) + */ + TJXOP_ROT90, + /** + * Rotate image 180 degrees. This transform is imperfect if there are any + * partial MCU blocks in the image (see #TJXOPT_PERFECT.) + */ + TJXOP_ROT180, + /** + * Rotate image counter-clockwise by 90 degrees. This transform is imperfect + * if there are any partial MCU blocks on the right edge (see + * #TJXOPT_PERFECT.) + */ + TJXOP_ROT270 +}; + + +/** + * This option will cause #tjTransform() to return an error if the transform is + * not perfect. Lossless transforms operate on MCU blocks, whose size depends + * on the level of chrominance subsampling used (see #tjMCUWidth + * and #tjMCUHeight.) If the image's width or height is not evenly divisible + * by the MCU block size, then there will be partial MCU blocks on the right + * and/or bottom edges. It is not possible to move these partial MCU blocks to + * the top or left of the image, so any transform that would require that is + * "imperfect." If this option is not specified, then any partial MCU blocks + * that cannot be transformed will be left in place, which will create + * odd-looking strips on the right or bottom edge of the image. + */ +#define TJXOPT_PERFECT 1 +/** + * This option will cause #tjTransform() to discard any partial MCU blocks that + * cannot be transformed. + */ +#define TJXOPT_TRIM 2 +/** + * This option will enable lossless cropping. See #tjTransform() for more + * information. + */ +#define TJXOPT_CROP 4 +/** + * This option will discard the color data in the input image and produce + * a grayscale output image. + */ +#define TJXOPT_GRAY 8 +/** + * This option will prevent #tjTransform() from outputting a JPEG image for + * this particular transform (this can be used in conjunction with a custom + * filter to capture the transformed DCT coefficients without transcoding + * them.) + */ +#define TJXOPT_NOOUTPUT 16 + + +/** + * Scaling factor + */ +typedef struct +{ + /** + * Numerator + */ + int num; + /** + * Denominator + */ + int denom; +} tjscalingfactor; + +/** + * Cropping region + */ +typedef struct +{ + /** + * The left boundary of the cropping region. This must be evenly divisible + * by the MCU block width (see #tjMCUWidth.) + */ + int x; + /** + * The upper boundary of the cropping region. This must be evenly divisible + * by the MCU block height (see #tjMCUHeight.) + */ + int y; + /** + * The width of the cropping region. Setting this to 0 is the equivalent of + * setting it to the width of the source JPEG image - x. + */ + int w; + /** + * The height of the cropping region. Setting this to 0 is the equivalent of + * setting it to the height of the source JPEG image - y. + */ + int h; +} tjregion; + +/** + * Lossless transform + */ +typedef struct tjtransform +{ + /** + * Cropping region + */ + tjregion r; + /** + * One of the @ref TJXOP "transform operations" + */ + int op; + /** + * The bitwise OR of one of more of the @ref TJXOPT_CROP "transform options" + */ + int options; + /** + * Arbitrary data that can be accessed within the body of the callback + * function + */ + void *data; + /** + * A callback function that can be used to modify the DCT coefficients + * after they are losslessly transformed but before they are transcoded to a + * new JPEG image. This allows for custom filters or other transformations + * to be applied in the frequency domain. + * + * @param coeffs pointer to an array of transformed DCT coefficients. (NOTE: + * this pointer is not guaranteed to be valid once the callback + * returns, so applications wishing to hand off the DCT coefficients + * to another function or library should make a copy of them within + * the body of the callback.) + * @param arrayRegion #tjregion structure containing the width and height of + * the array pointed to by coeffs as well as its offset + * relative to the component plane. TurboJPEG implementations may + * choose to split each component plane into multiple DCT coefficient + * arrays and call the callback function once for each array. + * @param planeRegion #tjregion structure containing the width and height of + * the component plane to which coeffs belongs + * @param componentID ID number of the component plane to which + * coeffs belongs (Y, Cb, and Cr have, respectively, ID's of + * 0, 1, and 2 in typical JPEG images.) + * @param transformID ID number of the transformed image to which + * coeffs belongs. This is the same as the index of the + * transform in the transforms array that was passed to + * #tjTransform(). + * @param transform a pointer to a #tjtransform structure that specifies the + * parameters and/or cropping region for this transform + * + * @return 0 if the callback was successful, or -1 if an error occurred. + */ + int (*customFilter)(short *coeffs, tjregion arrayRegion, + tjregion planeRegion, int componentIndex, int transformIndex, + struct tjtransform *transform); +} tjtransform; + +/** + * TurboJPEG instance handle + */ +typedef void* tjhandle; + + +/** + * Pad the given width to the nearest 32-bit boundary + */ +#define TJPAD(width) (((width)+3)&(~3)) + +/** + * Compute the scaled value of dimension using the given scaling + * factor. This macro performs the integer equivalent of ceil(dimension * + * scalingFactor). + */ +#define TJSCALED(dimension, scalingFactor) ((dimension * scalingFactor.num \ + + scalingFactor.denom - 1) / scalingFactor.denom) + + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * Create a TurboJPEG compressor instance. + * + * @return a handle to the newly-created instance, or NULL if an error + * occurred (see #tjGetErrorStr().) + */ +DLLEXPORT tjhandle DLLCALL tjInitCompress(void); + + +/** + * Compress an RGB or grayscale image into a JPEG image. + * + * @param handle a handle to a TurboJPEG compressor or transformer instance + * @param srcBuf pointer to an image buffer containing RGB or grayscale pixels + * to be compressed + * @param width width (in pixels) of the source image + * @param pitch bytes per line of the source image. Normally, this should be + * width * #tjPixelSize[pixelFormat] if the image is unpadded, + * or #TJPAD(width * #tjPixelSize[pixelFormat]) if each line of + * the image is padded to the nearest 32-bit boundary, as is the case + * for Windows bitmaps. You can also be clever and use this parameter + * to skip lines, etc. Setting this parameter to 0 is the equivalent of + * setting it to width * #tjPixelSize[pixelFormat]. + * @param height height (in pixels) of the source image + * @param pixelFormat pixel format of the source image (see @ref TJPF + * "Pixel formats".) + * @param jpegBuf address of a pointer to an image buffer that will receive the + * JPEG image. TurboJPEG has the ability to reallocate the JPEG buffer + * to accommodate the size of the JPEG image. Thus, you can choose to: + * -# pre-allocate the JPEG buffer with an arbitrary size using + * #tjAlloc() and let TurboJPEG grow the buffer as needed, + * -# set *jpegBuf to NULL to tell TurboJPEG to allocate the + * buffer for you, or + * -# pre-allocate the buffer to a "worst case" size determined by + * calling #tjBufSize(). This should ensure that the buffer never has + * to be re-allocated (setting #TJFLAG_NOREALLOC guarantees this.) + * . + * If you choose option 1, *jpegSize should be set to the + * size of your pre-allocated buffer. In any case, unless you have + * set #TJFLAG_NOREALLOC, you should always check *jpegBuf upon + * return from this function, as it may have changed. + * @param jpegSize pointer to an unsigned long variable that holds the size of + * the JPEG image buffer. If *jpegBuf points to a + * pre-allocated buffer, then *jpegSize should be set to the + * size of the buffer. Upon return, *jpegSize will contain the + * size of the JPEG image (in bytes.) + * @param jpegSubsamp the level of chrominance subsampling to be used when + * generating the JPEG image (see @ref TJSAMP + * "Chrominance subsampling options".) + * @param jpegQual the image quality of the generated JPEG image (1 = worst, + 100 = best) + * @param flags the bitwise OR of one or more of the @ref TJFLAG_BOTTOMUP + * "flags". + * + * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) +*/ +DLLEXPORT int DLLCALL tjCompress2(tjhandle handle, unsigned char *srcBuf, + int width, int pitch, int height, int pixelFormat, unsigned char **jpegBuf, + unsigned long *jpegSize, int jpegSubsamp, int jpegQual, int flags); + + +/** + * The maximum size of the buffer (in bytes) required to hold a JPEG image with + * the given parameters. The number of bytes returned by this function is + * larger than the size of the uncompressed source image. The reason for this + * is that the JPEG format uses 16-bit coefficients, and it is thus possible + * for a very high-quality JPEG image with very high-frequency content to + * expand rather than compress when converted to the JPEG format. Such images + * represent a very rare corner case, but since there is no way to predict the + * size of a JPEG image prior to compression, the corner case has to be + * handled. + * + * @param width width of the image (in pixels) + * @param height height of the image (in pixels) + * @param jpegSubsamp the level of chrominance subsampling to be used when + * generating the JPEG image (see @ref TJSAMP + * "Chrominance subsampling options".) + * + * @return the maximum size of the buffer (in bytes) required to hold the + * image, or -1 if the arguments are out of bounds. + */ +DLLEXPORT unsigned long DLLCALL tjBufSize(int width, int height, + int jpegSubsamp); + + +/** + * The size of the buffer (in bytes) required to hold a YUV planar image with + * the given parameters. + * + * @param width width of the image (in pixels) + * @param height height of the image (in pixels) + * @param subsamp level of chrominance subsampling in the image (see + * @ref TJSAMP "Chrominance subsampling options".) + * + * @return the size of the buffer (in bytes) required to hold the image, or + * -1 if the arguments are out of bounds. + */ +DLLEXPORT unsigned long DLLCALL tjBufSizeYUV(int width, int height, + int subsamp); + + +/** + * Encode an RGB or grayscale image into a YUV planar image. This function + * uses the accelerated color conversion routines in TurboJPEG's underlying + * codec to produce a planar YUV image that is suitable for X Video. + * Specifically, if the chrominance components are subsampled along the + * horizontal dimension, then the width of the luminance plane is padded to the + * nearest multiple of 2 in the output image (same goes for the height of the + * luminance plane, if the chrominance components are subsampled along the + * vertical dimension.) Also, each line of each plane in the output image is + * padded to 4 bytes. Although this will work with any subsampling option, it + * is really only useful in combination with TJ_420, which produces an image + * compatible with the I420 (AKA "YUV420P") format. + *

+ * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the + * convention of the digital video community, the TurboJPEG API uses "YUV" to + * refer to an image format consisting of Y, Cb, and Cr image planes. + * + * @param handle a handle to a TurboJPEG compressor or transformer instance + * @param srcBuf pointer to an image buffer containing RGB or grayscale pixels + * to be encoded + * @param width width (in pixels) of the source image + * @param pitch bytes per line of the source image. Normally, this should be + * width * #tjPixelSize[pixelFormat] if the image is unpadded, + * or #TJPAD(width * #tjPixelSize[pixelFormat]) if each line of + * the image is padded to the nearest 32-bit boundary, as is the case + * for Windows bitmaps. You can also be clever and use this parameter + * to skip lines, etc. Setting this parameter to 0 is the equivalent of + * setting it to width * #tjPixelSize[pixelFormat]. + * @param height height (in pixels) of the source image + * @param pixelFormat pixel format of the source image (see @ref TJPF + * "Pixel formats".) + * @param dstBuf pointer to an image buffer that will receive the YUV image. + * Use #tjBufSizeYUV() to determine the appropriate size for this buffer + * based on the image width, height, and level of chrominance + * subsampling. + * @param subsamp the level of chrominance subsampling to be used when + * generating the YUV image (see @ref TJSAMP + * "Chrominance subsampling options".) + * @param flags the bitwise OR of one or more of the @ref TJFLAG_BOTTOMUP + * "flags". + * + * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) +*/ +DLLEXPORT int DLLCALL tjEncodeYUV2(tjhandle handle, + unsigned char *srcBuf, int width, int pitch, int height, int pixelFormat, + unsigned char *dstBuf, int subsamp, int flags); + + +/** + * Create a TurboJPEG decompressor instance. + * + * @return a handle to the newly-created instance, or NULL if an error + * occurred (see #tjGetErrorStr().) +*/ +DLLEXPORT tjhandle DLLCALL tjInitDecompress(void); + + +/** + * Retrieve information about a JPEG image without decompressing it. + * + * @param handle a handle to a TurboJPEG decompressor or transformer instance + * @param jpegBuf pointer to a buffer containing a JPEG image + * @param jpegSize size of the JPEG image (in bytes) + * @param width pointer to an integer variable that will receive the width (in + * pixels) of the JPEG image + * @param height pointer to an integer variable that will receive the height + * (in pixels) of the JPEG image + * @param jpegSubsamp pointer to an integer variable that will receive the + * level of chrominance subsampling used when compressing the JPEG image + * (see @ref TJSAMP "Chrominance subsampling options".) + * + * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) +*/ +DLLEXPORT int DLLCALL tjDecompressHeader2(tjhandle handle, + unsigned char *jpegBuf, unsigned long jpegSize, int *width, int *height, + int *jpegSubsamp); + + +/** + * Returns a list of fractional scaling factors that the JPEG decompressor in + * this implementation of TurboJPEG supports. + * + * @param numscalingfactors pointer to an integer variable that will receive + * the number of elements in the list + * + * @return a pointer to a list of fractional scaling factors, or NULL if an + * error is encountered (see #tjGetErrorStr().) +*/ +DLLEXPORT tjscalingfactor* DLLCALL tjGetScalingFactors(int *numscalingfactors); + + +/** + * Decompress a JPEG image to an RGB or grayscale image. + * + * @param handle a handle to a TurboJPEG decompressor or transformer instance + * @param jpegBuf pointer to a buffer containing the JPEG image to decompress + * @param jpegSize size of the JPEG image (in bytes) + * @param dstBuf pointer to an image buffer that will receive the decompressed + * image. This buffer should normally be pitch * scaledHeight + * bytes in size, where scaledHeight can be determined by + * calling #TJSCALED() with the JPEG image height and one of the scaling + * factors returned by #tjGetScalingFactors(). The dstBuf + * pointer may also be used to decompress into a specific region of a + * larger buffer. + * @param width desired width (in pixels) of the destination image. If this is + * different than the width of the JPEG image being decompressed, then + * TurboJPEG will use scaling in the JPEG decompressor to generate the + * largest possible image that will fit within the desired width. If + * width is set to 0, then only the height will be considered + * when determining the scaled image size. + * @param pitch bytes per line of the destination image. Normally, this is + * scaledWidth * #tjPixelSize[pixelFormat] if the decompressed + * image is unpadded, else #TJPAD(scaledWidth * + * #tjPixelSize[pixelFormat]) if each line of the decompressed + * image is padded to the nearest 32-bit boundary, as is the case for + * Windows bitmaps. (NOTE: scaledWidth can be determined by + * calling #TJSCALED() with the JPEG image width and one of the scaling + * factors returned by #tjGetScalingFactors().) You can also be clever + * and use the pitch parameter to skip lines, etc. Setting this + * parameter to 0 is the equivalent of setting it to scaledWidth + * * #tjPixelSize[pixelFormat]. + * @param height desired height (in pixels) of the destination image. If this + * is different than the height of the JPEG image being decompressed, + * then TurboJPEG will use scaling in the JPEG decompressor to generate + * the largest possible image that will fit within the desired height. + * If height is set to 0, then only the width will be + * considered when determining the scaled image size. + * @param pixelFormat pixel format of the destination image (see @ref + * TJPF "Pixel formats".) + * @param flags the bitwise OR of one or more of the @ref TJFLAG_BOTTOMUP + * "flags". + * + * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) + */ +DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle, + unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, + int width, int pitch, int height, int pixelFormat, int flags); + + +/** + * Decompress a JPEG image to a YUV planar image. This function performs JPEG + * decompression but leaves out the color conversion step, so a planar YUV + * image is generated instead of an RGB image. The padding of the planes in + * this image is the same as in the images generated by #tjEncodeYUV2(). Note + * that, if the width or height of the image is not an even multiple of the MCU + * block size (see #tjMCUWidth and #tjMCUHeight), then an intermediate buffer + * copy will be performed within TurboJPEG. + *

+ * NOTE: Technically, the JPEG format uses the YCbCr colorspace, but per the + * convention of the digital video community, the TurboJPEG API uses "YUV" to + * refer to an image format consisting of Y, Cb, and Cr image planes. + * + * @param handle a handle to a TurboJPEG decompressor or transformer instance + * @param jpegBuf pointer to a buffer containing the JPEG image to decompress + * @param jpegSize size of the JPEG image (in bytes) + * @param dstBuf pointer to an image buffer that will receive the YUV image. + * Use #tjBufSizeYUV() to determine the appropriate size for this buffer + * based on the image width, height, and level of subsampling. + * @param flags the bitwise OR of one or more of the @ref TJFLAG_BOTTOMUP + * "flags". + * + * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) + */ +DLLEXPORT int DLLCALL tjDecompressToYUV(tjhandle handle, + unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, + int flags); + + +/** + * Create a new TurboJPEG transformer instance. + * + * @return a handle to the newly-created instance, or NULL if an error + * occurred (see #tjGetErrorStr().) + */ +DLLEXPORT tjhandle DLLCALL tjInitTransform(void); + + +/** + * Losslessly transform a JPEG image into another JPEG image. Lossless + * transforms work by moving the raw coefficients from one JPEG image structure + * to another without altering the values of the coefficients. While this is + * typically faster than decompressing the image, transforming it, and + * re-compressing it, lossless transforms are not free. Each lossless + * transform requires reading and performing Huffman decoding on all of the + * coefficients in the source image, regardless of the size of the destination + * image. Thus, this function provides a means of generating multiple + * transformed images from the same source or applying multiple + * transformations simultaneously, in order to eliminate the need to read the + * source coefficients multiple times. + * + * @param handle a handle to a TurboJPEG transformer instance + * @param jpegBuf pointer to a buffer containing the JPEG image to transform + * @param jpegSize size of the JPEG image (in bytes) + * @param n the number of transformed JPEG images to generate + * @param dstBufs pointer to an array of n image buffers. dstBufs[i] + * will receive a JPEG image that has been transformed using the + * parameters in transforms[i]. TurboJPEG has the ability to + * reallocate the JPEG buffer to accommodate the size of the JPEG image. + * Thus, you can choose to: + * -# pre-allocate the JPEG buffer with an arbitrary size using + * #tjAlloc() and let TurboJPEG grow the buffer as needed, + * -# set dstBufs[i] to NULL to tell TurboJPEG to allocate the + * buffer for you, or + * -# pre-allocate the buffer to a "worst case" size determined by + * calling #tjBufSize() with the transformed or cropped width and + * height. This should ensure that the buffer never has to be + * re-allocated (setting #TJFLAG_NOREALLOC guarantees this.) + * . + * If you choose option 1, dstSizes[i] should be set to + * the size of your pre-allocated buffer. In any case, unless you have + * set #TJFLAG_NOREALLOC, you should always check dstBufs[i] + * upon return from this function, as it may have changed. + * @param dstSizes pointer to an array of n unsigned long variables that will + * receive the actual sizes (in bytes) of each transformed JPEG image. + * If dstBufs[i] points to a pre-allocated buffer, then + * dstSizes[i] should be set to the size of the buffer. Upon + * return, dstSizes[i] will contain the size of the JPEG image + * (in bytes.) + * @param transforms pointer to an array of n #tjtransform structures, each of + * which specifies the transform parameters and/or cropping region for + * the corresponding transformed output image. + * @param flags the bitwise OR of one or more of the @ref TJFLAG_BOTTOMUP + * "flags". + * + * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) + */ +DLLEXPORT int DLLCALL tjTransform(tjhandle handle, unsigned char *jpegBuf, + unsigned long jpegSize, int n, unsigned char **dstBufs, + unsigned long *dstSizes, tjtransform *transforms, int flags); + + +/** + * Destroy a TurboJPEG compressor, decompressor, or transformer instance. + * + * @param handle a handle to a TurboJPEG compressor, decompressor or + * transformer instance + * + * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) + */ +DLLEXPORT int DLLCALL tjDestroy(tjhandle handle); + + +/** + * Allocate an image buffer for use with TurboJPEG. You should always use + * this function to allocate the JPEG destination buffer(s) for #tjCompress2() + * and #tjTransform() unless you are disabling automatic buffer + * (re)allocation (by setting #TJFLAG_NOREALLOC.) + * + * @param bytes the number of bytes to allocate + * + * @return a pointer to a newly-allocated buffer with the specified number of + * bytes + * + * @sa tjFree() + */ +DLLEXPORT unsigned char* DLLCALL tjAlloc(int bytes); + + +/** + * Free an image buffer previously allocated by TurboJPEG. You should always + * use this function to free JPEG destination buffer(s) that were automatically + * (re)allocated by #tjCompress2() or #tjTransform() or that were manually + * allocated using #tjAlloc(). + * + * @param buffer address of the buffer to free + * + * @sa tjAlloc() + */ +DLLEXPORT void DLLCALL tjFree(unsigned char *buffer); + + +/** + * Returns a descriptive error message explaining why the last command failed. + * + * @return a descriptive error message explaining why the last command failed. + */ +DLLEXPORT char* DLLCALL tjGetErrorStr(void); + + +/* Backward compatibility functions and macros (nothing to see here) */ +#define NUMSUBOPT TJ_NUMSAMP +#define TJ_444 TJSAMP_444 +#define TJ_422 TJSAMP_422 +#define TJ_420 TJSAMP_420 +#define TJ_411 TJSAMP_420 +#define TJ_GRAYSCALE TJSAMP_GRAY + +#define TJ_BGR 1 +#define TJ_BOTTOMUP TJFLAG_BOTTOMUP +#define TJ_FORCEMMX TJFLAG_FORCEMMX +#define TJ_FORCESSE TJFLAG_FORCESSE +#define TJ_FORCESSE2 TJFLAG_FORCESSE2 +#define TJ_ALPHAFIRST 64 +#define TJ_FORCESSE3 TJFLAG_FORCESSE3 +#define TJ_FASTUPSAMPLE TJFLAG_FASTUPSAMPLE +#define TJ_YUV 512 + +DLLEXPORT unsigned long DLLCALL TJBUFSIZE(int width, int height); + +DLLEXPORT unsigned long DLLCALL TJBUFSIZEYUV(int width, int height, + int jpegSubsamp); + +DLLEXPORT int DLLCALL tjCompress(tjhandle handle, unsigned char *srcBuf, + int width, int pitch, int height, int pixelSize, unsigned char *dstBuf, + unsigned long *compressedSize, int jpegSubsamp, int jpegQual, int flags); + +DLLEXPORT int DLLCALL tjEncodeYUV(tjhandle handle, + unsigned char *srcBuf, int width, int pitch, int height, int pixelSize, + unsigned char *dstBuf, int subsamp, int flags); + +DLLEXPORT int DLLCALL tjDecompressHeader(tjhandle handle, + unsigned char *jpegBuf, unsigned long jpegSize, int *width, int *height); + +DLLEXPORT int DLLCALL tjDecompress(tjhandle handle, + unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, + int width, int pitch, int height, int pixelSize, int flags); + + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/portlibs/lib/libjpeg.a b/portlibs/lib/libjpeg.a deleted file mode 100644 index 44394b063bd8c4075dbbbbc7cadd96c8e52041f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180988 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≦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 diff --git a/portlibs/lib/libturbojpeg.a b/portlibs/lib/libturbojpeg.a new file mode 100644 index 0000000000000000000000000000000000000000..7cda9dff315b3b786157e22ba422a7294bd1b23a GIT binary patch literal 345198 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 _wtZB$PVZeGCIM%);sH80; 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 = true; Frame = CurFrame; BufferPos ^= 1; } - VideoF.dealloc(); } bool WiiMovie::Continue() diff --git a/source/gui/WiiMovie.hpp b/source/gui/WiiMovie.hpp index 80319ab7..89f18ac8 100644 --- a/source/gui/WiiMovie.hpp +++ b/source/gui/WiiMovie.hpp @@ -30,6 +30,7 @@ protected: lwp_t ReadThread; ThpVideoFile Video; + VideoFrame VideoF; FILE *vFile; float fps; Timer PlayTime; diff --git a/source/gui/gcvid.cpp b/source/gui/gcvid.cpp index af3bf028..a77dc6b8 100644 --- a/source/gui/gcvid.cpp +++ b/source/gui/gcvid.cpp @@ -30,7 +30,8 @@ #include //memcmp #include #include - +#include +#include "gecko/gecko.hpp" #include "gcvid.h" #include "loader/utils.h" #include "memory/mem2.hpp" @@ -268,11 +269,11 @@ void VideoFrame::resize(int width, int height) _w = width; _h = height; - //24 bpp, 4 byte padding - _p = 3*width; + //32 bpp, 4 byte padding + _p = 4*width; _p += (4 - _p%4)%4; - _data = (u8 *)MEM2_alloc(_p * _h); + data = (u8 *)MEM2_alloc(_p * _h); } int VideoFrame::getWidth() const @@ -284,40 +285,14 @@ int VideoFrame::getHeight() const int VideoFrame::getPitch() const { return _p; } -u8* VideoFrame::getData() -{ return _data; } - -const u8* VideoFrame::getData() const -{ return _data; } - void VideoFrame::dealloc() { - if(_data != NULL) - free(_data); - _data = NULL; + if(data != NULL) + free(data); + data = NULL; _w = _h = _p = 0; } -//swaps red and blue channel of a video frame -void swapRB(VideoFrame& f) -{ - u8* currLine = f.getData(); - - int hyt = f.getHeight(); - int pitch = f.getPitch(); - - for(int y = 0; y < hyt; ++y) - { - for(int x = 0, x2 = 2; x < pitch; x += 3, x2 += 3) - { - u8 t = currLine[x]; - currLine[x] = currLine[x2]; - currLine[x2] = t; - } - currLine += pitch; - } -} - enum FILETYPE { THP, MTH, JPG, @@ -353,9 +328,6 @@ long getFilesize(FILE* f) return ret; } -void decodeJpeg(const u8* data, int size, VideoFrame& dest); - - VideoFile::VideoFile(FILE* f) : loop(true), _f(f) {} @@ -395,9 +367,19 @@ int VideoFile::getMaxAudioSamples() const int VideoFile::getCurrentBuffer(s16*) const { return 0; } -void VideoFile::loadFrame(VideoFrame& frame, const u8* data, int size) const +void VideoFile::loadFrame(VideoFrame& frame, const u8* src, int src_size) { - decodeJpeg(data, size, frame); + //convert format so jpeglib understands it... + int start, end; + int newSize = countRequiredSize(src, src_size, start, end); + u8 *buff = (u8*)MEM2_alloc(newSize); + if(buff != NULL) + { + convertToRealJpeg(buff, src, src_size, start, end); + //...and feed it to jpeglib + decodeRealJpeg(buff, newSize, frame); + MEM2_free(buff); + } } bool ThpVideoFile::Init(FILE *f) @@ -432,6 +414,13 @@ bool ThpVideoFile::Init(FILE *f) _currFrameData = (u8*)MEM2_alloc(_head.maxBufferSize); //include some padding if(_currFrameData == NULL) return false; + _currFrameRealData = (u8*)MEM2_alloc(_head.maxBufferSize * 2); //worst case if a frame has 0xFF + if(_currFrameRealData == NULL) + { + gprintf("couldnt allocate %u bytes!\n", _head.maxBufferSize * 2); + MEM2_free(_currFrameData); + return false; + } loadNextFrame(); return true; } @@ -439,8 +428,11 @@ bool ThpVideoFile::Init(FILE *f) void ThpVideoFile::DeInit() { if(_currFrameData != NULL) - free(_currFrameData); + MEM2_free(_currFrameData); _currFrameData = NULL; + if(_currFrameRealData != NULL) + MEM2_free(_currFrameRealData); + _currFrameRealData = NULL; } int ThpVideoFile::getWidth() const @@ -479,7 +471,15 @@ bool ThpVideoFile::loadNextFrame(bool skip) return true; } -void ThpVideoFile::getCurrentFrame(VideoFrame& f) const +void ThpVideoFile::loadFrame(VideoFrame& frame, const u8* src, int src_size) +{ + int start, end; + int newSize = countRequiredSize(src, src_size, start, end); + convertToRealJpeg(_currFrameRealData, src, src_size, start, end); + decodeRealJpeg(_currFrameRealData, newSize, frame); +} + +void ThpVideoFile::getCurrentFrame(VideoFrame& f) { int size = *(u32*)(_currFrameData + 8); loadFrame(f, _currFrameData + 4 * _numInts, size); @@ -576,7 +576,7 @@ bool MthVideoFile::loadNextFrame(bool skip) return true; } -void MthVideoFile::getCurrentFrame(VideoFrame& f) const +void MthVideoFile::getCurrentFrame(VideoFrame& f) { int size = _thisFrameSize; loadFrame(f, &_currFrameData[0] + 4, size - 4); @@ -601,10 +601,10 @@ int JpgVideoFile::getHeight() const int JpgVideoFile::getFrameCount() const { return 1; } -void JpgVideoFile::getCurrentFrame(VideoFrame& f) const +void JpgVideoFile::getCurrentFrame(VideoFrame& f) { f.resize(_currFrame.getWidth(), _currFrame.getHeight()); - memcpy(f.getData(), _currFrame.getData(),f.getPitch()*f.getHeight()); + memcpy(f.data, _currFrame.data,f.getPitch()*f.getHeight()); } VideoFile* openVideo(const string& fileName) @@ -650,37 +650,37 @@ void closeVideo(VideoFile*& vf) u8 endBytesThp[] = { 0xff, 0xd9, 0, 0 }; //used in thp files u8 endBytesMth[] = { 0xff, 0xd9, 0xff, 0 }; //used in mth files -int countRequiredSize(const u8* data, int size, int& start, int& end) +int VideoFile::countRequiredSize(const u8* src, int src_size, int& start, int& end) { - start = 2*size; - end = size; + start = 2*src_size; + end = src_size; int count = 0; int j; - for(j = size - 1; data[j] == 0; --j) + for(j = src_size - 1; src[j] == 0; --j) ; //search end of data - if(data[j] == 0xd9) //thp file + if(src[j] == 0xd9) //thp file end = j - 1; - else if(data[j] == 0xff) //mth file + else if(src[j] == 0xff) //mth file end = j - 2; for(int i = 0; i < end; ++i) { - if(data[i] == 0xff) + if(src[i] == 0xff) { //if i == srcSize - 1, then this would normally overrun src - that's why 4 padding //bytes are included at the end of src - if(data[i + 1] == 0xda && start == 2*size) + if(src[i + 1] == 0xda && start == 2*src_size) start = i; if(i > start) ++count; } } - return size + count; + return src_size + count; } -void convertToRealJpeg(u8* dest, const u8* src, int srcSize, int start, int end) +void VideoFile::convertToRealJpeg(u8* dest, const u8* src, int srcSize, int start, int end) { int di = 0; for(int i = 0; i < srcSize; ++i, ++di) @@ -696,135 +696,22 @@ void convertToRealJpeg(u8* dest, const u8* src, int srcSize, int start, int end) } } -void decodeJpeg(const u8* data, int size, VideoFrame& dest) -{ - //convert format so jpeglib understands it... - int start, end; - int newSize = countRequiredSize(data, size, start, end); - u8 *buff = (u8*)MEM2_alloc(newSize); - convertToRealJpeg(buff, data, size, start, end); - - //...and feed it to jpeglib - decodeRealJpeg(buff, newSize, dest); - MEM2_free(buff); -} - -extern "C" -{ -#include -#include -} - -//the following functions are needed to let -//libjpeg read from memory instead of from a file... -//it's a little clumsy to do :-| -const u8* g_jpegBuffer; -int g_jpegSize; bool g_isLoading = false; - -void jpegInitSource(j_decompress_ptr) -{} - -boolean jpegFillInputBuffer(j_decompress_ptr cinfo) -{ - cinfo->src->next_input_byte = g_jpegBuffer; - cinfo->src->bytes_in_buffer = g_jpegSize; - return TRUE; -} - -void jpegSkipInputData(j_decompress_ptr cinfo, long num_bytes) -{ - cinfo->src->next_input_byte += num_bytes; - cinfo->src->bytes_in_buffer -= num_bytes; -} - -boolean jpegResyncToRestart(j_decompress_ptr cinfo, int desired) -{ - jpeg_resync_to_restart(cinfo, desired); - return TRUE; -} - -void jpegTermSource(j_decompress_ptr) -{} - -void jpegErrorHandler(j_common_ptr cinfo) -{ - char buff[1024]; - (*cinfo->err->format_message)(cinfo, buff); - //MessageBox(g_hWnd, buff, "JpegLib error:", MB_OK); -} - void decodeRealJpeg(const u8* data, int size, VideoFrame& dest, bool fancy) { if(g_isLoading) return; g_isLoading = true; - //decompressor state - jpeg_decompress_struct cinfo; - jpeg_error_mgr errorMgr; - - //read from memory manager - jpeg_source_mgr sourceMgr; - - cinfo.err = jpeg_std_error(&errorMgr); - errorMgr.error_exit = jpegErrorHandler; - - jpeg_create_decompress(&cinfo); - - //setup read-from-memory - g_jpegBuffer = data; - g_jpegSize = size; - sourceMgr.bytes_in_buffer = size; - sourceMgr.next_input_byte = data; - sourceMgr.init_source = jpegInitSource; - sourceMgr.fill_input_buffer = jpegFillInputBuffer; - sourceMgr.skip_input_data = jpegSkipInputData; - sourceMgr.resync_to_restart = jpegResyncToRestart; - sourceMgr.term_source = jpegTermSource; - cinfo.src = &sourceMgr; - - jpeg_read_header(&cinfo, TRUE); - if(fancy) - { - cinfo.do_fancy_upsampling = TRUE; - cinfo.do_block_smoothing = TRUE; - cinfo.dct_method = JDCT_ISLOW; - jpeg_start_decompress(&cinfo); - dest.resize(ALIGN(4, cinfo.output_width), ALIGN(4, cinfo.output_height)); - } - else - { - cinfo.do_fancy_upsampling = FALSE; - cinfo.do_block_smoothing = FALSE; - jpeg_start_decompress(&cinfo); - dest.resize(cinfo.output_width, cinfo.output_height); - } - if(cinfo.num_components == 3) - { - int y = 0; - while(cinfo.output_scanline < cinfo.output_height) - { - //invert image because windows wants it downside up - u8* destBuffer = &dest.getData()[(dest.getHeight() - y - 1)*dest.getPitch()]; - - //NO idea why jpeglib wants a pointer to a pointer - jpeg_read_scanlines(&cinfo, &destBuffer, 1); - ++y; - } - - //jpeglib gives an error in jpeg_finish_decompress() if no all - //scanlines are read by the application... :-| - //(but because we read all scanlines, it's not really needed) - cinfo.output_scanline = cinfo.output_height; - - } - else - { - //MessageBox(g_hWnd, "Only RGB videos are currently supported.", "oops?", MB_OK); - } - - jpeg_finish_decompress(&cinfo); - jpeg_destroy_decompress(&cinfo); + /* init turbojpeg */ + u8 *src = (u8*)data; + int jpegSubsamp, width, height; + tjhandle _jpegDecompressor = tjInitDecompress(); + tjDecompressHeader2(_jpegDecompressor, src, size, &width, &height, &jpegSubsamp); + /* decode to buffer */ + dest.resize(width, height); + tjDecompress2(_jpegDecompressor, src, size, dest.data, width, 0, height, + TJPF_RGBA, fancy ? TJFLAG_ACCURATEDCT : (TJFLAG_FASTDCT | TJFLAG_FASTUPSAMPLE)); + tjDestroy(_jpegDecompressor); g_isLoading = false; } diff --git a/source/gui/gcvid.h b/source/gui/gcvid.h index d8db657a..b11b12e6 100644 --- a/source/gui/gcvid.h +++ b/source/gui/gcvid.h @@ -186,21 +186,19 @@ struct MthHeader class VideoFrame { public: - VideoFrame() : _data(NULL), _w(0), _h(0), _p(0) { }; + VideoFrame() : data(NULL), _w(0), _h(0), _p(0) { }; ~VideoFrame() { }; + u8 *data; //texdata style void resize(int width, int height); int getWidth() const; int getHeight() const; int getPitch() const; - u8* getData(); - const u8* getData() const; void dealloc(); private: - u8* _data; int _w; int _h; int _p; //pitch in bytes @@ -210,9 +208,6 @@ class VideoFrame VideoFrame& operator=(const VideoFrame& f); }; -//swaps red and blue channel of a video frame -void swapRB(VideoFrame& f); - class VideoFile { @@ -229,7 +224,7 @@ class VideoFile virtual bool loadNextFrame(bool skip = false) = 0; - virtual void getCurrentFrame(VideoFrame& frame) const = 0; + virtual void getCurrentFrame(VideoFrame& frame) = 0; //sound support: virtual bool hasSound() const; @@ -244,8 +239,10 @@ class VideoFile FILE* _f; //void loadFrame(long offset, int size); - void loadFrame(VideoFrame& frame, const u8* data, int size) const; + virtual void loadFrame(VideoFrame& frame, const u8* src, int src_size); + int countRequiredSize(const u8* src, int src_size, int& start, int& end); + void convertToRealJpeg(u8* dest, const u8* src, int srcSize, int start, int end); }; VideoFile* openVideo(const std::string& fileName); @@ -269,14 +266,14 @@ class ThpVideoFile : public VideoFile virtual bool loadNextFrame(bool skip = false); - virtual void getCurrentFrame(VideoFrame& frame) const; + virtual void getCurrentFrame(VideoFrame& frame); virtual bool hasSound() const; virtual int getNumChannels() const; virtual int getFrequency() const; virtual int getMaxAudioSamples() const; virtual int getCurrentBuffer(s16* data) const; - + virtual void loadFrame(VideoFrame& frame, const u8* src, int src_size); protected: ThpHeader _head; @@ -289,6 +286,7 @@ class ThpVideoFile : public VideoFile int _nextFrameOffset; int _nextFrameSize; u8 *_currFrameData; + u8 *_currFrameRealData; }; class MthVideoFile : public VideoFile @@ -305,7 +303,7 @@ class MthVideoFile : public VideoFile virtual bool loadNextFrame(bool skip = false); - virtual void getCurrentFrame(VideoFrame& frame) const; + virtual void getCurrentFrame(VideoFrame& frame); protected: MthHeader _head; @@ -327,7 +325,7 @@ class JpgVideoFile : public VideoFile virtual int getFrameCount() const; virtual bool loadNextFrame(bool skip = false) { return skip; } - virtual void getCurrentFrame(VideoFrame& frame) const; + virtual void getCurrentFrame(VideoFrame& frame); private: VideoFrame _currFrame; diff --git a/source/gui/texture.cpp b/source/gui/texture.cpp index b940a4fe..b1ac152f 100644 --- a/source/gui/texture.cpp +++ b/source/gui/texture.cpp @@ -41,30 +41,6 @@ static inline u32 coordsRGB565(u32 x, u32 y, u32 w) return (((y >> 2) * (w >> 2) + (x >> 2)) << 4) + ((y & 3) << 2) + (x & 3); } -static inline void _convertToFlippedRGBA(u8 *dst, const u8 *src, u32 width, u32 height) -{ - for(u32 block = 0; block < height; block += 4) - { - for(u32 i = 0; i < width; i += 4) - { - for(u32 c = 0; c < 4; ++c) - { - for(u32 rgb = 0; rgb < 4; ++rgb) - { - u32 y = height - 1 - (c + block); - u32 x = rgb + i; - u32 dst_offset = (x + y * width) * 4; - u32 src_offset = (x + ((block + c) * width)) * 3; - /* RGB */ - memcpy(&dst[dst_offset], &src[src_offset], 3); - /* Alpha */ - dst[dst_offset + 3] = 0xFF; - } - } - } - } -} - static inline void _convertToRGBA(u8 *dst, const u8 *src, u32 width, u32 height) { for (u32 y = 0; y < height; ++y) @@ -276,28 +252,7 @@ TexErr STexture::fromTHP(TexData *dest, const u8 *src, u32 w, u32 h) return TE_NOMEM; } } - for(u32 block = 0; block < dest->height; block += 4) - { - for(u32 i = 0; i < dest->width; i += 4) - { - for(u32 c = 0; c < 4; ++c) - { - for(u32 argb = 0; argb < 4; ++argb) - { - u32 y = h - 1 - (c + block); - u32 x = argb + i; - u32 src_offset = ((i + argb) + ((block + c) * dest->width)) * 3; - u32 dst_offset = coordsRGBA8(x, y, dest->width); - /* Alpha */ - dest->data[dst_offset] = 0xFF; - /* RGB */ - dest->data[dst_offset + 1] = src[src_offset]; - dest->data[dst_offset + 32] = src[src_offset + 1]; - dest->data[dst_offset + 33] = src[src_offset + 2]; - } - } - } - } + _convertToRGBA8(dest->data, src, w, h); DCFlushRange(dest->data, dest->dataSize); return TE_OK; } @@ -309,26 +264,15 @@ TexErr STexture::fromJPG(TexData &dest, const u8 *buffer, const u32 buffer_size, // Decode our JPG to raw VideoFrame VideoF; decodeRealJpeg(buffer, buffer_size, VideoF, true); - if(!VideoF.getData()) + if(!VideoF.data) + { + VideoF.dealloc(); return TE_ERROR; - dest.data = VideoF.getData(); + } + dest.data = NULL; dest.width = VideoF.getWidth(); dest.height = VideoF.getHeight(); - // Convert our raw stuff to a usable format - u8 *rawData = (u8*)MEM2_alloc(dest.width * dest.height * 4); - if(rawData == NULL) - { - Cleanup(dest); - return TE_NOMEM; - } - _convertToFlippedRGBA(rawData, dest.data, dest.width, dest.height); - - //Free our raw stuff - VideoF.dealloc(); - dest.data = NULL; - - //Let the real work begin u8 maxLODTmp = 0; u8 minLODTmp = 0; u32 baseWidth; @@ -349,10 +293,11 @@ TexErr STexture::fromJPG(TexData &dest, const u8 *buffer, const u32 buffer_size, _calcMipMaps(maxLODTmp, minLODTmp, baseWidth, baseHeight, dest.width, dest.height, minMipSize, maxMipSize); if (maxLODTmp > 0) { - rawData = _genMipMaps(rawData, dest.width, dest.height, maxLODTmp, baseWidth, baseHeight); + u8 *rawData = _genMipMaps(VideoF.data, dest.width, dest.height, maxLODTmp, baseWidth, baseHeight); if(rawData == NULL) { Cleanup(dest); + VideoF.dealloc(); return TE_NOMEM; } u32 newWidth = baseWidth; @@ -368,6 +313,7 @@ TexErr STexture::fromJPG(TexData &dest, const u8 *buffer, const u32 buffer_size, { Cleanup(dest); free(rawData); + VideoF.dealloc(); return TE_NOMEM; } u32 nWidth = newWidth; @@ -395,6 +341,7 @@ TexErr STexture::fromJPG(TexData &dest, const u8 *buffer, const u32 buffer_size, nWidth >>= 1; nHeight >>= 1; } + free(rawData); dest.maxLOD = maxLODTmp - minLODTmp; dest.width = newWidth; dest.height = newHeight; @@ -406,24 +353,24 @@ TexErr STexture::fromJPG(TexData &dest, const u8 *buffer, const u32 buffer_size, if(dest.data == NULL) { Cleanup(dest); - free(rawData); + VideoF.dealloc(); return TE_NOMEM; } switch(f) { case GX_TF_RGBA8: - _convertToRGBA8(dest.data, rawData, dest.width, dest.height); + _convertToRGBA8(dest.data, VideoF.data, dest.width, dest.height); break; case GX_TF_RGB565: - _convertToRGB565(dest.data, rawData, dest.width, dest.height); + _convertToRGB565(dest.data, VideoF.data, dest.width, dest.height); break; case GX_TF_CMPR: - _convertToCMPR(dest.data, rawData, dest.width, dest.height); + _convertToCMPR(dest.data, VideoF.data, dest.width, dest.height); break; } } + VideoF.dealloc(); DCFlushRange(dest.data, dest.dataSize); - free(rawData); return TE_OK; } @@ -706,7 +653,7 @@ void STexture::_calcMipMaps(u8 &maxLOD, u8 &minLOD, u32 &lod0Width, u32 &lod0Hei maxLOD = minLOD; } -u8 *STexture::_genMipMaps(u8 *src, u32 width, u32 height, u8 maxLOD, u32 lod0Width, u32 lod0Height) +u8 *STexture::_genMipMaps(u8 *&src, u32 width, u32 height, u8 maxLOD, u32 lod0Width, u32 lod0Height) { u32 bufSize = fixGX_GetTexBufferSize(lod0Width, lod0Height, GX_TF_RGBA8, GX_TRUE, maxLOD); u8 *dstData = (u8*)MEM2_alloc(bufSize); diff --git a/source/menu/menu_game.cpp b/source/menu/menu_game.cpp index c3483fb5..cb67535d 100644 --- a/source/menu/menu_game.cpp +++ b/source/menu/menu_game.cpp @@ -366,6 +366,26 @@ void CMenu::_cleanupVideo() movie.DeInit(); } +static const char *getVideoPath(const string &videoDir, const char *videoId) +{ + const char *coverDir = m_plugin.GetCoverFolderName(CoverFlow.getHdr()->settings[0]); + const char *videoPath = NULL; + if(coverDir == NULL || strlen(coverDir) == 0) + videoPath = fmt("%s/%s", videoDir.c_str(), videoId); + else + videoPath = fmt("%s/%s/%s", videoDir.c_str(), coverDir, videoId); + return videoPath; +} + +static const char *getVideoDefaultPath(const string &videoDir) +{ + char PluginMagicWord[9]; + memset(PluginMagicWord, 0, sizeof(PluginMagicWord)); + strncpy(PluginMagicWord, fmt("%08x", CoverFlow.getHdr()->settings[0]), 8); + const char *videoPath = fmt("%s/%s", videoDir.c_str(), PluginMagicWord); + return videoPath; +} + bool CMenu::_startVideo() { char curId3[4]; @@ -376,15 +396,21 @@ bool CMenu::_startVideo() memcpy(curId3, CoverFlow.getId(), 3); videoId = curId3; } - const char *videoPath = fmt("%s/%s.thp", m_videoDir.c_str(), videoId); - if(fsop_FileExist(videoPath)) + const char *videoPath = getVideoPath(m_videoDir, videoId); + const char *THP_Path = fmt("%s.thp", videoPath); + if(!fsop_FileExist(THP_Path) && m_current_view == COVERFLOW_PLUGIN) { - m_gameSound.Stop(); + videoPath = getVideoDefaultPath(m_videoDir); + THP_Path = fmt("%s.thp", videoPath); + } + if(fsop_FileExist(THP_Path)) + { + m_gameSound.FreeMemory(); MusicPlayer.Stop(); m_banner.SetShowBanner(false); /* Lets play the movie */ - movie.Init(videoPath); - m_gameSound.Load(fmt("%s/%s.ogg", m_videoDir.c_str(), videoId)); + movie.Init(THP_Path); + m_gameSound.Load(fmt("%s.ogg", videoPath)); m_gameSound.SetVolume(m_cfg.getInt("GENERAL", "sound_volume_bnr", 255)); m_video_playing = true; m_gameSound.Play(); @@ -400,7 +426,9 @@ void CMenu::_game(bool launch) m_zoom_banner = m_cfg.getBool(_domainFromView(), "show_full_banner", false); if(NoGameID(CoverFlow.getHdr()->type)) { - m_zoom_banner = m_zoom_banner && fsop_FileExist(fmt("%s/%s.thp", m_videoDir.c_str(), CoverFlow.getPathId(CoverFlow.getHdr()))); + bool video_available = (m_current_view == COVERFLOW_PLUGIN && fsop_FileExist(fmt("%s.thp", getVideoDefaultPath(m_videoDir)))) || + fsop_FileExist(fmt("%s.thp", getVideoPath(m_videoDir, CoverFlow.getPathId(CoverFlow.getHdr())))); + m_zoom_banner = m_zoom_banner && video_available; m_cfg.setBool(_domainFromView(), "show_full_banner", m_zoom_banner); } currentMoviePos = (m_zoom_banner ? zoomedMoviePos : normalMoviePos);