1
by Brian Sidebotham
Initial import into Bazaar |
1 |
/* $Id: tif_codec.c 47655 2007-07-22 15:36:51Z VZ $ */
|
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 |
{
|
|
104 |
const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression); |
|
105 |
||
106 |
TIFFErrorExt(tif->tif_clientdata, tif->tif_name, |
|
107 |
"%s compression support is not configured", c->name); |
|
108 |
return (0); |
|
109 |
}
|
|
110 |
||
111 |
static int |
|
112 |
NotConfigured(TIFF* tif, int scheme) |
|
113 |
{
|
|
114 |
(void) scheme; |
|
115 |
||
116 |
tif->tif_decodestatus = FALSE; |
|
117 |
tif->tif_setupdecode = _notConfigured; |
|
118 |
tif->tif_encodestatus = FALSE; |
|
119 |
tif->tif_setupencode = _notConfigured; |
|
120 |
return (1); |
|
121 |
}
|
|
122 |
||
123 |
/************************************************************************/
|
|
124 |
/* TIFFIsCODECConfigured() */
|
|
125 |
/************************************************************************/
|
|
126 |
||
127 |
/**
|
|
128 |
* Check whether we have working codec for the specific coding scheme.
|
|
129 |
*
|
|
130 |
* @return returns 1 if the codec is configured and working. Otherwise
|
|
131 |
* 0 will be returned.
|
|
132 |
*/
|
|
133 |
||
134 |
int
|
|
135 |
TIFFIsCODECConfigured(uint16 scheme) |
|
136 |
{
|
|
137 |
const TIFFCodec* codec = TIFFFindCODEC(scheme); |
|
138 |
||
139 |
if(codec == NULL) { |
|
140 |
return 0; |
|
141 |
}
|
|
142 |
if(codec->init == NULL) { |
|
143 |
return 0; |
|
144 |
}
|
|
145 |
if(codec->init != NotConfigured){ |
|
146 |
return 1; |
|
147 |
}
|
|
148 |
return 0; |
|
149 |
}
|
|
150 |