tif_codec.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*
  2. * Copyright (c) 1988-1997 Sam Leffler
  3. * Copyright (c) 1991-1997 Silicon Graphics, Inc.
  4. *
  5. * Permission to use, copy, modify, distribute, and sell this software and
  6. * its documentation for any purpose is hereby granted without fee, provided
  7. * that (i) the above copyright notices and this permission notice appear in
  8. * all copies of the software and related documentation, and (ii) the names of
  9. * Sam Leffler and Silicon Graphics may not be used in any advertising or
  10. * publicity relating to the software without the specific, prior written
  11. * permission of Sam Leffler and Silicon Graphics.
  12. *
  13. * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
  14. * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
  15. * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  16. *
  17. * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  18. * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  19. * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  20. * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
  21. * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
  22. * OF THIS SOFTWARE.
  23. */
  24. /*
  25. * TIFF Library
  26. *
  27. * Builtin Compression Scheme Configuration Support.
  28. */
  29. #include "tiffiop.h"
  30. static int NotConfigured(TIFF*, int);
  31. #ifndef LZW_SUPPORT
  32. #define TIFFInitLZW NotConfigured
  33. #endif
  34. #ifndef PACKBITS_SUPPORT
  35. #define TIFFInitPackBits NotConfigured
  36. #endif
  37. #ifndef THUNDER_SUPPORT
  38. #define TIFFInitThunderScan NotConfigured
  39. #endif
  40. #ifndef NEXT_SUPPORT
  41. #define TIFFInitNeXT NotConfigured
  42. #endif
  43. #ifndef JPEG_SUPPORT
  44. #define TIFFInitJPEG NotConfigured
  45. #endif
  46. #ifndef OJPEG_SUPPORT
  47. #define TIFFInitOJPEG NotConfigured
  48. #endif
  49. #ifndef CCITT_SUPPORT
  50. #define TIFFInitCCITTRLE NotConfigured
  51. #define TIFFInitCCITTRLEW NotConfigured
  52. #define TIFFInitCCITTFax3 NotConfigured
  53. #define TIFFInitCCITTFax4 NotConfigured
  54. #endif
  55. #ifndef JBIG_SUPPORT
  56. #define TIFFInitJBIG NotConfigured
  57. #endif
  58. #ifndef ZIP_SUPPORT
  59. #define TIFFInitZIP NotConfigured
  60. #endif
  61. #ifndef PIXARLOG_SUPPORT
  62. #define TIFFInitPixarLog NotConfigured
  63. #endif
  64. #ifndef LOGLUV_SUPPORT
  65. #define TIFFInitSGILog NotConfigured
  66. #endif
  67. #ifndef LZMA_SUPPORT
  68. #define TIFFInitLZMA NotConfigured
  69. #endif
  70. #ifndef ZSTD_SUPPORT
  71. #define TIFFInitZSTD NotConfigured
  72. #endif
  73. #ifndef WEBP_SUPPORT
  74. #define TIFFInitWebP NotConfigured
  75. #endif
  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. { "ZSTD", COMPRESSION_ZSTD, TIFFInitZSTD },
  103. { "WEBP", COMPRESSION_WEBP, TIFFInitWebP },
  104. { NULL, 0, NULL }
  105. };
  106. static int
  107. _notConfigured(TIFF* tif)
  108. {
  109. const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);
  110. char compression_code[20];
  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. static int
  118. NotConfigured(TIFF* tif, int scheme)
  119. {
  120. (void) scheme;
  121. tif->tif_fixuptags = _notConfigured;
  122. tif->tif_decodestatus = FALSE;
  123. tif->tif_setupdecode = _notConfigured;
  124. tif->tif_encodestatus = FALSE;
  125. tif->tif_setupencode = _notConfigured;
  126. return (1);
  127. }
  128. /************************************************************************/
  129. /* TIFFIsCODECConfigured() */
  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. int
  138. TIFFIsCODECConfigured(uint16 scheme)
  139. {
  140. const TIFFCodec* codec = TIFFFindCODEC(scheme);
  141. if(codec == NULL) {
  142. return 0;
  143. }
  144. if(codec->init == NULL) {
  145. return 0;
  146. }
  147. if(codec->init != NotConfigured){
  148. return 1;
  149. }
  150. return 0;
  151. }
  152. /*
  153. * Local Variables:
  154. * mode: c
  155. * c-basic-offset: 8
  156. * fill-column: 78
  157. * End:
  158. */