parent
0c983d38fc
commit
652bb63b61
@ -0,0 +1,2 @@
|
||||
DIST FreeImage3154.pdf 1007480 BLAKE2B 801d39c4b7eeab833c7225c2d53a3a0e8e9d2a91ea3f7173047705c8b750706f3a4a9ac60f7ba9d5e8150b548bd5add242e9e40f498c57ad9e5a623972bbb239 SHA512 cebde5e2609c9a0c06b4e07e1c595d7d6714895095cd9935f59c8b2ff9b34116248f5453b41f469f6242d87cae79be82d59f6a9ec0f75b1ea3df61ac1f651b28
|
||||
DIST FreeImage3154.zip 5513923 BLAKE2B 376b00faaae2c10c9eb36f89726a022734e109ca7ca11951c9e6525f21d2a7ee305ec195be29a272ecb7935ba5d0b61f3d84f26a6aec5f7a9229d5e47cd665bb SHA512 0db9eb7d0ed8e08e10ff4fa274c4484541ca119c3d437a85fdc3b2d9232bf14a7877c79b1e62c8c99278d7020a9f623c161f2342475f3ee526233404138112cc
|
@ -0,0 +1,214 @@
|
||||
--- a/Source/FreeImage/PluginPCX.cpp
|
||||
+++ b/Source/FreeImage/PluginPCX.cpp
|
||||
@@ -30,7 +30,7 @@
|
||||
// Constants + headers
|
||||
// ----------------------------------------------------------
|
||||
|
||||
-#define IO_BUF_SIZE 2048
|
||||
+#define PCX_IO_BUF_SIZE 2048
|
||||
|
||||
// ----------------------------------------------------------
|
||||
|
||||
@@ -120,17 +120,17 @@
|
||||
|
||||
while (length--) {
|
||||
if (count == 0) {
|
||||
- if (*ReadPos >= IO_BUF_SIZE - 1 ) {
|
||||
- if (*ReadPos == IO_BUF_SIZE - 1) {
|
||||
+ if (*ReadPos >= PCX_IO_BUF_SIZE - 1 ) {
|
||||
+ if (*ReadPos == PCX_IO_BUF_SIZE - 1) {
|
||||
// we still have one BYTE, copy it to the start pos
|
||||
|
||||
- *ReadBuf = ReadBuf[IO_BUF_SIZE - 1];
|
||||
+ *ReadBuf = ReadBuf[PCX_IO_BUF_SIZE - 1];
|
||||
|
||||
- io.read_proc(ReadBuf + 1, 1, IO_BUF_SIZE - 1, handle);
|
||||
+ io.read_proc(ReadBuf + 1, 1, PCX_IO_BUF_SIZE - 1, handle);
|
||||
} else {
|
||||
// read the complete buffer
|
||||
|
||||
- io.read_proc(ReadBuf, 1, IO_BUF_SIZE, handle);
|
||||
+ io.read_proc(ReadBuf, 1, PCX_IO_BUF_SIZE, handle);
|
||||
}
|
||||
|
||||
*ReadPos = 0;
|
||||
@@ -346,19 +346,9 @@
|
||||
BOOL header_only = (flags & FIF_LOAD_NOPIXELS) == FIF_LOAD_NOPIXELS;
|
||||
|
||||
try {
|
||||
- // check PCX identifier
|
||||
-
|
||||
- long start_pos = io->tell_proc(handle);
|
||||
- BOOL validated = pcx_validate(io, handle);
|
||||
- io->seek_proc(handle, start_pos, SEEK_SET);
|
||||
- if(!validated) {
|
||||
- throw FI_MSG_ERROR_MAGIC_NUMBER;
|
||||
- }
|
||||
-
|
||||
- // process the header
|
||||
-
|
||||
PCXHEADER header;
|
||||
|
||||
+ // process the header
|
||||
if(io->read_proc(&header, sizeof(PCXHEADER), 1, handle) != 1) {
|
||||
throw FI_MSG_ERROR_PARSING;
|
||||
}
|
||||
@@ -366,20 +356,38 @@
|
||||
SwapHeader(&header);
|
||||
#endif
|
||||
|
||||
- // allocate a new DIB
|
||||
+ // process the window
|
||||
+ const WORD *window = header.window; // left, upper, right,lower pixel coord.
|
||||
+ const int left = window[0];
|
||||
+ const int top = window[1];
|
||||
+ const int right = window[2];
|
||||
+ const int bottom = window[3];
|
||||
|
||||
- unsigned width = header.window[2] - header.window[0] + 1;
|
||||
- unsigned height = header.window[3] - header.window[1] + 1;
|
||||
- unsigned bitcount = header.bpp * header.planes;
|
||||
+ // check image size
|
||||
+ if((left >= right) || (top >= bottom)) {
|
||||
+ throw FI_MSG_ERROR_PARSING;
|
||||
+ }
|
||||
|
||||
- if (bitcount == 24) {
|
||||
- dib = FreeImage_AllocateHeader(header_only, width, height, bitcount, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
|
||||
- } else {
|
||||
- dib = FreeImage_AllocateHeader(header_only, width, height, bitcount);
|
||||
+ const unsigned width = right - left + 1;
|
||||
+ const unsigned height = bottom - top + 1;
|
||||
+ const unsigned bitcount = header.bpp * header.planes;
|
||||
+
|
||||
+ // allocate a new dib
|
||||
+ switch(bitcount) {
|
||||
+ case 1:
|
||||
+ case 4:
|
||||
+ case 8:
|
||||
+ dib = FreeImage_AllocateHeader(header_only, width, height, bitcount);
|
||||
+ break;
|
||||
+ case 24:
|
||||
+ dib = FreeImage_AllocateHeader(header_only, width, height, bitcount, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
|
||||
+ break;
|
||||
+ default:
|
||||
+ throw FI_MSG_ERROR_DIB_MEMORY;
|
||||
+ break;
|
||||
}
|
||||
|
||||
// if the dib couldn't be allocated, throw an error
|
||||
-
|
||||
if (!dib) {
|
||||
throw FI_MSG_ERROR_DIB_MEMORY;
|
||||
}
|
||||
@@ -426,19 +434,23 @@
|
||||
|
||||
if (palette_id == 0x0C) {
|
||||
BYTE *cmap = (BYTE*)malloc(768 * sizeof(BYTE));
|
||||
- io->read_proc(cmap, 768, 1, handle);
|
||||
|
||||
- pal = FreeImage_GetPalette(dib);
|
||||
- BYTE *pColormap = &cmap[0];
|
||||
+ if(cmap) {
|
||||
+ io->read_proc(cmap, 768, 1, handle);
|
||||
|
||||
- for(int i = 0; i < 256; i++) {
|
||||
- pal[i].rgbRed = pColormap[0];
|
||||
- pal[i].rgbGreen = pColormap[1];
|
||||
- pal[i].rgbBlue = pColormap[2];
|
||||
- pColormap += 3;
|
||||
+ pal = FreeImage_GetPalette(dib);
|
||||
+ BYTE *pColormap = &cmap[0];
|
||||
+
|
||||
+ for(int i = 0; i < 256; i++) {
|
||||
+ pal[i].rgbRed = pColormap[0];
|
||||
+ pal[i].rgbGreen = pColormap[1];
|
||||
+ pal[i].rgbBlue = pColormap[2];
|
||||
+ pColormap += 3;
|
||||
+ }
|
||||
+
|
||||
+ free(cmap);
|
||||
}
|
||||
|
||||
- free(cmap);
|
||||
}
|
||||
|
||||
// wrong palette ID, perhaps a gray scale is needed ?
|
||||
@@ -463,12 +475,12 @@
|
||||
return dib;
|
||||
}
|
||||
|
||||
- // calculate the line length for the PCX and the DIB
|
||||
+ // calculate the line length for the PCX and the dib
|
||||
|
||||
// length of raster line in bytes
|
||||
- unsigned linelength = header.bytes_per_line * header.planes;
|
||||
- // length of DIB line (rounded to DWORD) in bytes
|
||||
- unsigned pitch = FreeImage_GetPitch(dib);
|
||||
+ const unsigned linelength = header.bytes_per_line * header.planes;
|
||||
+ // length of dib line (rounded to DWORD) in bytes
|
||||
+ const unsigned pitch = FreeImage_GetPitch(dib);
|
||||
|
||||
// run-length encoding ?
|
||||
|
||||
@@ -478,14 +490,18 @@
|
||||
// ---------------
|
||||
|
||||
line = (BYTE*)malloc(linelength * sizeof(BYTE));
|
||||
- if(!line) throw FI_MSG_ERROR_MEMORY;
|
||||
+ if(!line) {
|
||||
+ throw FI_MSG_ERROR_MEMORY;
|
||||
+ }
|
||||
|
||||
- ReadBuf = (BYTE*)malloc(IO_BUF_SIZE * sizeof(BYTE));
|
||||
- if(!ReadBuf) throw FI_MSG_ERROR_MEMORY;
|
||||
+ ReadBuf = (BYTE*)malloc(PCX_IO_BUF_SIZE * sizeof(BYTE));
|
||||
+ if(!ReadBuf) {
|
||||
+ throw FI_MSG_ERROR_MEMORY;
|
||||
+ }
|
||||
|
||||
bits = FreeImage_GetScanLine(dib, height - 1);
|
||||
|
||||
- int ReadPos = IO_BUF_SIZE;
|
||||
+ int ReadPos = PCX_IO_BUF_SIZE;
|
||||
|
||||
if ((header.planes == 1) && ((header.bpp == 1) || (header.bpp == 8))) {
|
||||
BYTE skip;
|
||||
@@ -497,7 +513,7 @@
|
||||
// skip trailing garbage at the end of the scanline
|
||||
|
||||
for (unsigned count = written; count < linelength; count++) {
|
||||
- if (ReadPos < IO_BUF_SIZE) {
|
||||
+ if (ReadPos < PCX_IO_BUF_SIZE) {
|
||||
ReadPos++;
|
||||
} else {
|
||||
io->read_proc(&skip, sizeof(BYTE), 1, handle);
|
||||
@@ -513,7 +529,9 @@
|
||||
unsigned x, y, written;
|
||||
|
||||
buffer = (BYTE*)malloc(width * sizeof(BYTE));
|
||||
- if(!buffer) throw FI_MSG_ERROR_MEMORY;
|
||||
+ if(!buffer) {
|
||||
+ throw FI_MSG_ERROR_MEMORY;
|
||||
+ }
|
||||
|
||||
for (y = 0; y < height; y++) {
|
||||
written = readline(*io, handle, line, linelength, bIsRLE, ReadBuf, &ReadPos);
|
||||
@@ -532,7 +550,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- // then write the DIB row
|
||||
+ // then write the dib row
|
||||
|
||||
for (x = 0; x < width / 2; x++) {
|
||||
bits[x] = (buffer[2*x] << 4) | buffer[2*x+1];
|
||||
@@ -541,7 +559,7 @@
|
||||
// skip trailing garbage at the end of the scanline
|
||||
|
||||
for (unsigned count = written; count < linelength; count++) {
|
||||
- if (ReadPos < IO_BUF_SIZE) {
|
||||
+ if (ReadPos < PCX_IO_BUF_SIZE) {
|
||||
ReadPos++;
|
||||
} else {
|
||||
io->read_proc(&skip, sizeof(BYTE), 1, handle);
|
@ -0,0 +1,23 @@
|
||||
--- a/Source/FreeImage/PluginXPM.cpp
|
||||
+++ b/Source/FreeImage/PluginXPM.cpp
|
||||
@@ -181,6 +181,11 @@
|
||||
}
|
||||
free(str);
|
||||
|
||||
+ // check info string
|
||||
+ if((width <= 0) || (height <= 0) || (colors <= 0) || (cpp <= 0)) {
|
||||
+ throw "Improperly formed info string";
|
||||
+ }
|
||||
+
|
||||
if (colors > 256) {
|
||||
dib = FreeImage_AllocateHeader(header_only, width, height, 24, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
|
||||
} else {
|
||||
@@ -193,7 +198,7 @@
|
||||
FILE_RGBA rgba;
|
||||
|
||||
str = ReadString(io, handle);
|
||||
- if(!str)
|
||||
+ if(!str || (strlen(str) < cpp))
|
||||
throw "Error reading color strings";
|
||||
|
||||
std::string chrs(str,cpp); //create a string for the color chars using the first cpp chars
|
@ -0,0 +1,11 @@
|
||||
--- a/Source/FreeImage/PluginXPM.cpp
|
||||
+++ b/Source/FreeImage/PluginXPM.cpp
|
||||
@@ -198,7 +198,7 @@
|
||||
FILE_RGBA rgba;
|
||||
|
||||
str = ReadString(io, handle);
|
||||
- if(!str || (strlen(str) < cpp))
|
||||
+ if(!str || (strlen(str) < (size_t)cpp))
|
||||
throw "Error reading color strings";
|
||||
|
||||
std::string chrs(str,cpp); //create a string for the color chars using the first cpp chars
|
@ -0,0 +1,121 @@
|
||||
diff --git a/Source/FreeImage/PluginJPEG.cpp b/Source/FreeImage/PluginJPEG.cpp
|
||||
index b3bc9f2..e5111c0 100644
|
||||
--- a/Source/FreeImage/PluginJPEG.cpp
|
||||
+++ b/Source/FreeImage/PluginJPEG.cpp
|
||||
@@ -484,116 +484,6 @@ marker_is_icc(jpeg_saved_marker_ptr marker) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
-/**
|
||||
- See if there was an ICC profile in the JPEG file being read;
|
||||
- if so, reassemble and return the profile data.
|
||||
-
|
||||
- TRUE is returned if an ICC profile was found, FALSE if not.
|
||||
- If TRUE is returned, *icc_data_ptr is set to point to the
|
||||
- returned data, and *icc_data_len is set to its length.
|
||||
-
|
||||
- IMPORTANT: the data at **icc_data_ptr has been allocated with malloc()
|
||||
- and must be freed by the caller with free() when the caller no longer
|
||||
- needs it. (Alternatively, we could write this routine to use the
|
||||
- IJG library's memory allocator, so that the data would be freed implicitly
|
||||
- at jpeg_finish_decompress() time. But it seems likely that many apps
|
||||
- will prefer to have the data stick around after decompression finishes.)
|
||||
-
|
||||
- NOTE: if the file contains invalid ICC APP2 markers, we just silently
|
||||
- return FALSE. You might want to issue an error message instead.
|
||||
-*/
|
||||
-static BOOL
|
||||
-jpeg_read_icc_profile(j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned *icc_data_len) {
|
||||
- jpeg_saved_marker_ptr marker;
|
||||
- int num_markers = 0;
|
||||
- int seq_no;
|
||||
- JOCTET *icc_data;
|
||||
- unsigned total_length;
|
||||
-
|
||||
- const int MAX_SEQ_NO = 255; // sufficient since marker numbers are bytes
|
||||
- BYTE marker_present[MAX_SEQ_NO+1]; // 1 if marker found
|
||||
- unsigned data_length[MAX_SEQ_NO+1]; // size of profile data in marker
|
||||
- unsigned data_offset[MAX_SEQ_NO+1]; // offset for data in marker
|
||||
-
|
||||
- *icc_data_ptr = NULL; // avoid confusion if FALSE return
|
||||
- *icc_data_len = 0;
|
||||
-
|
||||
- /**
|
||||
- this first pass over the saved markers discovers whether there are
|
||||
- any ICC markers and verifies the consistency of the marker numbering.
|
||||
- */
|
||||
-
|
||||
- memset(marker_present, 0, (MAX_SEQ_NO + 1));
|
||||
-
|
||||
- for(marker = cinfo->marker_list; marker != NULL; marker = marker->next) {
|
||||
- if (marker_is_icc(marker)) {
|
||||
- if (num_markers == 0) {
|
||||
- // number of markers
|
||||
- num_markers = GETJOCTET(marker->data[13]);
|
||||
- }
|
||||
- else if (num_markers != GETJOCTET(marker->data[13])) {
|
||||
- return FALSE; // inconsistent num_markers fields
|
||||
- }
|
||||
- // sequence number
|
||||
- seq_no = GETJOCTET(marker->data[12]);
|
||||
- if (seq_no <= 0 || seq_no > num_markers) {
|
||||
- return FALSE; // bogus sequence number
|
||||
- }
|
||||
- if (marker_present[seq_no]) {
|
||||
- return FALSE; // duplicate sequence numbers
|
||||
- }
|
||||
- marker_present[seq_no] = 1;
|
||||
- data_length[seq_no] = marker->data_length - ICC_HEADER_SIZE;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (num_markers == 0)
|
||||
- return FALSE;
|
||||
-
|
||||
- /**
|
||||
- check for missing markers, count total space needed,
|
||||
- compute offset of each marker's part of the data.
|
||||
- */
|
||||
-
|
||||
- total_length = 0;
|
||||
- for(seq_no = 1; seq_no <= num_markers; seq_no++) {
|
||||
- if (marker_present[seq_no] == 0) {
|
||||
- return FALSE; // missing sequence number
|
||||
- }
|
||||
- data_offset[seq_no] = total_length;
|
||||
- total_length += data_length[seq_no];
|
||||
- }
|
||||
-
|
||||
- if (total_length <= 0)
|
||||
- return FALSE; // found only empty markers ?
|
||||
-
|
||||
- // allocate space for assembled data
|
||||
- icc_data = (JOCTET *) malloc(total_length * sizeof(JOCTET));
|
||||
- if (icc_data == NULL)
|
||||
- return FALSE; // out of memory
|
||||
-
|
||||
- // and fill it in
|
||||
- for (marker = cinfo->marker_list; marker != NULL; marker = marker->next) {
|
||||
- if (marker_is_icc(marker)) {
|
||||
- JOCTET FAR *src_ptr;
|
||||
- JOCTET *dst_ptr;
|
||||
- unsigned length;
|
||||
- seq_no = GETJOCTET(marker->data[12]);
|
||||
- dst_ptr = icc_data + data_offset[seq_no];
|
||||
- src_ptr = marker->data + ICC_HEADER_SIZE;
|
||||
- length = data_length[seq_no];
|
||||
- while (length--) {
|
||||
- *dst_ptr++ = *src_ptr++;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- *icc_data_ptr = icc_data;
|
||||
- *icc_data_len = total_length;
|
||||
-
|
||||
- return TRUE;
|
||||
-}
|
||||
-
|
||||
/**
|
||||
Read JPEG_APPD marker (IPTC or Adobe Photoshop profile)
|
||||
*/
|
@ -0,0 +1,531 @@
|
||||
--- /dev/null
|
||||
+++ b/LibJPEG/jpegcomp.h
|
||||
@@ -0,0 +1,26 @@
|
||||
+/*
|
||||
+ * jpegcomp.h
|
||||
+ *
|
||||
+ * Copyright (C) 2010, D. R. Commander
|
||||
+ * For conditions of distribution and use, see the accompanying README file.
|
||||
+ *
|
||||
+ * JPEG compatibility macros
|
||||
+ * These declarations are considered internal to the JPEG library; most
|
||||
+ * applications using the library shouldn't need to include this file.
|
||||
+ */
|
||||
+
|
||||
+#if JPEG_LIB_VERSION >= 70
|
||||
+#define _DCT_scaled_size DCT_h_scaled_size
|
||||
+#define _min_DCT_scaled_size min_DCT_h_scaled_size
|
||||
+#define _min_DCT_h_scaled_size min_DCT_h_scaled_size
|
||||
+#define _min_DCT_v_scaled_size min_DCT_v_scaled_size
|
||||
+#define _jpeg_width jpeg_width
|
||||
+#define _jpeg_height jpeg_height
|
||||
+#else
|
||||
+#define _DCT_scaled_size DCT_scaled_size
|
||||
+#define _min_DCT_scaled_size min_DCT_scaled_size
|
||||
+#define _min_DCT_h_scaled_size min_DCT_scaled_size
|
||||
+#define _min_DCT_v_scaled_size min_DCT_scaled_size
|
||||
+#define _jpeg_width image_width
|
||||
+#define _jpeg_height image_height
|
||||
+#endif
|
||||
--- a/LibJPEG/jpegint.h
|
||||
+++ b/LibJPEG/jpegint.h
|
||||
@@ -2,7 +2,7 @@
|
||||
* jpegint.h
|
||||
*
|
||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
||||
- * Modified 1997-2011 by Guido Vollbeding.
|
||||
+ * Modified 1997-2009 by Guido Vollbeding.
|
||||
* This file is part of the Independent JPEG Group's software.
|
||||
* For conditions of distribution and use, see the accompanying README file.
|
||||
*
|
||||
@@ -100,16 +100,14 @@
|
||||
};
|
||||
|
||||
/* Forward DCT (also controls coefficient quantization) */
|
||||
-typedef JMETHOD(void, forward_DCT_ptr,
|
||||
- (j_compress_ptr cinfo, jpeg_component_info * compptr,
|
||||
- JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
|
||||
- JDIMENSION start_row, JDIMENSION start_col,
|
||||
- JDIMENSION num_blocks));
|
||||
-
|
||||
struct jpeg_forward_dct {
|
||||
JMETHOD(void, start_pass, (j_compress_ptr cinfo));
|
||||
- /* It is useful to allow each component to have a separate FDCT method. */
|
||||
- forward_DCT_ptr forward_DCT[MAX_COMPONENTS];
|
||||
+ /* perhaps this should be an array??? */
|
||||
+ JMETHOD(void, forward_DCT, (j_compress_ptr cinfo,
|
||||
+ jpeg_component_info * compptr,
|
||||
+ JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
|
||||
+ JDIMENSION start_row, JDIMENSION start_col,
|
||||
+ JDIMENSION num_blocks));
|
||||
};
|
||||
|
||||
/* Entropy encoding */
|
||||
@@ -213,6 +211,10 @@
|
||||
JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
|
||||
JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo,
|
||||
JBLOCKROW *MCU_data));
|
||||
+
|
||||
+ /* This is here to share code between baseline and progressive decoders; */
|
||||
+ /* other modules probably should not use it */
|
||||
+ boolean insufficient_data; /* set TRUE after emitting warning */
|
||||
};
|
||||
|
||||
/* Inverse DCT (also performs dequantization) */
|
||||
@@ -302,6 +304,7 @@
|
||||
#define jinit_downsampler jIDownsampler
|
||||
#define jinit_forward_dct jIFDCT
|
||||
#define jinit_huff_encoder jIHEncoder
|
||||
+#define jinit_phuff_encoder jIPHEncoder
|
||||
#define jinit_arith_encoder jIAEncoder
|
||||
#define jinit_marker_writer jIMWriter
|
||||
#define jinit_master_decompress jIDMaster
|
||||
@@ -311,6 +314,7 @@
|
||||
#define jinit_input_controller jIInCtlr
|
||||
#define jinit_marker_reader jIMReader
|
||||
#define jinit_huff_decoder jIHDecoder
|
||||
+#define jinit_phuff_decoder jIPHDecoder
|
||||
#define jinit_arith_decoder jIADecoder
|
||||
#define jinit_inverse_dct jIIDCT
|
||||
#define jinit_upsampler jIUpsampler
|
||||
@@ -321,41 +325,15 @@
|
||||
#define jinit_memory_mgr jIMemMgr
|
||||
#define jdiv_round_up jDivRound
|
||||
#define jround_up jRound
|
||||
-#define jzero_far jZeroFar
|
||||
#define jcopy_sample_rows jCopySamples
|
||||
#define jcopy_block_row jCopyBlocks
|
||||
+#define jzero_far jZeroFar
|
||||
#define jpeg_zigzag_order jZIGTable
|
||||
#define jpeg_natural_order jZAGTable
|
||||
-#define jpeg_natural_order7 jZAG7Table
|
||||
-#define jpeg_natural_order6 jZAG6Table
|
||||
-#define jpeg_natural_order5 jZAG5Table
|
||||
-#define jpeg_natural_order4 jZAG4Table
|
||||
-#define jpeg_natural_order3 jZAG3Table
|
||||
-#define jpeg_natural_order2 jZAG2Table
|
||||
#define jpeg_aritab jAriTab
|
||||
#endif /* NEED_SHORT_EXTERNAL_NAMES */
|
||||
|
||||
|
||||
-/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays
|
||||
- * and coefficient-block arrays. This won't work on 80x86 because the arrays
|
||||
- * are FAR and we're assuming a small-pointer memory model. However, some
|
||||
- * DOS compilers provide far-pointer versions of memcpy() and memset() even
|
||||
- * in the small-model libraries. These will be used if USE_FMEM is defined.
|
||||
- * Otherwise, the routines in jutils.c do it the hard way.
|
||||
- */
|
||||
-
|
||||
-#ifndef NEED_FAR_POINTERS /* normal case, same as regular macro */
|
||||
-#define FMEMZERO(target,size) MEMZERO(target,size)
|
||||
-#else /* 80x86 case */
|
||||
-#ifdef USE_FMEM
|
||||
-#define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size))
|
||||
-#else
|
||||
-EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero));
|
||||
-#define FMEMZERO(target,size) jzero_far(target, size)
|
||||
-#endif
|
||||
-#endif
|
||||
-
|
||||
-
|
||||
/* Compression module initialization routines */
|
||||
EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo));
|
||||
EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo,
|
||||
@@ -370,6 +348,7 @@
|
||||
EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo));
|
||||
EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo));
|
||||
EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo));
|
||||
+EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo));
|
||||
EXTERN(void) jinit_arith_encoder JPP((j_compress_ptr cinfo));
|
||||
EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo));
|
||||
/* Decompression module initialization routines */
|
||||
@@ -383,6 +362,7 @@
|
||||
EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo));
|
||||
EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo));
|
||||
EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo));
|
||||
+EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo));
|
||||
EXTERN(void) jinit_arith_decoder JPP((j_decompress_ptr cinfo));
|
||||
EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo));
|
||||
EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo));
|
||||
@@ -401,17 +381,12 @@
|
||||
int num_rows, JDIMENSION num_cols));
|
||||
EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row,
|
||||
JDIMENSION num_blocks));
|
||||
+EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero));
|
||||
/* Constant tables in jutils.c */
|
||||
#if 0 /* This table is not actually needed in v6a */
|
||||
extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */
|
||||
#endif
|
||||
extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */
|
||||
-extern const int jpeg_natural_order7[]; /* zz to natural order for 7x7 block */
|
||||
-extern const int jpeg_natural_order6[]; /* zz to natural order for 6x6 block */
|
||||
-extern const int jpeg_natural_order5[]; /* zz to natural order for 5x5 block */
|
||||
-extern const int jpeg_natural_order4[]; /* zz to natural order for 4x4 block */
|
||||
-extern const int jpeg_natural_order3[]; /* zz to natural order for 3x3 block */
|
||||
-extern const int jpeg_natural_order2[]; /* zz to natural order for 2x2 block */
|
||||
|
||||
/* Arithmetic coding probability estimation tables in jaricom.c */
|
||||
extern const INT32 jpeg_aritab[];
|
||||
--- a/LibJPEG/transupp.h
|
||||
+++ b/LibJPEG/transupp.h
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* transupp.h
|
||||
*
|
||||
- * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding.
|
||||
+ * Copyright (C) 1997-2009, Thomas G. Lane, Guido Vollbeding.
|
||||
* This file is part of the Independent JPEG Group's software.
|
||||
* For conditions of distribution and use, see the accompanying README file.
|
||||
*
|
||||
@@ -57,7 +57,6 @@
|
||||
* corner up and/or left to make it so, simultaneously increasing the region
|
||||
* dimensions to keep the lower right crop corner unchanged. (Thus, the
|
||||
* output image covers at least the requested region, but may cover more.)
|
||||
- * The adjustment of the region dimensions may be optionally disabled.
|
||||
*
|
||||
* We also provide a lossless-resize option, which is kind of a lossless-crop
|
||||
* operation in the DCT coefficient block domain - it discards higher-order
|
||||
@@ -107,15 +106,13 @@
|
||||
|
||||
/*
|
||||
* Codes for crop parameters, which can individually be unspecified,
|
||||
- * positive or negative for xoffset or yoffset,
|
||||
- * positive or forced for width or height.
|
||||
+ * positive, or negative. (Negative width or height makes no sense, though.)
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
- JCROP_UNSET,
|
||||
- JCROP_POS,
|
||||
- JCROP_NEG,
|
||||
- JCROP_FORCE
|
||||
+ JCROP_UNSET,
|
||||
+ JCROP_POS,
|
||||
+ JCROP_NEG
|
||||
} JCROP_CODE;
|
||||
|
||||
/*
|
||||
@@ -131,14 +128,21 @@
|
||||
boolean trim; /* if TRUE, trim partial MCUs as needed */
|
||||
boolean force_grayscale; /* if TRUE, convert color image to grayscale */
|
||||
boolean crop; /* if TRUE, crop source image */
|
||||
+ boolean slow_hflip; /* For best performance, the JXFORM_FLIP_H transform
|
||||
+ normally modifies the source coefficients in place.
|
||||
+ Setting this to TRUE will instead use a slower,
|
||||
+ double-buffered algorithm, which leaves the source
|
||||
+ coefficients in tact (necessary if other transformed
|
||||
+ images must be generated from the same set of
|
||||
+ coefficients. */
|
||||
|
||||
/* Crop parameters: application need not set these unless crop is TRUE.
|
||||
* These can be filled in by jtransform_parse_crop_spec().
|
||||
*/
|
||||
JDIMENSION crop_width; /* Width of selected region */
|
||||
- JCROP_CODE crop_width_set; /* (forced disables adjustment) */
|
||||
+ JCROP_CODE crop_width_set;
|
||||
JDIMENSION crop_height; /* Height of selected region */
|
||||
- JCROP_CODE crop_height_set; /* (forced disables adjustment) */
|
||||
+ JCROP_CODE crop_height_set;
|
||||
JDIMENSION crop_xoffset; /* X offset of selected region */
|
||||
JCROP_CODE crop_xoffset_set; /* (negative measures from right edge) */
|
||||
JDIMENSION crop_yoffset; /* Y offset of selected region */
|
||||
--- a/LibJPEG/transupp.c
|
||||
+++ b/LibJPEG/transupp.c
|
||||
@@ -1,7 +1,8 @@
|
||||
/*
|
||||
* transupp.c
|
||||
*
|
||||
- * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding.
|
||||
+ * Copyright (C) 1997-2009, Thomas G. Lane, Guido Vollbeding.
|
||||
+ * Copyright (C) 2010, D. R. Commander.
|
||||
* This file is part of the Independent JPEG Group's software.
|
||||
* For conditions of distribution and use, see the accompanying README file.
|
||||
*
|
||||
@@ -20,9 +21,19 @@
|
||||
#include "jinclude.h"
|
||||
#include "jpeglib.h"
|
||||
#include "transupp.h" /* My own external interface */
|
||||
+#include "jpegcomp.h"
|
||||
#include <ctype.h> /* to declare isdigit() */
|
||||
|
||||
|
||||
+#if JPEG_LIB_VERSION >= 70
|
||||
+#define dstinfo_min_DCT_h_scaled_size dstinfo->min_DCT_h_scaled_size
|
||||
+#define dstinfo_min_DCT_v_scaled_size dstinfo->min_DCT_v_scaled_size
|
||||
+#else
|
||||
+#define dstinfo_min_DCT_h_scaled_size DCTSIZE
|
||||
+#define dstinfo_min_DCT_v_scaled_size DCTSIZE
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#if TRANSFORMS_SUPPORTED
|
||||
|
||||
/*
|
||||
@@ -134,7 +145,7 @@
|
||||
* Partial iMCUs at the right edge are left untouched.
|
||||
*/
|
||||
MCU_cols = srcinfo->output_width /
|
||||
- (dstinfo->max_h_samp_factor * dstinfo->min_DCT_h_scaled_size);
|
||||
+ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
|
||||
|
||||
for (ci = 0; ci < dstinfo->num_components; ci++) {
|
||||
compptr = dstinfo->comp_info + ci;
|
||||
@@ -200,7 +211,7 @@
|
||||
* this is essentially the same as the routine above.
|
||||
*/
|
||||
MCU_cols = srcinfo->output_width /
|
||||
- (dstinfo->max_h_samp_factor * dstinfo->min_DCT_h_scaled_size);
|
||||
+ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
|
||||
|
||||
for (ci = 0; ci < dstinfo->num_components; ci++) {
|
||||
compptr = dstinfo->comp_info + ci;
|
||||
@@ -265,7 +276,7 @@
|
||||
* Partial iMCUs at the bottom edge are copied verbatim.
|
||||
*/
|
||||
MCU_rows = srcinfo->output_height /
|
||||
- (dstinfo->max_v_samp_factor * dstinfo->min_DCT_v_scaled_size);
|
||||
+ (dstinfo->max_v_samp_factor * dstinfo_min_DCT_v_scaled_size);
|
||||
|
||||
for (ci = 0; ci < dstinfo->num_components; ci++) {
|
||||
compptr = dstinfo->comp_info + ci;
|
||||
@@ -393,7 +404,7 @@
|
||||
* not mirrored.
|
||||
*/
|
||||
MCU_cols = srcinfo->output_height /
|
||||
- (dstinfo->max_h_samp_factor * dstinfo->min_DCT_h_scaled_size);
|
||||
+ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
|
||||
|
||||
for (ci = 0; ci < dstinfo->num_components; ci++) {
|
||||
compptr = dstinfo->comp_info + ci;
|
||||
@@ -474,7 +485,7 @@
|
||||
* not mirrored.
|
||||
*/
|
||||
MCU_rows = srcinfo->output_width /
|
||||
- (dstinfo->max_v_samp_factor * dstinfo->min_DCT_v_scaled_size);
|
||||
+ (dstinfo->max_v_samp_factor * dstinfo_min_DCT_v_scaled_size);
|
||||
|
||||
for (ci = 0; ci < dstinfo->num_components; ci++) {
|
||||
compptr = dstinfo->comp_info + ci;
|
||||
@@ -542,9 +553,9 @@
|
||||
jpeg_component_info *compptr;
|
||||
|
||||
MCU_cols = srcinfo->output_width /
|
||||
- (dstinfo->max_h_samp_factor * dstinfo->min_DCT_h_scaled_size);
|
||||
+ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
|
||||
MCU_rows = srcinfo->output_height /
|
||||
- (dstinfo->max_v_samp_factor * dstinfo->min_DCT_v_scaled_size);
|
||||
+ (dstinfo->max_v_samp_factor * dstinfo_min_DCT_v_scaled_size);
|
||||
|
||||
for (ci = 0; ci < dstinfo->num_components; ci++) {
|
||||
compptr = dstinfo->comp_info + ci;
|
||||
@@ -653,9 +664,9 @@
|
||||
jpeg_component_info *compptr;
|
||||
|
||||
MCU_cols = srcinfo->output_height /
|
||||
- (dstinfo->max_h_samp_factor * dstinfo->min_DCT_h_scaled_size);
|
||||
+ (dstinfo->max_h_samp_factor * dstinfo_min_DCT_h_scaled_size);
|
||||
MCU_rows = srcinfo->output_width /
|
||||
- (dstinfo->max_v_samp_factor * dstinfo->min_DCT_v_scaled_size);
|
||||
+ (dstinfo->max_v_samp_factor * dstinfo_min_DCT_v_scaled_size);
|
||||
|
||||
for (ci = 0; ci < dstinfo->num_components; ci++) {
|
||||
compptr = dstinfo->comp_info + ci;
|
||||
@@ -771,7 +782,7 @@
|
||||
* The routine returns TRUE if the spec string is valid, FALSE if not.
|
||||
*
|
||||
* The crop spec string should have the format
|
||||
- * <width>[f]x<height>[f]{+-}<xoffset>{+-}<yoffset>
|
||||
+ * <width>x<height>{+-}<xoffset>{+-}<yoffset>
|
||||
* where width, height, xoffset, and yoffset are unsigned integers.
|
||||
* Each of the elements can be omitted to indicate a default value.
|
||||
* (A weakness of this style is that it is not possible to omit xoffset
|
||||
@@ -793,22 +804,14 @@
|
||||
/* fetch width */
|
||||
if (! jt_read_integer(&spec, &info->crop_width))
|
||||
return FALSE;
|
||||
- if (*spec == 'f' || *spec == 'F') {
|
||||
- spec++;
|
||||
- info->crop_width_set = JCROP_FORCE;
|
||||
- } else
|
||||
- info->crop_width_set = JCROP_POS;
|
||||
+ info->crop_width_set = JCROP_POS;
|
||||
}
|
||||
- if (*spec == 'x' || *spec == 'X') {
|
||||
+ if (*spec == 'x' || *spec == 'X') {
|
||||
/* fetch height */
|
||||
spec++;
|
||||
if (! jt_read_integer(&spec, &info->crop_height))
|
||||
return FALSE;
|
||||
- if (*spec == 'f' || *spec == 'F') {
|
||||
- spec++;
|
||||
- info->crop_height_set = JCROP_FORCE;
|
||||
- } else
|
||||
- info->crop_height_set = JCROP_POS;
|
||||
+ info->crop_height_set = JCROP_POS;
|
||||
}
|
||||
if (*spec == '+' || *spec == '-') {
|
||||
/* fetch xoffset */
|
||||
@@ -897,7 +900,12 @@
|
||||
info->num_components = srcinfo->num_components;
|
||||
|
||||
/* Compute output image dimensions and related values. */
|
||||
+#if JPEG_LIB_VERSION >= 80
|
||||
jpeg_core_output_dimensions(srcinfo);
|
||||
+#else
|
||||
+ srcinfo->output_width = srcinfo->image_width;
|
||||
+ srcinfo->output_height = srcinfo->image_height;
|
||||
+#endif
|
||||
|
||||
/* Return right away if -perfect is given and transformation is not perfect.
|
||||
*/
|
||||
@@ -905,15 +913,15 @@
|
||||
if (info->num_components == 1) {
|
||||
if (!jtransform_perfect_transform(srcinfo->output_width,
|
||||
srcinfo->output_height,
|
||||
- srcinfo->min_DCT_h_scaled_size,
|
||||
- srcinfo->min_DCT_v_scaled_size,
|
||||
+ srcinfo->_min_DCT_h_scaled_size,
|
||||
+ srcinfo->_min_DCT_v_scaled_size,
|
||||
info->transform))
|
||||
return FALSE;
|
||||
} else {
|
||||
if (!jtransform_perfect_transform(srcinfo->output_width,
|
||||
srcinfo->output_height,
|
||||
- srcinfo->max_h_samp_factor * srcinfo->min_DCT_h_scaled_size,
|
||||
- srcinfo->max_v_samp_factor * srcinfo->min_DCT_v_scaled_size,
|
||||
+ srcinfo->max_h_samp_factor * srcinfo->_min_DCT_h_scaled_size,
|
||||
+ srcinfo->max_v_samp_factor * srcinfo->_min_DCT_v_scaled_size,
|
||||
info->transform))
|
||||
return FALSE;
|
||||
}
|
||||
@@ -932,26 +940,26 @@
|
||||
info->output_width = srcinfo->output_height;
|
||||
info->output_height = srcinfo->output_width;
|
||||
if (info->num_components == 1) {
|
||||
- info->iMCU_sample_width = srcinfo->min_DCT_v_scaled_size;
|
||||
- info->iMCU_sample_height = srcinfo->min_DCT_h_scaled_size;
|
||||
+ info->iMCU_sample_width = srcinfo->_min_DCT_v_scaled_size;
|
||||
+ info->iMCU_sample_height = srcinfo->_min_DCT_h_scaled_size;
|
||||
} else {
|
||||
info->iMCU_sample_width =
|
||||
- srcinfo->max_v_samp_factor * srcinfo->min_DCT_v_scaled_size;
|
||||
+ srcinfo->max_v_samp_factor * srcinfo->_min_DCT_v_scaled_size;
|
||||
info->iMCU_sample_height =
|
||||
- srcinfo->max_h_samp_factor * srcinfo->min_DCT_h_scaled_size;
|
||||
+ srcinfo->max_h_samp_factor * srcinfo->_min_DCT_h_scaled_size;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
info->output_width = srcinfo->output_width;
|
||||
info->output_height = srcinfo->output_height;
|
||||
if (info->num_components == 1) {
|
||||
- info->iMCU_sample_width = srcinfo->min_DCT_h_scaled_size;
|
||||
- info->iMCU_sample_height = srcinfo->min_DCT_v_scaled_size;
|
||||
+ info->iMCU_sample_width = srcinfo->_min_DCT_h_scaled_size;
|
||||
+ info->iMCU_sample_height = srcinfo->_min_DCT_v_scaled_size;
|
||||
} else {
|
||||
info->iMCU_sample_width =
|
||||
- srcinfo->max_h_samp_factor * srcinfo->min_DCT_h_scaled_size;
|
||||
+ srcinfo->max_h_samp_factor * srcinfo->_min_DCT_h_scaled_size;
|
||||
info->iMCU_sample_height =
|
||||
- srcinfo->max_v_samp_factor * srcinfo->min_DCT_v_scaled_size;
|
||||
+ srcinfo->max_v_samp_factor * srcinfo->_min_DCT_v_scaled_size;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -988,16 +996,10 @@
|
||||
else
|
||||
yoffset = info->crop_yoffset;
|
||||
/* Now adjust so that upper left corner falls at an iMCU boundary */
|
||||
- if (info->crop_width_set == JCROP_FORCE)
|
||||
- info->output_width = info->crop_width;
|
||||
- else
|
||||
- info->output_width =
|
||||
- info->crop_width + (xoffset % info->iMCU_sample_width);
|
||||
- if (info->crop_height_set == JCROP_FORCE)
|
||||
- info->output_height = info->crop_height;
|
||||
- else
|
||||
- info->output_height =
|
||||
- info->crop_height + (yoffset % info->iMCU_sample_height);
|
||||
+ info->output_width =
|
||||
+ info->crop_width + (xoffset % info->iMCU_sample_width);
|
||||
+ info->output_height =
|
||||
+ info->crop_height + (yoffset % info->iMCU_sample_height);
|
||||
/* Save x/y offsets measured in iMCUs */
|
||||
info->x_crop_offset = xoffset / info->iMCU_sample_width;
|
||||
info->y_crop_offset = yoffset / info->iMCU_sample_height;
|
||||
@@ -1020,7 +1022,7 @@
|
||||
case JXFORM_FLIP_H:
|
||||
if (info->trim)
|
||||
trim_right_edge(info, srcinfo->output_width);
|
||||
- if (info->y_crop_offset != 0)
|
||||
+ if (info->y_crop_offset != 0 || info->slow_hflip)
|
||||
need_workspace = TRUE;
|
||||
/* do_flip_h_no_crop doesn't need a workspace array */
|
||||
break;
|
||||
@@ -1124,9 +1126,11 @@
|
||||
jtemp = dstinfo->image_width;
|
||||
dstinfo->image_width = dstinfo->image_height;
|
||||
dstinfo->image_height = jtemp;
|
||||
+#if JPEG_LIB_VERSION >= 70
|
||||
itemp = dstinfo->min_DCT_h_scaled_size;
|
||||
dstinfo->min_DCT_h_scaled_size = dstinfo->min_DCT_v_scaled_size;
|
||||
dstinfo->min_DCT_v_scaled_size = itemp;
|
||||
+#endif
|
||||
|
||||
/* Transpose sampling factors */
|
||||
for (ci = 0; ci < dstinfo->num_components; ci++) {
|
||||
@@ -1362,8 +1366,10 @@
|
||||
/* Correct the destination's image dimensions as necessary
|
||||
* for rotate/flip, resize, and crop operations.
|
||||
*/
|
||||
+#if JPEG_LIB_VERSION >= 70
|
||||
dstinfo->jpeg_width = info->output_width;
|
||||
dstinfo->jpeg_height = info->output_height;
|
||||
+#endif
|
||||
|
||||
/* Transpose destination image parameters */
|
||||
switch (info->transform) {
|
||||
@@ -1371,9 +1377,17 @@
|
||||
case JXFORM_TRANSVERSE:
|
||||
case JXFORM_ROT_90:
|
||||
case JXFORM_ROT_270:
|
||||
+#if JPEG_LIB_VERSION < 70
|
||||
+ dstinfo->image_width = info->output_height;
|
||||
+ dstinfo->image_height = info->output_width;
|
||||
+#endif
|
||||
transpose_critical_parameters(dstinfo);
|
||||
break;
|
||||
default:
|
||||
+#if JPEG_LIB_VERSION < 70
|
||||
+ dstinfo->image_width = info->output_width;
|
||||
+ dstinfo->image_height = info->output_height;
|
||||
+#endif
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1389,6 +1403,7 @@
|
||||
GETJOCTET(srcinfo->marker_list->data[5]) == 0) {
|
||||
/* Suppress output of JFIF marker */
|
||||
dstinfo->write_JFIF_header = FALSE;
|
||||
+#if JPEG_LIB_VERSION >= 70
|
||||
/* Adjust Exif image parameters */
|
||||
if (dstinfo->jpeg_width != srcinfo->image_width ||
|
||||
dstinfo->jpeg_height != srcinfo->image_height)
|
||||
@@ -1396,6 +1411,7 @@
|
||||
adjust_exif_parameters(srcinfo->marker_list->data + 6,
|
||||
srcinfo->marker_list->data_length - 6,
|
||||
dstinfo->jpeg_width, dstinfo->jpeg_height);
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* Return the appropriate output data set */
|
||||
@@ -1432,7 +1448,7 @@
|
||||
src_coef_arrays, dst_coef_arrays);
|
||||
break;
|
||||
case JXFORM_FLIP_H:
|
||||
- if (info->y_crop_offset != 0)
|
||||
+ if (info->y_crop_offset != 0 || info->slow_hflip)
|
||||
do_flip_h(srcinfo, dstinfo, info->x_crop_offset, info->y_crop_offset,
|
||||
src_coef_arrays, dst_coef_arrays);
|
||||
else
|
@ -0,0 +1,45 @@
|
||||
Bug: https://bugs.gentoo.org/647422
|
||||
Upstream Patch: https://sourceforge.net/p/freeimage/patches/130/
|
||||
|
||||
diff -Naur a/Source/FreeImage/PluginJPEG.cpp b/Source/FreeImage/PluginJPEG.cpp
|
||||
--- a/Source/FreeImage/PluginJPEG.cpp 2018-03-24 23:24:11.062695375 -0400
|
||||
+++ b/Source/FreeImage/PluginJPEG.cpp 2018-03-24 23:25:39.451124161 -0400
|
||||
@@ -1586,14 +1586,14 @@
|
||||
|
||||
// thumbnail support (JFIF 1.02 extension markers)
|
||||
if(FreeImage_GetThumbnail(dib) != NULL) {
|
||||
- cinfo.write_JFIF_header = 1; //<### force it, though when color is CMYK it will be incorrect
|
||||
+ cinfo.write_JFIF_header = static_cast<boolean>(1); //<### force it, though when color is CMYK it will be incorrect
|
||||
cinfo.JFIF_minor_version = 2;
|
||||
}
|
||||
|
||||
// baseline JPEG support
|
||||
if ((flags & JPEG_BASELINE) == JPEG_BASELINE) {
|
||||
- cinfo.write_JFIF_header = 0; // No marker for non-JFIF colorspaces
|
||||
- cinfo.write_Adobe_marker = 0; // write no Adobe marker by default
|
||||
+ cinfo.write_JFIF_header = static_cast<boolean>(0); // No marker for non-JFIF colorspaces
|
||||
+ cinfo.write_Adobe_marker = static_cast<boolean>(0); // write no Adobe marker by default
|
||||
}
|
||||
|
||||
// set subsampling options if required
|
||||
diff -Naur a/Source/FreeImage.h b/Source/FreeImage.h
|
||||
--- a/Source/FreeImage.h 2018-03-24 23:24:11.066695395 -0400
|
||||
+++ b/Source/FreeImage.h 2018-03-24 23:26:35.945391182 -0400
|
||||
@@ -117,12 +117,17 @@
|
||||
#ifndef _WINDOWS_
|
||||
#define _WINDOWS_
|
||||
|
||||
+#if JPEG_LIB_VERSION < 90
|
||||
+
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
@ -0,0 +1,16 @@
|
||||
https://bugs.gentoo.org/show_bug.cgi?id=458516
|
||||
|
||||
--- FreeImage/Source/FreeImage.h
|
||||
+++ FreeImage/Source/FreeImage.h
|
||||
@@ -141,8 +141,10 @@
|
||||
typedef uint16_t WORD;
|
||||
typedef uint32_t DWORD;
|
||||
typedef int32_t LONG;
|
||||
+#ifndef _LIBRAW_TYPES_H
|
||||
typedef int64_t INT64;
|
||||
typedef uint64_t UINT64;
|
||||
+#endif
|
||||
#else
|
||||
// MS is not C99 ISO compliant
|
||||
typedef long BOOL;
|
||||
|
@ -0,0 +1,639 @@
|
||||
lots of fixes here:
|
||||
- use system graphics libraries
|
||||
- make all of them optional
|
||||
- drop root users from install (fix user installs)
|
||||
- make static lib build optional
|
||||
- link with CXX and CXXFLAGS (since this is C++ code)
|
||||
|
||||
--- a/Makefile.gnu
|
||||
+++ b/Makefile.gnu
|
||||
@@ -11,7 +11,24 @@
|
||||
# Converts cr/lf to just lf
|
||||
DOS2UNIX = dos2unix
|
||||
|
||||
-LIBRARIES = -lstdc++
|
||||
+PKG_CONFIG ?= pkg-config
|
||||
+
|
||||
+USE_EXR ?= yes
|
||||
+USE_JPEG ?= yes
|
||||
+USE_JPEG2K ?= yes
|
||||
+USE_MNG ?= yes
|
||||
+USE_PNG ?= yes
|
||||
+USE_TIFF ?= yes
|
||||
+USE_RAW ?= yes
|
||||
+
|
||||
+LIBRARIES-yes = $(shell $(PKG_CONFIG) --libs zlib)
|
||||
+LIBRARIES-$(USE_EXR) += $(shell $(PKG_CONFIG) --libs OpenEXR)
|
||||
+LIBRARIES-$(USE_JPEG) += -ljpeg
|
||||
+LIBRARIES-$(USE_JPEG2K) += $(shell $(PKG_CONFIG) --libs libopenjpeg)
|
||||
+LIBRARIES-$(USE_MNG) += -lmng
|
||||
+LIBRARIES-$(USE_PNG) += $(shell $(PKG_CONFIG) --libs libpng)
|
||||
+LIBRARIES-$(USE_TIFF) += $(shell $(PKG_CONFIG) --libs libtiff-4 IlmBase)
|
||||
+LIBRARIES-$(USE_RAW) += $(shell $(PKG_CONFIG) --libs libraw)
|
||||
|
||||
MODULES = $(SRCS:.c=.o)
|
||||
MODULES := $(MODULES:.cpp=.o)
|
||||
@@ -64,13 +81,15 @@
|
||||
$(AR) r $@ $(MODULES)
|
||||
|
||||
$(SHAREDLIB): $(MODULES)
|
||||
- $(CC) -s -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES)
|
||||
+ $(CXX) $(CXXFLAGS) -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES-yes)
|
||||
|
||||
install:
|
||||
install -d $(INCDIR) $(INSTALLDIR)
|
||||
- install -m 644 -o root -g root $(HEADER) $(INCDIR)
|
||||
- install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR)
|
||||
- install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR)
|
||||
+ install -m 644 $(HEADER) $(INCDIR)
|
||||
+ifneq ($(STATICLIB),)
|
||||
+ install -m 644 $(STATICLIB) $(INSTALLDIR)
|
||||
+endif
|
||||
+ install -m 755 $(SHAREDLIB) $(INSTALLDIR)
|
||||
ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME)
|
||||
ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME)
|
||||
# ldconfig
|
||||
--- a/Source/FreeImage/J2KHelper.cpp
|
||||
+++ b/Source/FreeImage/J2KHelper.cpp
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
-#include "../LibOpenJPEG/openjpeg.h"
|
||||
+#include <openjpeg.h>
|
||||
|
||||
/**
|
||||
Divide an integer by a power of 2 and round upwards
|
||||
--- a/Source/FreeImage/PluginEXR.cpp
|
||||
+++ b/Source/FreeImage/PluginEXR.cpp
|
||||
@@ -22,16 +22,16 @@
|
||||
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
-#include "../OpenEXR/IlmImf/ImfIO.h"
|
||||
-#include "../OpenEXR/Iex/Iex.h"
|
||||
-#include "../OpenEXR/IlmImf/ImfOutputFile.h"
|
||||
-#include "../OpenEXR/IlmImf/ImfInputFile.h"
|
||||
-#include "../OpenEXR/IlmImf/ImfRgbaFile.h"
|
||||
-#include "../OpenEXR/IlmImf/ImfChannelList.h"
|
||||
-#include "../OpenEXR/IlmImf/ImfRgba.h"
|
||||
-#include "../OpenEXR/IlmImf/ImfArray.h"
|
||||
-#include "../OpenEXR/IlmImf/ImfPreviewImage.h"
|
||||
-#include "../OpenEXR/Half/half.h"
|
||||
+#include <ImfIO.h>
|
||||
+#include <Iex.h>
|
||||
+#include <ImfOutputFile.h>
|
||||
+#include <ImfInputFile.h>
|
||||
+#include <ImfRgbaFile.h>
|
||||
+#include <ImfChannelList.h>
|
||||
+#include <ImfRgba.h>
|
||||
+#include <ImfArray.h>
|
||||
+#include <ImfPreviewImage.h>
|
||||
+#include <half.h>
|
||||
|
||||
|
||||
// ==========================================================
|
||||
--- a/Source/FreeImage/PluginJ2K.cpp
|
||||
+++ b/Source/FreeImage/PluginJ2K.cpp
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
-#include "../LibOpenJPEG/openjpeg.h"
|
||||
+#include <openjpeg.h>
|
||||
|
||||
// ==========================================================
|
||||
// Plugin Interface
|
||||
--- a/Source/FreeImage/PluginJP2.cpp
|
||||
+++ b/Source/FreeImage/PluginJP2.cpp
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
-#include "../LibOpenJPEG/openjpeg.h"
|
||||
+#include <openjpeg.h>
|
||||
|
||||
// ==========================================================
|
||||
// Plugin Interface
|
||||
--- a/Source/FreeImage/PluginPNG.cpp
|
||||
+++ b/Source/FreeImage/PluginPNG.cpp
|
||||
@@ -37,8 +37,8 @@
|
||||
|
||||
// ----------------------------------------------------------
|
||||
|
||||
-#include "../ZLib/zlib.h"
|
||||
-#include "../LibPNG/png.h"
|
||||
+#include <zlib.h>
|
||||
+#include <png.h>
|
||||
|
||||
// ----------------------------------------------------------
|
||||
|
||||
--- a/Source/transupp.c
|
||||
+++ b/Source/transupp.c
|
||||
@@ -15,8 +15,7 @@
|
||||
/* Although this file really shouldn't have access to the library internals,
|
||||
* it's helpful to let it call jround_up() and jcopy_block_row().
|
||||
*/
|
||||
-#define JPEG_INTERNALS
|
||||
-
|
||||
+#include <jerror.h>
|
||||
#include "jinclude.h"
|
||||
#include "jpeglib.h"
|
||||
#include "transupp.h" /* My own external interface */
|
||||
--- a/Source/FreeImage/ZLibInterface.cpp
|
||||
+++ b/Source/FreeImage/ZLibInterface.cpp
|
||||
@@ -19,10 +19,10 @@
|
||||
// Use at your own risk!
|
||||
// ==========================================================
|
||||
|
||||
-#include "../ZLib/zlib.h"
|
||||
+#include <zlib.h>
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
-#include "../ZLib/zutil.h" /* must be the last header because of error C3163 in VS2008 (_vsnprintf defined in stdio.h) */
|
||||
+#define OS_CODE 0x03
|
||||
|
||||
/**
|
||||
Compresses a source buffer into a target buffer, using the ZLib library.
|
||||
--- a/Source/FreeImage/PluginG3.cpp
|
||||
+++ b/Source/FreeImage/PluginG3.cpp
|
||||
@@ -20,7 +20,7 @@
|
||||
// Use at your own risk!
|
||||
// ==========================================================
|
||||
|
||||
-#include "../LibTIFF4/tiffiop.h"
|
||||
+#include "tiffiop.h"
|
||||
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
--- a/Source/FreeImage/PluginJPEG.cpp
|
||||
+++ b/Source/FreeImage/PluginJPEG.cpp
|
||||
@@ -35,11 +35,15 @@
|
||||
#undef FAR
|
||||
#include <setjmp.h>
|
||||
|
||||
-#include "../LibJPEG/jinclude.h"
|
||||
-#include "../LibJPEG/jpeglib.h"
|
||||
-#include "../LibJPEG/jerror.h"
|
||||
+#include <string.h>
|
||||
+#include <stdio.h>
|
||||
+#include <jconfig.h>
|
||||
+#include <jpeglib.h>
|
||||
+#include <jerror.h>
|
||||
}
|
||||
|
||||
+#define SIZEOF(object) ((size_t) sizeof(object))
|
||||
+
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
|
||||
--- a/Source/FreeImageToolkit/JPEGTransform.cpp
|
||||
+++ b/Source/FreeImageToolkit/JPEGTransform.cpp
|
||||
@@ -25,10 +25,11 @@
|
||||
#undef FAR
|
||||
#include <setjmp.h>
|
||||
|
||||
-#include "../LibJPEG/jinclude.h"
|
||||
-#include "../LibJPEG/jpeglib.h"
|
||||
-#include "../LibJPEG/jerror.h"
|
||||
-#include "../LibJPEG/transupp.h"
|
||||
+#include <string.h>
|
||||
+#include <stdio.h>
|
||||
+#include <jpeglib.h>
|
||||
+#include <jerror.h>
|
||||
+#include "transupp.h"
|
||||
}
|
||||
|
||||
#include "FreeImage.h"
|
||||
--- a/Makefile.fip
|
||||
+++ b/Makefile.fip
|
||||
@@ -11,7 +11,24 @@
|
||||
# Converts cr/lf to just lf
|
||||
DOS2UNIX = dos2unix
|
||||
|
||||
-LIBRARIES = -lstdc++
|
||||
+PKG_CONFIG ?= pkg-config
|
||||
+
|
||||
+USE_EXR ?= yes
|
||||
+USE_JPEG ?= yes
|
||||
+USE_JPEG2K ?= yes
|
||||
+USE_MNG ?= yes
|
||||
+USE_PNG ?= yes
|
||||
+USE_TIFF ?= yes
|
||||
+USE_RAW ?= yes
|
||||
+
|
||||
+LIBRARIES-yes = $(shell $(PKG_CONFIG) --libs zlib)
|
||||
+LIBRARIES-$(USE_EXR) += $(shell $(PKG_CONFIG) --libs OpenEXR)
|
||||
+LIBRARIES-$(USE_JPEG) += -ljpeg
|
||||
+LIBRARIES-$(USE_JPEG2K) += $(shell $(PKG_CONFIG) --libs libopenjpeg)
|
||||
+LIBRARIES-$(USE_MNG) += -lmng
|
||||
+LIBRARIES-$(USE_PNG) += $(shell $(PKG_CONFIG) --libs libpng)
|
||||
+LIBRARIES-$(USE_TIFF) += $(shell $(PKG_CONFIG) --libs libtiff-4 IlmBase)
|
||||
+LIBRARIES-$(USE_RAW) += $(shell $(PKG_CONFIG) --libs libraw)
|
||||
|
||||
MODULES = $(SRCS:.c=.o)
|
||||
MODULES := $(MODULES:.cpp=.o)
|
||||
@@ -65,14 +82,18 @@
|
||||
$(AR) r $@ $(MODULES)
|
||||
|
||||
$(SHAREDLIB): $(MODULES)
|
||||
- $(CC) -s -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES)
|
||||
+ $(CXX) $(CXXFLAGS) -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES-yes)
|
||||
|
||||
install:
|
||||
install -d $(INCDIR) $(INSTALLDIR)
|
||||
- install -m 644 -o root -g root $(HEADER) $(INCDIR)
|
||||
- install -m 644 -o root -g root $(HEADERFIP) $(INCDIR)
|
||||
- install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR)
|
||||
- install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR)
|
||||
+ install -m 644 $(HEADER) $(INCDIR)
|
||||
+ install -m 644 $(HEADERFIP) $(INCDIR)
|
||||
+ifneq ($(STATICLIB),)
|
||||
+ install -m 644 $(STATICLIB) $(INSTALLDIR)
|
||||
+endif
|
||||
+ install -m 755 $(SHAREDLIB) $(INSTALLDIR)
|
||||
+ ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME)
|
||||
+ ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME)
|
||||
|
||||
clean:
|
||||
rm -f core Dist/*.* u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) $(LIBNAME)
|
||||
--- a/Makefile.srcs
|
||||
+++ b/Makefile.srcs
|
||||
@@ -1,6 +1,14 @@
|
||||
+USE_EXR ?= yes
|
||||
+USE_JPEG ?= yes
|
||||
+USE_JPEG2K ?= yes
|
||||
+USE_MNG ?= yes
|
||||
+USE_PNG ?= yes
|
||||
+USE_TIFF ?= yes
|
||||
+USE_RAW ?= yes
|
||||
+
|
||||
VER_MAJOR = 3
|
||||
VER_MINOR = 15.4
|
||||
-SRCS = \
|
||||
+SRCS-yes = \
|
||||
Source/FreeImage/BitmapAccess.cpp \
|
||||
Source/FreeImage/ColorLookup.cpp \
|
||||
Source/FreeImage/FreeImage.cpp \
|
||||
@@ -17,36 +25,74 @@ SRCS = \
|
||||
Source/FreeImage/GetType.cpp \
|
||||
Source/FreeImage/MemoryIO.cpp \
|
||||
Source/FreeImage/PixelAccess.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG2K) += \
|
||||
Source/FreeImage/J2KHelper.cpp \
|
||||
+
|
||||
+SRCS-$(USE_MNG) += \
|
||||
Source/FreeImage/MNGHelper.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/Plugin.cpp \
|
||||
Source/FreeImage/PluginBMP.cpp \
|
||||
Source/FreeImage/PluginCUT.cpp \
|
||||
Source/FreeImage/PluginDDS.cpp \
|
||||
+
|
||||
+SRCS-$(USE_EXR) += \
|
||||
Source/FreeImage/PluginEXR.cpp \
|
||||
+
|
||||
+SRCS-$(USE_TIFF) += \
|
||||
Source/FreeImage/PluginG3.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginGIF.cpp \
|
||||
Source/FreeImage/PluginHDR.cpp \
|
||||
Source/FreeImage/PluginICO.cpp \
|
||||
Source/FreeImage/PluginIFF.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG2K) += \
|
||||
Source/FreeImage/PluginJ2K.cpp \
|
||||
+
|
||||
+SRCS-$(USE_MNG) += \
|
||||
Source/FreeImage/PluginJNG.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG2K) += \
|
||||
Source/FreeImage/PluginJP2.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG) += \
|
||||
Source/FreeImage/PluginJPEG.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginKOALA.cpp \
|
||||
+
|
||||
+SRCS-$(USE_MNG) += \
|
||||
Source/FreeImage/PluginMNG.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginPCD.cpp \
|
||||
Source/FreeImage/PluginPCX.cpp \
|
||||
Source/FreeImage/PluginPFM.cpp \
|
||||
Source/FreeImage/PluginPICT.cpp \
|
||||
+
|
||||
+SRCS-$(USE_PNG) += \
|
||||
Source/FreeImage/PluginPNG.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginPNM.cpp \
|
||||
Source/FreeImage/PluginPSD.cpp \
|
||||
Source/FreeImage/PluginRAS.cpp \
|
||||
+
|
||||
+SRCS-$(USE_RAW) += \
|
||||
Source/FreeImage/PluginRAW.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginSGI.cpp \
|
||||
Source/FreeImage/PluginTARGA.cpp \
|
||||
+
|
||||
+SRCS-$(USE_TIFF) += \
|
||||
Source/FreeImage/PluginTIFF.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginWBMP.cpp \
|
||||
Source/FreeImage/PluginXBM.cpp \
|
||||
Source/FreeImage/PluginXPM.cpp \
|
||||
@@ -83,7 +129,11 @@ SRCS = \
|
||||
Source/Metadata/IPTC.cpp \
|
||||
Source/Metadata/TagConversion.cpp \
|
||||
Source/Metadata/TagLib.cpp \
|
||||
+
|
||||
+SRCS-$(USE_TIFF) += \
|
||||
Source/Metadata/XTIFF.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImageToolkit/Background.cpp \
|
||||
Source/FreeImageToolkit/BSplineRotate.cpp \
|
||||
Source/FreeImageToolkit/Channels.cpp \
|
||||
@@ -92,10 +142,18 @@ SRCS = \
|
||||
Source/FreeImageToolkit/CopyPaste.cpp \
|
||||
Source/FreeImageToolkit/Display.cpp \
|
||||
Source/FreeImageToolkit/Flip.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG) += \
|
||||
Source/FreeImageToolkit/JPEGTransform.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImageToolkit/MultigridPoissonSolver.cpp \
|
||||
Source/FreeImageToolkit/Rescale.cpp \
|
||||
Source/FreeImageToolkit/Resize.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG) += \
|
||||
+ Source/transupp.c
|
||||
+SRCS = $(SRCS-yes)
|
||||
INCLS = \
|
||||
Examples/OpenGL/TextureManager/TextureManager.h \
|
||||
Examples/Plugin/PluginCradle.h \
|
||||
@@ -116,7 +174,17 @@
|
||||
Wrapper/FreeImagePlus/test/fipTest.h \
|
||||
TestAPI/TestSuite.h
|
||||
|
||||
-INCLUDE = -I. \
|
||||
+INCLUDE-yes = -I. \
|
||||
-ISource \
|
||||
-ISource/Metadata \
|
||||
-ISource/FreeImageToolkit \
|
||||
+
|
||||
+INCLUDE-yes += $(shell $(PKG_CONFIG) --cflags-only-I zlib)
|
||||
+INCLUDE-$(USE_EXR) += -DUSE_EXR $(shell $(PKG_CONFIG) --cflags-only-I OpenEXR)
|
||||
+INCLUDE-$(USE_JPEG) += -DUSE_JPEG
|
||||
+INCLUDE-$(USE_JPEG2K) += -DUSE_JPEG2K $(shell $(PKG_CONFIG) --cflags-only-I libopenjpeg)
|
||||
+INCLUDE-$(USE_MNG) += -DUSE_MNG
|
||||
+INCLUDE-$(USE_PNG) += -DUSE_PNG $(shell $(PKG_CONFIG) --cflags-only-I libpng)
|
||||
+INCLUDE-$(USE_TIFF) += -DUSE_TIFF $(shell $(PKG_CONFIG) --cflags-only-I libtiff-4 IlmBase)
|
||||
+INCLUDE-$(USE_RAW) += -DUSE_RAW $(shell $(PKG_CONFIG) --cflags-only-I libraw)
|
||||
+INCLUDE = $(INCLUDE-yes)
|
||||
--- a/fipMakefile.srcs
|
||||
+++ b/fipMakefile.srcs
|
||||
@@ -1,6 +1,14 @@
|
||||
+USE_EXR ?= yes
|
||||
+USE_JPEG ?= yes
|
||||
+USE_JPEG2K ?= yes
|
||||
+USE_MNG ?= yes
|
||||
+USE_PNG ?= yes
|
||||
+USE_TIFF ?= yes
|
||||
+USE_RAW ?= yes
|
||||
+
|
||||
VER_MAJOR = 3
|
||||
VER_MINOR = 15.4
|
||||
-SRCS = \
|
||||
+SRCS-yes = \
|
||||
Source/FreeImage/BitmapAccess.cpp \
|
||||
Source/FreeImage/ColorLookup.cpp \
|
||||
Source/FreeImage/FreeImage.cpp \
|
||||
@@ -9,36 +17,74 @@
|
||||
Source/FreeImage/GetType.cpp \
|
||||
Source/FreeImage/MemoryIO.cpp \
|
||||
Source/FreeImage/PixelAccess.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG2K) += \
|
||||
Source/FreeImage/J2KHelper.cpp \
|
||||
+
|
||||
+SRCS-$(USE_MNG) += \
|
||||
Source/FreeImage/MNGHelper.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/Plugin.cpp \
|
||||
Source/FreeImage/PluginBMP.cpp \
|
||||
Source/FreeImage/PluginCUT.cpp \
|
||||
Source/FreeImage/PluginDDS.cpp \
|
||||
+
|
||||
+SRCS-$(USE_EXR) += \
|
||||
Source/FreeImage/PluginEXR.cpp \
|
||||
+
|
||||
+SRCS-$(USE_TIFF) += \
|
||||
Source/FreeImage/PluginG3.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginGIF.cpp \
|
||||
Source/FreeImage/PluginHDR.cpp \
|
||||
Source/FreeImage/PluginICO.cpp \
|
||||
Source/FreeImage/PluginIFF.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG2K) += \
|
||||
Source/FreeImage/PluginJ2K.cpp \
|
||||
+
|
||||
+SRCS-$(USE_MNG) += \
|
||||
Source/FreeImage/PluginJNG.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG2K) += \
|
||||
Source/FreeImage/PluginJP2.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG) += \
|
||||
Source/FreeImage/PluginJPEG.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginKOALA.cpp \
|
||||
+
|
||||
+SRCS-$(USE_MNG) += \
|
||||
Source/FreeImage/PluginMNG.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginPCD.cpp \
|
||||
Source/FreeImage/PluginPCX.cpp \
|
||||
Source/FreeImage/PluginPFM.cpp \
|
||||
Source/FreeImage/PluginPICT.cpp \
|
||||
+
|
||||
+SRCS-$(USE_PNG) += \
|
||||
Source/FreeImage/PluginPNG.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginPNM.cpp \
|
||||
Source/FreeImage/PluginPSD.cpp \
|
||||
Source/FreeImage/PluginRAS.cpp \
|
||||
+
|
||||
+SRCS-$(USE_RAW) += \
|
||||
Source/FreeImage/PluginRAW.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginSGI.cpp \
|
||||
Source/FreeImage/PluginTARGA.cpp \
|
||||
+
|
||||
+SRCS-$(USE_TIFF) += \
|
||||
Source/FreeImage/PluginTIFF.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImage/PluginWBMP.cpp \
|
||||
Source/FreeImage/PluginXBM.cpp \
|
||||
Source/FreeImage/PluginXPM.cpp \
|
||||
@@ -75,7 +121,11 @@
|
||||
Source/Metadata/IPTC.cpp \
|
||||
Source/Metadata/TagConversion.cpp \
|
||||
Source/Metadata/TagLib.cpp \
|
||||
+
|
||||
+SRCS-$(USE_TIFF) += \
|
||||
Source/Metadata/XTIFF.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImageToolkit/Background.cpp \
|
||||
Source/FreeImageToolkit/BSplineRotate.cpp \
|
||||
Source/FreeImageToolkit/Channels.cpp \
|
||||
@@ -84,7 +134,11 @@
|
||||
Source/FreeImageToolkit/CopyPaste.cpp \
|
||||
Source/FreeImageToolkit/Display.cpp \
|
||||
Source/FreeImageToolkit/Flip.cpp \
|
||||
+
|
||||
+SRCS-$(USE_JPEG) += \
|
||||
Source/FreeImageToolkit/JPEGTransform.cpp \
|
||||
+
|
||||
+SRCS-yes += \
|
||||
Source/FreeImageToolkit/MultigridPoissonSolver.cpp \
|
||||
Source/FreeImageToolkit/Rescale.cpp \
|
||||
Source/FreeImageToolkit/Resize.cpp \
|
||||
@@ -95,6 +149,11 @@
|
||||
Wrapper/FreeImagePlus/src/fipTag.cpp \
|
||||
Wrapper/FreeImagePlus/src/fipWinImage.cpp \
|
||||
Wrapper/FreeImagePlus/src/FreeImagePlus.cpp
|
||||
+
|
||||
+SRCS-$(USE_JPEG) += \
|
||||
+ Source/transupp.c
|
||||
+
|
||||
+SRCS = $(SRCS-yes)
|
||||
INCLUDE = -I. \
|
||||
-ISource \
|
||||
-ISource/Metadata \
|
||||
--- a/Source/FreeImage/PluginRAW.cpp
|
||||
+++ b/Source/FreeImage/PluginRAW.cpp
|
||||
@@ -19,7 +19,7 @@
|
||||
// Use at your own risk!
|
||||
// ==========================================================
|
||||
|
||||
-#include "../LibRawLite/libraw/libraw.h"
|
||||
+#include <libraw.h>
|
||||
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
--- a/Source/Metadata/XTIFF.cpp
|
||||
+++ b/Source/Metadata/XTIFF.cpp
|
||||
@@ -29,7 +29,7 @@
|
||||
#pragma warning (disable : 4786) // identifier was truncated to 'number' characters
|
||||
#endif
|
||||
|
||||
-#include "../LibTIFF4/tiffiop.h"
|
||||
+#include "tiffiop.h"
|
||||
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
--- a/Source/FreeImage/PluginTIFF.cpp
|
||||
+++ b/Source/FreeImage/PluginTIFF.cpp
|
||||
@@ -37,9 +37,9 @@
|
||||
|
||||
#include "FreeImage.h"
|
||||
#include "Utilities.h"
|
||||
-#include "../LibTIFF4/tiffiop.h"
|
||||
+#include "tiffiop.h"
|
||||
#include "../Metadata/FreeImageTag.h"
|
||||
-#include "../OpenEXR/Half/half.h"
|
||||
+#include <half.h>
|
||||
|
||||
#include "FreeImageIO.h"
|
||||
#include "PSDParser.h"
|
||||
--- a/Source/tiffiop.h
|
||||
+++ b/Source/tiffiop.h
|
||||
@@ -30,7 +30,9 @@
|
||||
* ``Library-private'' definitions.
|
||||
*/
|
||||
|
||||
-#include "tif_config.h"
|
||||
+#include <tiffconf.h>
|
||||
+#define HAVE_SEARCH_H
|
||||
+#define HAVE_FCNTL_H
|
||||
|
||||
#ifdef HAVE_FCNTL_H
|
||||
# include <fcntl.h>
|
||||
--- a/Source/FreeImage/Plugin.cpp
|
||||
+++ b/Source/FreeImage/Plugin.cpp
|
||||
@@ -223,23 +223,33 @@
|
||||
*/
|
||||
s_plugins->AddNode(InitBMP);
|
||||
s_plugins->AddNode(InitICO);
|
||||
+#ifdef USE_JPEG
|
||||
s_plugins->AddNode(InitJPEG);
|
||||
+#endif
|
||||
+#ifdef USE_MNG
|
||||
s_plugins->AddNode(InitJNG);
|
||||
+#endif
|
||||
s_plugins->AddNode(InitKOALA);
|
||||
s_plugins->AddNode(InitIFF);
|
||||
+#ifdef USE_MNG
|
||||
s_plugins->AddNode(InitMNG);
|
||||
+#endif
|
||||
s_plugins->AddNode(InitPNM, NULL, "PBM", "Portable Bitmap (ASCII)", "pbm", "^P1");
|
||||
s_plugins->AddNode(InitPNM, NULL, "PBMRAW", "Portable Bitmap (RAW)", "pbm", "^P4");
|
||||
s_plugins->AddNode(InitPCD);
|
||||
s_plugins->AddNode(InitPCX);
|
||||
s_plugins->AddNode(InitPNM, NULL, "PGM", "Portable Greymap (ASCII)", "pgm", "^P2");
|
||||
s_plugins->AddNode(InitPNM, NULL, "PGMRAW", "Portable Greymap (RAW)", "pgm", "^P5");
|
||||
+#ifdef USE_PNG
|
||||
s_plugins->AddNode(InitPNG);
|
||||
+#endif
|
||||
s_plugins->AddNode(InitPNM, NULL, "PPM", "Portable Pixelmap (ASCII)", "ppm", "^P3");
|
||||
s_plugins->AddNode(InitPNM, NULL, "PPMRAW", "Portable Pixelmap (RAW)", "ppm", "^P6");
|
||||
s_plugins->AddNode(InitRAS);
|
||||
s_plugins->AddNode(InitTARGA);
|
||||
+#ifdef USE_TIFF
|
||||
s_plugins->AddNode(InitTIFF);
|
||||
+#endif
|
||||
s_plugins->AddNode(InitWBMP);
|
||||
s_plugins->AddNode(InitPSD);
|
||||
s_plugins->AddNode(InitCUT);
|
||||
@@ -248,14 +258,22 @@
|
||||
s_plugins->AddNode(InitDDS);
|
||||
s_plugins->AddNode(InitGIF);
|
||||
s_plugins->AddNode(InitHDR);
|
||||
+#ifdef USE_TIFF
|
||||
s_plugins->AddNode(InitG3);
|
||||
+#endif
|
||||
s_plugins->AddNode(InitSGI);
|
||||
+#ifdef USE_EXR
|
||||
s_plugins->AddNode(InitEXR);
|
||||
+#endif
|
||||
+#ifdef USE_JPEG2K
|
||||
s_plugins->AddNode(InitJ2K);
|
||||
s_plugins->AddNode(InitJP2);
|
||||
+#endif
|
||||
s_plugins->AddNode(InitPFM);
|
||||
s_plugins->AddNode(InitPICT);
|
||||
+#ifdef USE_RAW
|
||||
s_plugins->AddNode(InitRAW);
|
||||
+#endif
|
||||
|
||||
// external plugin initialization
|
||||
|
@ -0,0 +1,119 @@
|
||||
# Copyright 1999-2018 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
|
||||
inherit toolchain-funcs eutils
|
||||
|
||||
MY_PN=FreeImage
|
||||
MY_PV=${PV//.}
|
||||
MY_P=${MY_PN}${MY_PV}
|
||||
|
||||
DESCRIPTION="Image library supporting many formats"
|
||||
HOMEPAGE="http://freeimage.sourceforge.net/"
|
||||
SRC_URI="mirror://sourceforge/${PN}/${MY_P}.zip
|
||||
mirror://sourceforge/${PN}/${MY_P}.pdf"
|
||||
|
||||
LICENSE="|| ( GPL-2 FIPL-1.0 )"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~arm x86 ~amd64-linux ~x86-linux"
|
||||
IUSE="jpeg jpeg2k mng openexr png raw static-libs tiff"
|
||||
|
||||
# The tiff/ilmbase isn't a typo. The TIFF plugin cheats and
|
||||
# uses code from it to handle 16bit<->float conversions.
|
||||
RDEPEND="
|
||||
sys-libs/zlib
|
||||
jpeg? ( virtual/jpeg:0 )
|
||||
jpeg2k? ( media-libs/openjpeg:0= )
|
||||
mng? ( media-libs/libmng:= )
|
||||
openexr? ( media-libs/openexr:= )
|
||||
png? ( media-libs/libpng:0= )
|
||||
raw? ( media-libs/libraw:= )
|
||||
tiff? (
|
||||
media-libs/ilmbase:=
|
||||
media-libs/tiff:0
|
||||
)"
|
||||
DEPEND="${RDEPEND}
|
||||
virtual/pkgconfig
|
||||
app-arch/unzip"
|
||||
|
||||
S=${WORKDIR}/${MY_PN}
|
||||
|
||||
DOCS=( "${DISTDIR}"/${MY_P}.pdf README.linux Whatsnew.txt )
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${PN}-3.15.4-{unbundling,raw}.patch
|
||||
"${FILESDIR}"/${PN}-3.15.4-CVE-2016-5684-1.patch
|
||||
"${FILESDIR}"/${PN}-3.15.4-CVE-2016-5684-2.patch
|
||||
"${FILESDIR}"/${PN}-3.15.4-CVE-2015-0852.patch
|
||||
"${FILESDIR}"/${PN}-3.15.4-libjpeg9.patch
|
||||
)
|
||||
|
||||
src_prepare() {
|
||||
pushd Source >/dev/null || die
|
||||
if has_version ">=media-libs/libjpeg-turbo-1.2.1"; then
|
||||
# Patch from Christian Heimes's fork (thanks)
|
||||
# https://bitbucket.org/tiran/freeimageturbo
|
||||
eapply "${FILESDIR}"/${PN}-3.15.4-libjpeg-turbo.patch
|
||||
cp LibJPEG/{jpegcomp.h,jpegint.h} . || die
|
||||
fi
|
||||
cp LibJPEG/{transupp.c,transupp.h,jinclude.h} . || die
|
||||
cp LibTIFF4/{tiffiop,tif_dir}.h . || die
|
||||
rm -rf LibPNG LibMNG LibOpenJPEG ZLib OpenEXR LibRawLite LibTIFF4 LibJPEG || die
|
||||
popd >/dev/null || die
|
||||
if has_version ">=media-libs/libjpeg-turbo-2.0"; then
|
||||
eapply "${FILESDIR}"/${PN}-3.15.4-libjpeg-turbo-2.0.patch
|
||||
fi
|
||||
|
||||
edos2unix Makefile.{gnu,fip,srcs} fipMakefile.srcs */*.h */*/*.cpp
|
||||
sed -i \
|
||||
-e "s:/./:/:g" \
|
||||
-e "s: ./: :g" \
|
||||
-e 's: Source: \\\n\tSource:g' \
|
||||
-e 's: Wrapper: \\\n\tWrapper:g' \
|
||||
-e 's: Examples: \\\n\tExamples:g' \
|
||||
-e 's: TestAPI: \\\n\tTestAPI:g' \
|
||||
-e 's: -ISource: \\\n\t-ISource:g' \
|
||||
-e 's: -IWrapper: \\\n\t-IWrapper:g' \
|
||||
Makefile.srcs fipMakefile.srcs || die
|
||||
sed -i \
|
||||
-e "/LibJPEG/d" \
|
||||
-e "/LibPNG/d" \
|
||||
-e "/LibTIFF/d" \
|
||||
-e "/Source\/ZLib/d" \
|
||||
-e "/LibOpenJPEG/d" \
|
||||
-e "/OpenEXR/d" \
|
||||
-e "/LibRawLite/d" \
|
||||
-e "/LibMNG/d" \
|
||||
Makefile.srcs fipMakefile.srcs || die
|
||||
|
||||
default
|
||||
}
|
||||
|
||||
foreach_make() {
|
||||
local m
|
||||
for m in Makefile.{gnu,fip} ; do
|
||||
emake -f ${m} \
|
||||
USE_EXR=$(usex openexr) \
|
||||
USE_JPEG=$(usex jpeg) \
|
||||
USE_JPEG2K=$(usex jpeg2k) \
|
||||
USE_MNG=$(usex mng) \
|
||||
USE_PNG=$(usex png) \
|
||||
USE_TIFF=$(usex tiff) \
|
||||
USE_RAW=$(usex raw) \
|
||||
$(usex static-libs '' STATICLIB=) \
|
||||
"$@"
|
||||
done
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
tc-export AR PKG_CONFIG
|
||||
foreach_make \
|
||||
CXX="$(tc-getCXX) -fPIC" \
|
||||
CC="$(tc-getCC) -fPIC" \
|
||||
${MY_PN}
|
||||
}
|
||||
|
||||
src_install() {
|
||||
foreach_make install DESTDIR="${ED}" INSTALLDIR="${ED%/}"/usr/$(get_libdir)
|
||||
einstalldocs
|
||||
}
|
Loading…
Reference in new issue