1 : /* $Id: tif_codec.c,v 1.14 2010-03-10 18:56:48 bfriesen 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 :
73 : /*
74 : * Compression schemes statically built into the library.
75 : */
76 : #ifdef VMS
77 : const TIFFCodec _TIFFBuiltinCODECS[] = {
78 : #else
79 : TIFFCodec _TIFFBuiltinCODECS[] = {
80 : #endif
81 : { "None", COMPRESSION_NONE, TIFFInitDumpMode },
82 : { "LZW", COMPRESSION_LZW, TIFFInitLZW },
83 : { "PackBits", COMPRESSION_PACKBITS, TIFFInitPackBits },
84 : { "ThunderScan", COMPRESSION_THUNDERSCAN,TIFFInitThunderScan },
85 : { "NeXT", COMPRESSION_NEXT, TIFFInitNeXT },
86 : { "JPEG", COMPRESSION_JPEG, TIFFInitJPEG },
87 : { "Old-style JPEG", COMPRESSION_OJPEG, TIFFInitOJPEG },
88 : { "CCITT RLE", COMPRESSION_CCITTRLE, TIFFInitCCITTRLE },
89 : { "CCITT RLE/W", COMPRESSION_CCITTRLEW, TIFFInitCCITTRLEW },
90 : { "CCITT Group 3", COMPRESSION_CCITTFAX3, TIFFInitCCITTFax3 },
91 : { "CCITT Group 4", COMPRESSION_CCITTFAX4, TIFFInitCCITTFax4 },
92 : { "ISO JBIG", COMPRESSION_JBIG, TIFFInitJBIG },
93 : { "Deflate", COMPRESSION_DEFLATE, TIFFInitZIP },
94 : { "AdobeDeflate", COMPRESSION_ADOBE_DEFLATE , TIFFInitZIP },
95 : { "PixarLog", COMPRESSION_PIXARLOG, TIFFInitPixarLog },
96 : { "SGILog", COMPRESSION_SGILOG, TIFFInitSGILog },
97 : { "SGILog24", COMPRESSION_SGILOG24, TIFFInitSGILog },
98 : { NULL, 0, NULL }
99 : };
100 :
101 : static int
102 : _notConfigured(TIFF* tif)
103 0 : {
104 0 : const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);
105 : char compression_code[20];
106 :
107 0 : sprintf( compression_code, "%d", tif->tif_dir.td_compression );
108 0 : TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
109 : "%s compression support is not configured",
110 : c ? c->name : compression_code );
111 0 : return (0);
112 : }
113 :
114 : static int
115 : NotConfigured(TIFF* tif, int scheme)
116 0 : {
117 : (void) scheme;
118 :
119 0 : tif->tif_fixuptags = _notConfigured;
120 0 : tif->tif_decodestatus = FALSE;
121 0 : tif->tif_setupdecode = _notConfigured;
122 0 : tif->tif_encodestatus = FALSE;
123 0 : tif->tif_setupencode = _notConfigured;
124 0 : return (1);
125 : }
126 :
127 : /************************************************************************/
128 : /* TIFFIsCODECConfigured() */
129 : /************************************************************************/
130 :
131 : /**
132 : * Check whether we have working codec for the specific coding scheme.
133 : *
134 : * @return returns 1 if the codec is configured and working. Otherwise
135 : * 0 will be returned.
136 : */
137 :
138 : int
139 : TIFFIsCODECConfigured(uint16 scheme)
140 6926 : {
141 6926 : const TIFFCodec* codec = TIFFFindCODEC(scheme);
142 :
143 6926 : if(codec == NULL) {
144 0 : return 0;
145 : }
146 6926 : if(codec->init == NULL) {
147 0 : return 0;
148 : }
149 6926 : if(codec->init != NotConfigured){
150 6534 : return 1;
151 : }
152 392 : return 0;
153 : }
154 :
155 : /*
156 : * Local Variables:
157 : * mode: c
158 : * c-basic-offset: 8
159 : * fill-column: 78
160 : * End:
161 : */
|