/src/freeimage-svn/FreeImage/trunk/Source/LibTIFF4/tif_codec.c
Line  | Count  | Source  | 
1  |  | /*  | 
2  |  |  * Copyright (c) 1988-1997 Sam Leffler  | 
3  |  |  * Copyright (c) 1991-1997 Silicon Graphics, Inc.  | 
4  |  |  *  | 
5  |  |  * Permission to use, copy, modify, distribute, and sell this software and  | 
6  |  |  * its documentation for any purpose is hereby granted without fee, provided  | 
7  |  |  * that (i) the above copyright notices and this permission notice appear in  | 
8  |  |  * all copies of the software and related documentation, and (ii) the names of  | 
9  |  |  * Sam Leffler and Silicon Graphics may not be used in any advertising or  | 
10  |  |  * publicity relating to the software without the specific, prior written  | 
11  |  |  * permission of Sam Leffler and Silicon Graphics.  | 
12  |  |  *  | 
13  |  |  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,  | 
14  |  |  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY  | 
15  |  |  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  | 
16  |  |  *  | 
17  |  |  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR  | 
18  |  |  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,  | 
19  |  |  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,  | 
20  |  |  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF  | 
21  |  |  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE  | 
22  |  |  * OF THIS SOFTWARE.  | 
23  |  |  */  | 
24  |  |  | 
25  |  | /*  | 
26  |  |  * TIFF Library  | 
27  |  |  *  | 
28  |  |  * Builtin Compression Scheme Configuration Support.  | 
29  |  |  */  | 
30  |  | #include "tiffiop.h"  | 
31  |  |  | 
32  |  | static int NotConfigured(TIFF *, int);  | 
33  |  |  | 
34  |  | #ifndef LZW_SUPPORT  | 
35  |  | #define TIFFInitLZW NotConfigured  | 
36  |  | #endif  | 
37  |  | #ifndef PACKBITS_SUPPORT  | 
38  |  | #define TIFFInitPackBits NotConfigured  | 
39  |  | #endif  | 
40  |  | #ifndef THUNDER_SUPPORT  | 
41  |  | #define TIFFInitThunderScan NotConfigured  | 
42  |  | #endif  | 
43  |  | #ifndef NEXT_SUPPORT  | 
44  |  | #define TIFFInitNeXT NotConfigured  | 
45  |  | #endif  | 
46  |  | #ifndef JPEG_SUPPORT  | 
47  |  | #define TIFFInitJPEG NotConfigured  | 
48  |  | #endif  | 
49  |  | #ifndef OJPEG_SUPPORT  | 
50  |  | #define TIFFInitOJPEG NotConfigured  | 
51  |  | #endif  | 
52  |  | #ifndef CCITT_SUPPORT  | 
53  |  | #define TIFFInitCCITTRLE NotConfigured  | 
54  |  | #define TIFFInitCCITTRLEW NotConfigured  | 
55  |  | #define TIFFInitCCITTFax3 NotConfigured  | 
56  |  | #define TIFFInitCCITTFax4 NotConfigured  | 
57  |  | #endif  | 
58  |  | #ifndef JBIG_SUPPORT  | 
59  |  | #define TIFFInitJBIG NotConfigured  | 
60  |  | #endif  | 
61  |  | #ifndef ZIP_SUPPORT  | 
62  |  | #define TIFFInitZIP NotConfigured  | 
63  |  | #endif  | 
64  |  | #ifndef PIXARLOG_SUPPORT  | 
65  |  | #define TIFFInitPixarLog NotConfigured  | 
66  |  | #endif  | 
67  |  | #ifndef LOGLUV_SUPPORT  | 
68  |  | #define TIFFInitSGILog NotConfigured  | 
69  |  | #endif  | 
70  |  | #ifndef LERC_SUPPORT  | 
71  |  | #define TIFFInitLERC NotConfigured  | 
72  |  | #endif  | 
73  |  | #ifndef LZMA_SUPPORT  | 
74  |  | #define TIFFInitLZMA NotConfigured  | 
75  |  | #endif  | 
76  |  | #ifndef ZSTD_SUPPORT  | 
77  |  | #define TIFFInitZSTD NotConfigured  | 
78  |  | #endif  | 
79  |  | #ifndef WEBP_SUPPORT  | 
80  |  | #define TIFFInitWebP NotConfigured  | 
81  |  | #endif  | 
82  |  |  | 
83  |  | /*  | 
84  |  |  * Compression schemes statically built into the library.  | 
85  |  |  */  | 
86  |  | const TIFFCodec _TIFFBuiltinCODECS[] = { | 
87  |  |     {"None", COMPRESSION_NONE, TIFFInitDumpMode}, | 
88  |  |     {"LZW", COMPRESSION_LZW, TIFFInitLZW}, | 
89  |  |     {"PackBits", COMPRESSION_PACKBITS, TIFFInitPackBits}, | 
90  |  |     {"ThunderScan", COMPRESSION_THUNDERSCAN, TIFFInitThunderScan}, | 
91  |  |     {"NeXT", COMPRESSION_NEXT, TIFFInitNeXT}, | 
92  |  |     {"JPEG", COMPRESSION_JPEG, TIFFInitJPEG}, | 
93  |  |     {"Old-style JPEG", COMPRESSION_OJPEG, TIFFInitOJPEG}, | 
94  |  |     {"CCITT RLE", COMPRESSION_CCITTRLE, TIFFInitCCITTRLE}, | 
95  |  |     {"CCITT RLE/W", COMPRESSION_CCITTRLEW, TIFFInitCCITTRLEW}, | 
96  |  |     {"CCITT Group 3", COMPRESSION_CCITTFAX3, TIFFInitCCITTFax3}, | 
97  |  |     {"CCITT Group 4", COMPRESSION_CCITTFAX4, TIFFInitCCITTFax4}, | 
98  |  |     {"ISO JBIG", COMPRESSION_JBIG, TIFFInitJBIG}, | 
99  |  |     {"Deflate", COMPRESSION_DEFLATE, TIFFInitZIP}, | 
100  |  |     {"AdobeDeflate", COMPRESSION_ADOBE_DEFLATE, TIFFInitZIP}, | 
101  |  |     {"PixarLog", COMPRESSION_PIXARLOG, TIFFInitPixarLog}, | 
102  |  |     {"SGILog", COMPRESSION_SGILOG, TIFFInitSGILog}, | 
103  |  |     {"SGILog24", COMPRESSION_SGILOG24, TIFFInitSGILog}, | 
104  |  |     {"LZMA", COMPRESSION_LZMA, TIFFInitLZMA}, | 
105  |  |     {"ZSTD", COMPRESSION_ZSTD, TIFFInitZSTD}, | 
106  |  |     {"WEBP", COMPRESSION_WEBP, TIFFInitWebP}, | 
107  |  |     {"LERC", COMPRESSION_LERC, TIFFInitLERC}, | 
108  |  |     {NULL, 0, NULL}}; | 
109  |  |  | 
110  |  | static int _notConfigured(TIFF *tif)  | 
111  | 0  | { | 
112  | 0  |     const TIFFCodec *c = TIFFFindCODEC(tif->tif_dir.td_compression);  | 
113  | 0  |     char compression_code[20];  | 
114  |  | 
  | 
115  | 0  |     snprintf(compression_code, sizeof(compression_code), "%" PRIu16,  | 
116  | 0  |              tif->tif_dir.td_compression);  | 
117  | 0  |     TIFFErrorExtR(tif, tif->tif_name,  | 
118  | 0  |                   "%s compression support is not configured",  | 
119  | 0  |                   c ? c->name : compression_code);  | 
120  | 0  |     return (0);  | 
121  | 0  | }  | 
122  |  |  | 
123  |  | static int NotConfigured(TIFF *tif, int scheme)  | 
124  | 0  | { | 
125  | 0  |     (void)scheme;  | 
126  |  | 
  | 
127  | 0  |     tif->tif_fixuptags = _notConfigured;  | 
128  | 0  |     tif->tif_decodestatus = FALSE;  | 
129  | 0  |     tif->tif_setupdecode = _notConfigured;  | 
130  | 0  |     tif->tif_encodestatus = FALSE;  | 
131  | 0  |     tif->tif_setupencode = _notConfigured;  | 
132  | 0  |     return (1);  | 
133  | 0  | }  | 
134  |  |  | 
135  |  | /************************************************************************/  | 
136  |  | /*                       TIFFIsCODECConfigured()                        */  | 
137  |  | /************************************************************************/  | 
138  |  |  | 
139  |  | /**  | 
140  |  |  * Check whether we have working codec for the specific coding scheme.  | 
141  |  |  *  | 
142  |  |  * @return returns 1 if the codec is configured and working. Otherwise  | 
143  |  |  * 0 will be returned.  | 
144  |  |  */  | 
145  |  |  | 
146  |  | int TIFFIsCODECConfigured(uint16_t scheme)  | 
147  | 0  | { | 
148  | 0  |     const TIFFCodec *codec = TIFFFindCODEC(scheme);  | 
149  |  | 
  | 
150  | 0  |     if (codec == NULL)  | 
151  | 0  |     { | 
152  | 0  |         return 0;  | 
153  | 0  |     }  | 
154  | 0  |     if (codec->init == NULL)  | 
155  | 0  |     { | 
156  | 0  |         return 0;  | 
157  | 0  |     }  | 
158  | 0  |     if (codec->init != NotConfigured)  | 
159  | 0  |     { | 
160  | 0  |         return 1;  | 
161  | 0  |     }  | 
162  | 0  |     return 0;  | 
163  | 0  | }  |