1/* $Id: tif_codec.c 276 2010-06-30 12:18:30Z nijtmans $ */
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
34static	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
77const TIFFCodec _TIFFBuiltinCODECS[] = {
78#else
79TIFFCodec _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
101static int
102_notConfigured(TIFF* tif)
103{
104	const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);
105        char compression_code[20];
106
107        sprintf( compression_code, "%d", tif->tif_dir.td_compression );
108	TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
109                     "%s compression support is not configured",
110                     c ? c->name : compression_code );
111	return (0);
112}
113
114static int
115NotConfigured(TIFF* tif, int scheme)
116{
117    (void) scheme;
118
119    tif->tif_decodestatus = FALSE;
120    tif->tif_setupdecode = _notConfigured;
121    tif->tif_encodestatus = FALSE;
122    tif->tif_setupencode = _notConfigured;
123    return (1);
124}
125
126/************************************************************************/
127/*                       TIFFIsCODECConfigured()                        */
128/************************************************************************/
129
130/**
131 * Check whether we have working codec for the specific coding scheme.
132 *
133 * @return returns 1 if the codec is configured and working. Otherwise
134 * 0 will be returned.
135 */
136
137int
138TIFFIsCODECConfigured(uint16 scheme)
139{
140	const TIFFCodec* codec = TIFFFindCODEC(scheme);
141
142	if(codec == NULL) {
143            return 0;
144        }
145        if(codec->init == NULL) {
146            return 0;
147        }
148	if(codec->init != NotConfigured){
149            return 1;
150        }
151	return 0;
152}
153
154/*
155 * Local Variables:
156 * mode: c
157 * c-basic-offset: 8
158 * fill-column: 78
159 * End:
160 */
161