| diff -rupN FreeImage/genfipsrclist.sh FreeImage-new/genfipsrclist.sh |
| --- FreeImage/genfipsrclist.sh 2018-07-28 18:53:18.000000000 +0200 |
| +++ FreeImage-new/genfipsrclist.sh 2018-07-31 23:37:58.552953202 +0200 |
| @@ -1,6 +1,6 @@ |
| #!/bin/sh |
| |
| -DIRLIST=". Source Source/Metadata Source/FreeImageToolkit Source/LibJPEG Source/LibPNG Source/LibTIFF4 Source/ZLib Source/LibOpenJPEG Source/OpenEXR Source/OpenEXR/Half Source/OpenEXR/Iex Source/OpenEXR/IlmImf Source/OpenEXR/IlmThread Source/OpenEXR/Imath Source/OpenEXR/IexMath Source/LibRawLite Source/LibRawLite/dcraw Source/LibRawLite/internal Source/LibRawLite/libraw Source/LibRawLite/src Source/LibWebP Source/LibJXR Source/LibJXR/common/include Source/LibJXR/image/sys Source/LibJXR/jxrgluelib Wrapper/FreeImagePlus" |
| +DIRLIST="Wrapper/FreeImagePlus" |
| |
| |
| echo "VER_MAJOR = 3" > fipMakefile.srcs |
| @@ -19,5 +19,6 @@ echo -n "INCLUDE =" >> fipMakefile.srcs |
| for DIR in $DIRLIST; do |
| echo -n " -I$DIR" >> fipMakefile.srcs |
| done |
| +echo -n " -IDist" >> fipMakefile.srcs |
| echo >> fipMakefile.srcs |
| |
| diff -rupN FreeImage/gensrclist.sh FreeImage-new/gensrclist.sh |
| --- FreeImage/gensrclist.sh 2018-07-28 18:52:50.000000000 +0200 |
| +++ FreeImage-new/gensrclist.sh 2018-07-31 23:37:58.555953202 +0200 |
| @@ -1,6 +1,6 @@ |
| #!/bin/sh |
| |
| -DIRLIST=". Source Source/Metadata Source/FreeImageToolkit Source/LibJPEG Source/LibPNG Source/LibTIFF4 Source/ZLib Source/LibOpenJPEG Source/OpenEXR Source/OpenEXR/Half Source/OpenEXR/Iex Source/OpenEXR/IlmImf Source/OpenEXR/IlmThread Source/OpenEXR/Imath Source/OpenEXR/IexMath Source/LibRawLite Source/LibRawLite/dcraw Source/LibRawLite/internal Source/LibRawLite/libraw Source/LibRawLite/src Source/LibWebP Source/LibJXR Source/LibJXR/common/include Source/LibJXR/image/sys Source/LibJXR/jxrgluelib" |
| +DIRLIST=". Source Source/Metadata Source/FreeImageToolkit" |
| |
| echo "VER_MAJOR = 3" > Makefile.srcs |
| echo "VER_MINOR = 18.0" >> Makefile.srcs |
| diff -rupN FreeImage/Makefile.fip FreeImage-new/Makefile.fip |
| --- FreeImage/Makefile.fip 2015-03-10 08:03:56.000000000 +0100 |
| +++ FreeImage-new/Makefile.fip 2018-07-31 23:37:58.556953201 +0200 |
| @@ -17,20 +17,22 @@ MODULES = $(SRCS:.c=.o) |
| MODULES := $(MODULES:.cpp=.o) |
| CFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden |
| # OpenJPEG |
| -CFLAGS += -DOPJ_STATIC |
| +override CFLAGS += -DOPJ_STATIC |
| # LibRaw |
| -CFLAGS += -DNO_LCMS |
| +override CFLAGS += -DNO_LCMS |
| # LibJXR |
| -CFLAGS += -DDISABLE_PERF_MEASUREMENT -D__ANSI__ |
| -CFLAGS += $(INCLUDE) |
| +override CFLAGS += -DDISABLE_PERF_MEASUREMENT -D__ANSI__ |
| +override CFLAGS += $(INCLUDE) |
| CXXFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy |
| # LibJXR |
| -CXXFLAGS += -D__ANSI__ |
| -CXXFLAGS += $(INCLUDE) |
| +override CXXFLAGS += -D__ANSI__ |
| +override CXXFLAGS += $(INCLUDE) |
| +LDFLAGS ?= |
| +override LDFLAGS += -LDist -lfreeimage-$(VER_MAJOR).$(VER_MINOR) |
| |
| ifeq ($(shell sh -c 'uname -m 2>/dev/null || echo not'),x86_64) |
| - CFLAGS += -fPIC |
| - CXXFLAGS += -fPIC |
| + override CFLAGS += -fPIC |
| + override CXXFLAGS += -fPIC |
| endif |
| |
| TARGET = freeimageplus |
| @@ -68,7 +70,7 @@ $(STATICLIB): $(MODULES) |
| $(AR) r $@ $(MODULES) |
| |
| $(SHAREDLIB): $(MODULES) |
| - $(CC) -s -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) |
| + $(CC) -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) |
| |
| install: |
| install -d $(INCDIR) $(INSTALLDIR) |
| diff -rupN FreeImage/Makefile.gnu FreeImage-new/Makefile.gnu |
| --- FreeImage/Makefile.gnu 2015-03-10 08:04:00.000000000 +0100 |
| +++ FreeImage-new/Makefile.gnu 2018-07-31 23:37:58.556953201 +0200 |
| @@ -16,21 +16,11 @@ LIBRARIES = -lstdc++ |
| MODULES = $(SRCS:.c=.o) |
| MODULES := $(MODULES:.cpp=.o) |
| CFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden |
| -# OpenJPEG |
| -CFLAGS += -DOPJ_STATIC |
| -# LibRaw |
| -CFLAGS += -DNO_LCMS |
| -# LibJXR |
| -CFLAGS += -DDISABLE_PERF_MEASUREMENT -D__ANSI__ |
| -CFLAGS += $(INCLUDE) |
| -CXXFLAGS ?= -O3 -fPIC -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy |
| -# LibJXR |
| -CXXFLAGS += -D__ANSI__ |
| -CXXFLAGS += $(INCLUDE) |
| +override CFLAGS += $(INCLUDE) -D__ANSI__ -I/usr/include/jxrlib $(shell pkg-config --cflags OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib) |
| +override LDFLAGS += -ljpeg -ljpegxr -ljxrglue $(shell pkg-config --libs OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib) |
| |
| ifeq ($(shell sh -c 'uname -m 2>/dev/null || echo not'),x86_64) |
| - CFLAGS += -fPIC |
| - CXXFLAGS += -fPIC |
| + override CFLAGS += -fPIC |
| endif |
| |
| TARGET = freeimage |
| @@ -61,13 +51,13 @@ FreeImage: $(STATICLIB) $(SHAREDLIB) |
| $(CC) $(CFLAGS) -c $< -o $@ |
| |
| .cpp.o: |
| - $(CXX) $(CXXFLAGS) -c $< -o $@ |
| + $(CXX) $(CFLAGS) -c $< -o $@ |
| |
| $(STATICLIB): $(MODULES) |
| $(AR) r $@ $(MODULES) |
| |
| $(SHAREDLIB): $(MODULES) |
| - $(CC) -s -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) |
| + $(CC) -shared -Wl,-soname,$(VERLIBNAME) $(LDFLAGS) -o $@ $(MODULES) $(LIBRARIES) |
| |
| install: |
| install -d $(INCDIR) $(INSTALLDIR) |
| diff -rupN FreeImage/Source/FreeImage/J2KHelper.cpp FreeImage-new/Source/FreeImage/J2KHelper.cpp |
| --- FreeImage/Source/FreeImage/J2KHelper.cpp 2015-03-03 23:07:08.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImage/J2KHelper.cpp 2018-07-31 23:37:58.557953201 +0200 |
| @@ -21,7 +21,7 @@ |
| |
| #include "FreeImage.h" |
| #include "Utilities.h" |
| -#include "../LibOpenJPEG/openjpeg.h" |
| +#include <openjpeg.h> |
| #include "J2KHelper.h" |
| |
| // -------------------------------------------------------------------------- |
| diff -rupN FreeImage/Source/FreeImage/Plugin.cpp FreeImage-new/Source/FreeImage/Plugin.cpp |
| --- FreeImage/Source/FreeImage/Plugin.cpp 2017-02-18 14:09:28.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImage/Plugin.cpp 2018-07-31 23:37:58.558953201 +0200 |
| @@ -263,7 +263,12 @@ FreeImage_Initialise(BOOL load_local_plu |
| s_plugins->AddNode(InitDDS); |
| s_plugins->AddNode(InitGIF); |
| s_plugins->AddNode(InitHDR); |
| - s_plugins->AddNode(InitG3); |
| +/* The G3 fax format plugin is deliberately disabled in the Fedora build of |
| + FreeImage as it requires that FreeImage uses a private copy of libtiff |
| + which is a no no because of security reasons. */ |
| +#if 0 |
| + s_plugins->AddNode(InitG3); |
| +#endif |
| s_plugins->AddNode(InitSGI); |
| s_plugins->AddNode(InitEXR); |
| s_plugins->AddNode(InitJ2K); |
| diff -rupN FreeImage/Source/FreeImage/PluginEXR.cpp FreeImage-new/Source/FreeImage/PluginEXR.cpp |
| --- FreeImage/Source/FreeImage/PluginEXR.cpp 2015-03-03 23:07:08.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImage/PluginEXR.cpp 2018-07-31 23:37:58.559953201 +0200 |
| @@ -28,16 +28,16 @@ |
| #pragma warning (disable : 4800) // ImfVersion.h - 'const int' : forcing value to bool 'true' or 'false' (performance warning) |
| #endif |
| |
| -#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 <OpenEXR/ImfIO.h> |
| +#include <OpenEXR/Iex.h> |
| +#include <OpenEXR/ImfOutputFile.h> |
| +#include <OpenEXR/ImfInputFile.h> |
| +#include <OpenEXR/ImfRgbaFile.h> |
| +#include <OpenEXR/ImfChannelList.h> |
| +#include <OpenEXR/ImfRgba.h> |
| +#include <OpenEXR/ImfArray.h> |
| +#include <OpenEXR/ImfPreviewImage.h> |
| +#include <OpenEXR/half.h> |
| |
| |
| // ========================================================== |
| diff -rupN FreeImage/Source/FreeImage/PluginJ2K.cpp FreeImage-new/Source/FreeImage/PluginJ2K.cpp |
| --- FreeImage/Source/FreeImage/PluginJ2K.cpp 2015-03-03 23:07:08.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImage/PluginJ2K.cpp 2018-07-31 23:37:58.559953201 +0200 |
| @@ -21,7 +21,7 @@ |
| |
| #include "FreeImage.h" |
| #include "Utilities.h" |
| -#include "../LibOpenJPEG/openjpeg.h" |
| +#include <openjpeg.h> |
| #include "J2KHelper.h" |
| |
| // ========================================================== |
| diff -rupN FreeImage/Source/FreeImage/PluginJP2.cpp FreeImage-new/Source/FreeImage/PluginJP2.cpp |
| --- FreeImage/Source/FreeImage/PluginJP2.cpp 2015-03-03 23:07:08.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImage/PluginJP2.cpp 2018-07-31 23:37:58.560953201 +0200 |
| @@ -21,7 +21,7 @@ |
| |
| #include "FreeImage.h" |
| #include "Utilities.h" |
| -#include "../LibOpenJPEG/openjpeg.h" |
| +#include <openjpeg.h> |
| #include "J2KHelper.h" |
| |
| // ========================================================== |
| diff -rupN FreeImage/Source/FreeImage/PluginJPEG.cpp FreeImage-new/Source/FreeImage/PluginJPEG.cpp |
| --- FreeImage/Source/FreeImage/PluginJPEG.cpp 2018-07-28 19:22:22.000000000 +0200 |
| +++ FreeImage-new/Source/FreeImage/PluginJPEG.cpp 2018-07-31 23:37:58.561953201 +0200 |
| @@ -35,9 +35,9 @@ extern "C" { |
| #undef FAR |
| #include <setjmp.h> |
| |
| -#include "../LibJPEG/jinclude.h" |
| -#include "../LibJPEG/jpeglib.h" |
| -#include "../LibJPEG/jerror.h" |
| +#include <stdio.h> |
| +#include <jpeglib.h> |
| +#include <jerror.h> |
| } |
| |
| #include "FreeImage.h" |
| @@ -485,116 +485,6 @@ marker_is_icc(jpeg_saved_marker_ptr mark |
| } |
| |
| /** |
| - 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) |
| */ |
| static BOOL |
| diff -rupN FreeImage/Source/FreeImage/PluginJXR.cpp FreeImage-new/Source/FreeImage/PluginJXR.cpp |
| --- FreeImage/Source/FreeImage/PluginJXR.cpp 2015-03-03 23:07:08.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImage/PluginJXR.cpp 2018-07-31 23:37:58.561953201 +0200 |
| @@ -23,7 +23,7 @@ |
| #include "Utilities.h" |
| #include "../Metadata/FreeImageTag.h" |
| |
| -#include "../LibJXR/jxrgluelib/JXRGlue.h" |
| +#include <JXRGlue.h> |
| |
| // ========================================================== |
| // Plugin Interface |
| diff -rupN FreeImage/Source/FreeImage/PluginPNG.cpp FreeImage-new/Source/FreeImage/PluginPNG.cpp |
| --- FreeImage/Source/FreeImage/PluginPNG.cpp 2018-07-28 20:15:24.000000000 +0200 |
| +++ FreeImage-new/Source/FreeImage/PluginPNG.cpp 2018-07-31 23:37:58.561953201 +0200 |
| @@ -40,8 +40,8 @@ |
| |
| // ---------------------------------------------------------- |
| |
| -#include "../ZLib/zlib.h" |
| -#include "../LibPNG/png.h" |
| +#include <zlib.h> |
| +#include <png.h> |
| |
| // ---------------------------------------------------------- |
| |
| diff -rupN FreeImage/Source/FreeImage/PluginRAW.cpp FreeImage-new/Source/FreeImage/PluginRAW.cpp |
| --- FreeImage/Source/FreeImage/PluginRAW.cpp 2015-03-10 10:12:04.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImage/PluginRAW.cpp 2018-07-31 23:37:58.561953201 +0200 |
| @@ -19,7 +19,7 @@ |
| // Use at your own risk! |
| // ========================================================== |
| |
| -#include "../LibRawLite/libraw/libraw.h" |
| +#include <libraw/libraw.h> |
| |
| #include "FreeImage.h" |
| #include "Utilities.h" |
| diff -rupN FreeImage/Source/FreeImage/PluginTIFF.cpp FreeImage-new/Source/FreeImage/PluginTIFF.cpp |
| --- FreeImage/Source/FreeImage/PluginTIFF.cpp 2018-07-29 00:24:43.000000000 +0200 |
| +++ FreeImage-new/Source/FreeImage/PluginTIFF.cpp 2018-07-31 23:52:38.774904514 +0200 |
| @@ -37,9 +37,9 @@ |
| |
| #include "FreeImage.h" |
| #include "Utilities.h" |
| -#include "../LibTIFF4/tiffiop.h" |
| +#include <tiffio.h> |
| #include "../Metadata/FreeImageTag.h" |
| -#include "../OpenEXR/Half/half.h" |
| +#include <OpenEXR/half.h> |
| |
| #include "FreeImageIO.h" |
| #include "PSDParser.h" |
| @@ -193,17 +193,6 @@ TIFFFdOpen(thandle_t handle, const char |
| |
| return tif; |
| } |
| - |
| -/** |
| -Open a TIFF file for reading or writing |
| -@param name |
| -@param mode |
| -*/ |
| -TIFF* |
| -TIFFOpen(const char* name, const char* mode) { |
| - return 0; |
| -} |
| - |
| // ---------------------------------------------------------- |
| // TIFF library FreeImage-specific routines. |
| // ---------------------------------------------------------- |
| diff -rupN FreeImage/Source/FreeImage/PluginWebP.cpp FreeImage-new/Source/FreeImage/PluginWebP.cpp |
| --- FreeImage/Source/FreeImage/PluginWebP.cpp 2016-06-15 15:48:12.000000000 +0200 |
| +++ FreeImage-new/Source/FreeImage/PluginWebP.cpp 2018-07-31 23:38:40.531950880 +0200 |
| @@ -24,9 +24,9 @@ |
| |
| #include "../Metadata/FreeImageTag.h" |
| |
| -#include "../LibWebP/src/webp/decode.h" |
| -#include "../LibWebP/src/webp/encode.h" |
| -#include "../LibWebP/src/webp/mux.h" |
| +#include <webp/decode.h> |
| +#include <webp/encode.h> |
| +#include <webp/mux.h> |
| |
| // ========================================================== |
| // Plugin Interface |
| diff -rupN FreeImage/Source/FreeImage/PSDParser.cpp FreeImage-new/Source/FreeImage/PSDParser.cpp |
| --- FreeImage/Source/FreeImage/PSDParser.cpp 2016-02-11 03:18:02.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImage/PSDParser.cpp 2018-08-01 00:17:18.323822675 +0200 |
| @@ -133,8 +133,8 @@ public: |
| template <> |
| class PSDGetValue<8> { |
| public: |
| - static inline UINT64 get(const BYTE * iprBuffer) { |
| - UINT64 v = ((const UINT64*)iprBuffer)[0]; |
| + static inline uint64_t get(const BYTE * iprBuffer) { |
| + uint64_t v = ((const uint64_t*)iprBuffer)[0]; |
| #ifndef FREEIMAGE_BIGENDIAN |
| SwapInt64(&v); |
| #endif |
| @@ -147,7 +147,7 @@ public: |
| |
| // -------------------------------------------------------------------------- |
| |
| -static UINT64 |
| +static uint64_t |
| psdReadSize(FreeImageIO *io, fi_handle handle, const psdHeaderInfo& header) { |
| if(header._Version == 1) { |
| BYTE Length[4]; |
| @@ -199,11 +199,11 @@ public: |
| template <> |
| class PSDSetValue<8> { |
| public: |
| - static inline void set(const BYTE * iprBuffer, UINT64 v) { |
| + static inline void set(const BYTE * iprBuffer, uint64_t v) { |
| #ifndef FREEIMAGE_BIGENDIAN |
| SwapInt64(&v); |
| #endif |
| - ((UINT64*)iprBuffer)[0] = v; |
| + ((uint64_t*)iprBuffer)[0] = v; |
| } |
| }; |
| |
| @@ -213,7 +213,7 @@ public: |
| // -------------------------------------------------------------------------- |
| |
| static inline bool |
| -psdWriteSize(FreeImageIO *io, fi_handle handle, const psdHeaderInfo& header, UINT64 v) { |
| +psdWriteSize(FreeImageIO *io, fi_handle handle, const psdHeaderInfo& header, uint64_t v) { |
| if(header._Version == 1) { |
| BYTE Length[4]; |
| psdSetLongValue(Length, sizeof(Length), (DWORD)v); |
| @@ -1063,10 +1063,10 @@ unsigned psdParser::GetChannelOffset(FIB |
| bool psdParser::ReadLayerAndMaskInfoSection(FreeImageIO *io, fi_handle handle) { |
| bool bSuccess = true; |
| |
| - UINT64 nTotalBytes = psdReadSize(io, handle, _headerInfo); |
| + uint64_t nTotalBytes = psdReadSize(io, handle, _headerInfo); |
| |
| // Hack to handle large PSB files without using fseeko(). |
| - if (sizeof(long) < sizeof(UINT64)) { |
| + if (sizeof(long) < sizeof(uint64_t)) { |
| const long offset = 0x10000000; |
| while (nTotalBytes > offset) { |
| if (io->seek_proc(handle, offset, SEEK_CUR) != 0) { |
| @@ -1672,7 +1672,7 @@ bool psdParser::WriteLayerAndMaskInfoSec |
| // Short section with no layers. |
| BYTE IntValue[4]; |
| |
| - UINT64 size; |
| + uint64_t size; |
| if(_headerInfo._Version == 1) { |
| size = 8; |
| } else { |
| diff -rupN FreeImage/Source/FreeImage/ZLibInterface.cpp FreeImage-new/Source/FreeImage/ZLibInterface.cpp |
| --- FreeImage/Source/FreeImage/ZLibInterface.cpp 2015-03-03 23:07:10.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImage/ZLibInterface.cpp 2018-07-31 23:37:58.563953201 +0200 |
| @@ -19,10 +19,9 @@ |
| // 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) */ |
| |
| /** |
| Compresses a source buffer into a target buffer, using the ZLib library. |
| @@ -115,7 +114,7 @@ FreeImage_ZLibGZip(BYTE *target, DWORD t |
| return 0; |
| case Z_OK: { |
| // patch header, setup crc and length (stolen from mod_trace_output) |
| - BYTE *p = target + 8; *p++ = 2; *p = OS_CODE; // xflags, os_code |
| + BYTE *p = target + 8; *p++ = 2; *p = 0x03; // xflags, os_code (unix) |
| crc = crc32(crc, source, source_size); |
| memcpy(target + 4 + dest_len, &crc, 4); |
| memcpy(target + 8 + dest_len, &source_size, 4); |
| diff -rupN FreeImage/Source/FreeImage.h FreeImage-new/Source/FreeImage.h |
| --- FreeImage/Source/FreeImage.h 2018-03-25 18:42:20.000000000 +0200 |
| +++ FreeImage-new/Source/FreeImage.h 2018-08-01 00:16:34.704825088 +0200 |
| @@ -155,8 +155,11 @@ typedef uint8_t BYTE; |
| typedef uint16_t WORD; |
| typedef uint32_t DWORD; |
| typedef int32_t LONG; |
| +// Disable these, they conflict with the (wrong) ones of libraw |
| +#if 0 |
| typedef int64_t INT64; |
| typedef uint64_t UINT64; |
| +#endif |
| #else |
| // MS is not C99 ISO compliant |
| typedef long BOOL; |
| @@ -410,7 +413,12 @@ FI_ENUM(FREE_IMAGE_FORMAT) { |
| FIF_DDS = 24, |
| FIF_GIF = 25, |
| FIF_HDR = 26, |
| - FIF_FAXG3 = 27, |
| +/* The G3 fax format plugin is deliberately disabled in the Fedora build of |
| + FreeImage as it requires that FreeImage uses a private copy of libtiff |
| + which is a no no because of security reasons. */ |
| +#if 0 |
| + FIF_FAXG3 = 27, |
| +#endif |
| FIF_SGI = 28, |
| FIF_EXR = 29, |
| FIF_J2K = 30, |
| @@ -473,6 +481,10 @@ FI_ENUM(FREE_IMAGE_DITHER) { |
| FID_BAYER16x16 = 6 //! Bayer ordered dispersed dot dithering (order 4 dithering matrix) |
| }; |
| |
| +/* The FreeImage_JPEGTransform functions are deliberately disabled in the |
| + Fedora build of FreeImage as they require that FreeImage uses a private copy |
| + of libjpeg which is a no no because of security reasons. */ |
| +#if 0 |
| /** Lossless JPEG transformations |
| Constants used in FreeImage_JPEGTransform |
| */ |
| @@ -486,6 +498,7 @@ FI_ENUM(FREE_IMAGE_JPEG_OPERATION) { |
| FIJPEG_OP_ROTATE_180 = 6, //! 180-degree rotation |
| FIJPEG_OP_ROTATE_270 = 7 //! 270-degree clockwise (or 90 ccw) |
| }; |
| +#endif |
| |
| /** Tone mapping operators. |
| Constants used in FreeImage_ToneMapping. |
| @@ -1088,7 +1101,10 @@ DLL_API const char* DLL_CALLCONV FreeIma |
| // -------------------------------------------------------------------------- |
| // JPEG lossless transformation routines |
| // -------------------------------------------------------------------------- |
| - |
| +/* The FreeImage_JPEGTransform functions are deliberately disabled in the |
| ++ Fedora build of FreeImage as they require that FreeImage uses a private copy |
| ++ of libjpeg which is a no no because of security reasons. */ |
| +#if 0 |
| DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransform(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE)); |
| DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect FI_DEFAULT(TRUE)); |
| DLL_API BOOL DLL_CALLCONV FreeImage_JPEGCrop(const char *src_file, const char *dst_file, int left, int top, int right, int bottom); |
| @@ -1097,6 +1113,7 @@ DLL_API BOOL DLL_CALLCONV FreeImage_JPEG |
| DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); |
| DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); |
| DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY* src_stream, FIMEMORY* dst_stream, FREE_IMAGE_JPEG_OPERATION operation, int* left, int* top, int* right, int* bottom, BOOL perfect FI_DEFAULT(TRUE)); |
| +#endif |
| |
| |
| // -------------------------------------------------------------------------- |
| diff -rupN FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp FreeImage-new/Source/FreeImageToolkit/JPEGTransform.cpp |
| --- FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp 2015-03-03 23:07:10.000000000 +0100 |
| +++ FreeImage-new/Source/FreeImageToolkit/JPEGTransform.cpp 2018-07-31 23:37:58.563953201 +0200 |
| @@ -26,10 +26,10 @@ extern "C" { |
| #undef FAR |
| #include <setjmp.h> |
| |
| -#include "../LibJPEG/jinclude.h" |
| -#include "../LibJPEG/jpeglib.h" |
| -#include "../LibJPEG/jerror.h" |
| -#include "../LibJPEG/transupp.h" |
| +#include <jinclude.h> |
| +#include <jpeglib.h> |
| +#include <jerror.h> |
| +#include <transupp.h> |
| } |
| |
| #include "FreeImage.h" |
| diff -rupN FreeImage/Source/Metadata/TagConversion.cpp FreeImage-new/Source/Metadata/TagConversion.cpp |
| --- FreeImage/Source/Metadata/TagConversion.cpp 2018-03-25 12:30:54.000000000 +0200 |
| +++ FreeImage-new/Source/Metadata/TagConversion.cpp 2018-07-31 23:37:58.564953201 +0200 |
| @@ -30,6 +30,11 @@ |
| |
| #define MAX_TEXT_EXTENT 512 |
| |
| +// These were in FreeImage.h, but are moved here to avoid conflicts (see note in FreeImage.h) |
| +typedef int64_t INT64; |
| +typedef uint64_t UINT64; |
| + |
| + |
| /** |
| Convert a tag to a C string |
| */ |
| diff -rupN FreeImage/Source/Metadata/XTIFF.cpp FreeImage-new/Source/Metadata/XTIFF.cpp |
| --- FreeImage/Source/Metadata/XTIFF.cpp 2015-03-03 23:07:10.000000000 +0100 |
| +++ FreeImage-new/Source/Metadata/XTIFF.cpp 2018-07-31 23:37:58.564953201 +0200 |
| @@ -29,13 +29,18 @@ |
| #pragma warning (disable : 4786) // identifier was truncated to 'number' characters |
| #endif |
| |
| -#include "../LibTIFF4/tiffiop.h" |
| +#include <tiffio.h> |
| |
| #include "FreeImage.h" |
| #include "Utilities.h" |
| #include "FreeImageTag.h" |
| #include "FIRational.h" |
| |
| +extern "C" |
| +{ |
| + int _TIFFDataSize(TIFFDataType type); |
| +} |
| + |
| // ---------------------------------------------------------- |
| // Extended TIFF Directory GEO Tag Support |
| // ---------------------------------------------------------- |
| @@ -224,6 +229,33 @@ tiff_write_geotiff_profile(TIFF *tif, FI |
| // TIFF EXIF tag reading & writing |
| // ---------------------------------------------------------- |
| |
| +static uint32 exif_tag_ids[] = { |
| + EXIFTAG_EXPOSURETIME, EXIFTAG_FNUMBER, EXIFTAG_EXPOSUREPROGRAM, |
| + EXIFTAG_SPECTRALSENSITIVITY, EXIFTAG_ISOSPEEDRATINGS, EXIFTAG_OECF, |
| + EXIFTAG_EXIFVERSION, EXIFTAG_DATETIMEORIGINAL, EXIFTAG_DATETIMEDIGITIZED, |
| + EXIFTAG_COMPONENTSCONFIGURATION, EXIFTAG_COMPRESSEDBITSPERPIXEL, |
| + EXIFTAG_SHUTTERSPEEDVALUE, EXIFTAG_APERTUREVALUE, |
| + EXIFTAG_BRIGHTNESSVALUE, EXIFTAG_EXPOSUREBIASVALUE, |
| + EXIFTAG_MAXAPERTUREVALUE, EXIFTAG_SUBJECTDISTANCE, EXIFTAG_METERINGMODE, |
| + EXIFTAG_LIGHTSOURCE, EXIFTAG_FLASH, EXIFTAG_FOCALLENGTH, |
| + EXIFTAG_SUBJECTAREA, EXIFTAG_MAKERNOTE, EXIFTAG_USERCOMMENT, |
| + EXIFTAG_SUBSECTIME, EXIFTAG_SUBSECTIMEORIGINAL, |
| + EXIFTAG_SUBSECTIMEDIGITIZED, EXIFTAG_FLASHPIXVERSION, EXIFTAG_COLORSPACE, |
| + EXIFTAG_PIXELXDIMENSION, EXIFTAG_PIXELYDIMENSION, |
| + EXIFTAG_RELATEDSOUNDFILE, EXIFTAG_FLASHENERGY, |
| + EXIFTAG_SPATIALFREQUENCYRESPONSE, EXIFTAG_FOCALPLANEXRESOLUTION, |
| + EXIFTAG_FOCALPLANEYRESOLUTION, EXIFTAG_FOCALPLANERESOLUTIONUNIT, |
| + EXIFTAG_SUBJECTLOCATION, EXIFTAG_EXPOSUREINDEX, EXIFTAG_SENSINGMETHOD, |
| + EXIFTAG_FILESOURCE, EXIFTAG_SCENETYPE, EXIFTAG_CFAPATTERN, |
| + EXIFTAG_CUSTOMRENDERED, EXIFTAG_EXPOSUREMODE, EXIFTAG_WHITEBALANCE, |
| + EXIFTAG_DIGITALZOOMRATIO, EXIFTAG_FOCALLENGTHIN35MMFILM, |
| + EXIFTAG_SCENECAPTURETYPE, EXIFTAG_GAINCONTROL, EXIFTAG_CONTRAST, |
| + EXIFTAG_SATURATION, EXIFTAG_SHARPNESS, EXIFTAG_DEVICESETTINGDESCRIPTION, |
| + EXIFTAG_SUBJECTDISTANCERANGE, EXIFTAG_GAINCONTROL, EXIFTAG_GAINCONTROL, |
| + EXIFTAG_IMAGEUNIQUEID |
| +}; |
| +static int nExifTags = sizeof(exif_tag_ids) / sizeof(exif_tag_ids[0]); |
| + |
| /** |
| Read a single Exif tag |
| |
| @@ -575,45 +607,11 @@ tiff_read_exif_tags(TIFF *tif, TagLib::M |
| |
| // loop over all Core Directory Tags |
| // ### uses private data, but there is no other way |
| + // -> Fedora: Best we can do without private headers is to hard-code a list of known EXIF tags and read those |
| if(md_model == TagLib::EXIF_MAIN) { |
| - const TIFFDirectory *td = &tif->tif_dir; |
| - |
| - uint32 lastTag = 0; //<- used to prevent reading some tags twice (as stored in tif_fieldinfo) |
| - |
| - for (int fi = 0, nfi = (int)tif->tif_nfields; nfi > 0; nfi--, fi++) { |
| - const TIFFField *fld = tif->tif_fields[fi]; |
| - |
| - const uint32 tag_id = TIFFFieldTag(fld); |
| - |
| - if(tag_id == lastTag) { |
| - continue; |
| - } |
| - |
| - // test if tag value is set |
| - // (lifted directly from LibTiff _TIFFWriteDirectory) |
| - |
| - if( fld->field_bit == FIELD_CUSTOM ) { |
| - int is_set = FALSE; |
| - |
| - for(int ci = 0; ci < td->td_customValueCount; ci++ ) { |
| - is_set |= (td->td_customValues[ci].info == fld); |
| - } |
| - |
| - if( !is_set ) { |
| - continue; |
| - } |
| - |
| - } else if(!TIFFFieldSet(tif, fld->field_bit)) { |
| - continue; |
| - } |
| - |
| - // process *all* other tags (some will be ignored) |
| - |
| - tiff_read_exif_tag(tif, tag_id, dib, md_model); |
| - |
| - lastTag = tag_id; |
| + for (int i = 0; i < nExifTags; ++i) { |
| + tiff_read_exif_tag(tif, exif_tag_ids[i], dib, md_model); |
| } |
| - |
| } |
| |
| return TRUE; |
| @@ -723,10 +721,9 @@ tiff_write_exif_tags(TIFF *tif, TagLib:: |
| |
| TagLib& tag_lib = TagLib::instance(); |
| |
| - for (int fi = 0, nfi = (int)tif->tif_nfields; nfi > 0; nfi--, fi++) { |
| - const TIFFField *fld = tif->tif_fields[fi]; |
| - |
| - const uint32 tag_id = TIFFFieldTag(fld); |
| + for (int fi = 0; fi < nExifTags; fi++) { |
| + const uint32 tag_id = exif_tag_ids[fi]; |
| + const TIFFField *fld = TIFFFieldWithTag(tif, tag_id); |
| |
| if(skip_write_field(tif, tag_id)) { |
| // skip tags that are already handled by the LibTIFF writing process |
| diff -rupN FreeImage/Source/Utilities.h FreeImage-new/Source/Utilities.h |
| --- FreeImage/Source/Utilities.h 2016-04-11 15:15:32.000000000 +0200 |
| +++ FreeImage-new/Source/Utilities.h 2018-08-01 00:16:29.826825358 +0200 |
| @@ -446,12 +446,12 @@ SwapLong(DWORD *lp) { |
| } |
| |
| inline void |
| -SwapInt64(UINT64 *arg) { |
| +SwapInt64(uint64_t *arg) { |
| #if defined(_MSC_VER) && _MSC_VER >= 1310 |
| *arg = _byteswap_uint64(*arg); |
| #else |
| union Swap { |
| - UINT64 sv; |
| + uint64_t sv; |
| DWORD ul[2]; |
| } tmp, result; |
| tmp.sv = *arg; |