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