Home | History | Annotate | Download | only in libtiff
      1 /* $Id: tif_codec.c,v 1.17 2015-08-19 02:31:04 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 #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