]> git.saurik.com Git - wxWidgets.git/blobdiff - src/tiff/tiffio.h
fixed unreachable code warnings (occurred in MSVC6+Release mode)
[wxWidgets.git] / src / tiff / tiffio.h
index 1ce1a415cb80606967598a313d6fcad04d3e250e..778f2f594117d28c75ac52800d2b5edd0dd461e5 100644 (file)
@@ -4,23 +4,23 @@
  * Copyright (c) 1988-1997 Sam Leffler
  * Copyright (c) 1991-1997 Silicon Graphics, Inc.
  *
- * Permission to use, copy, modify, distribute, and sell this software and
+ * Permission to use, copy, modify, distribute, and sell this software and 
  * its documentation for any purpose is hereby granted without fee, provided
  * that (i) the above copyright notices and this permission notice appear in
  * all copies of the software and related documentation, and (ii) the names of
  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  * publicity relating to the software without the specific, prior written
  * permission of Sam Leffler and Silicon Graphics.
- *
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- *
+ * 
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
+ * 
  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  * OF THIS SOFTWARE.
  */
 
  * TIFF I/O Library Definitions.
  */
 #include "tiff.h"
-
-/*
- * This define can be used in code that requires
- * compilation-related definitions specific to a
- * version or versions of the library.  Runtime
- * version checking should be done based on the
- * string returned by TIFFGetVersion.
- */
-#define        TIFFLIB_VERSION 19970127        /* January 27, 1997 */
+#include "tiffvers.h"
 
 /*
  * TIFF is defined as an incomplete type to hide the
@@ -63,7 +55,8 @@ typedef       struct tiff TIFF;
  * NB: tsize_t is int32 and not uint32 because some functions
  *     return -1.
  * NB: toff_t is not off_t for many reasons; TIFFs max out at
- *     32-bit file offsets being the most important
+ *     32-bit file offsets being the most important, and to ensure
+ *     that it is unsigned, rather than signed.
  */
 typedef        uint32 ttag_t;          /* directory tag */
 typedef        uint16 tdir_t;          /* directory index */
@@ -72,12 +65,27 @@ typedef     uint32 tstrip_t;        /* strip number */
 typedef uint32 ttile_t;                /* tile number */
 typedef        int32 tsize_t;          /* i/o size in bytes */
 typedef        void* tdata_t;          /* image data ref */
-typedef        int32 toff_t;           /* file offset */
+typedef        uint32 toff_t;          /* file offset */
 
 #if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32))
 #define __WIN32__
 #endif
+
+/*
+ * On windows you should define USE_WIN32_FILEIO if you are using tif_win32.c
+ * or AVOID_WIN32_FILEIO if you are using something else (like tif_unix.c).
+ *
+ * By default tif_win32.c is assumed on windows if not using the cygwin
+ * environment.
+ */
+
 #if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows)
+#  if !defined(__CYGWIN) && !defined(AVOID_WIN32_FILEIO) && !defined(USE_WIN32_FILIO)
+#    define USE_WIN32_FILEIO
+#  endif
+#endif
+
+#if defined(USE_WIN32_FILEIO)
 #include <windows.h>
 #ifdef __WIN32__
 DECLARE_HANDLE(thandle_t);     /* Win32 file handle */
@@ -88,12 +96,6 @@ typedef      HFILE thandle_t;        /* client data handle */
 typedef        void* thandle_t;        /* client data handle */
 #endif
 
-#if defined(__VISAGECPP__)
-#define LINKAGEMODE _Optlink
-#else
-#define LINKAGEMODE
-#endif
-
 #ifndef NULL
 #define        NULL    0
 #endif
@@ -112,39 +114,92 @@ typedef   void* thandle_t;        /* client data handle */
 #define        TIFFPRINT_JPEGACTABLES  0x200           /* JPEG AC tables */
 #define        TIFFPRINT_JPEGDCTABLES  0x200           /* JPEG DC tables */
 
+/* 
+ * Colour conversion stuff
+ */
+
+/* reference white */
+#define D65_X0 (95.0470F)
+#define D65_Y0 (100.0F)
+#define D65_Z0 (108.8827F)
+
+#define D50_X0 (96.4250F)
+#define D50_Y0 (100.0F)
+#define D50_Z0 (82.4680F)
+
+/* Structure for holding information about a display device. */
+
+typedef        unsigned char TIFFRGBValue;             /* 8-bit samples */
+
+typedef struct {
+       float d_mat[3][3];              /* XYZ -> luminance matrix */
+       float d_YCR;                    /* Light o/p for reference white */
+       float d_YCG;
+       float d_YCB;
+       uint32 d_Vrwr;                  /* Pixel values for ref. white */
+       uint32 d_Vrwg;
+       uint32 d_Vrwb;
+       float d_Y0R;                    /* Residual light for black pixel */
+       float d_Y0G;
+       float d_Y0B;
+       float d_gammaR;                 /* Gamma values for the three guns */
+       float d_gammaG;
+       float d_gammaB;
+} TIFFDisplay;
+
+typedef struct {                               /* YCbCr->RGB support */
+       TIFFRGBValue* clamptab;                 /* range clamping table */
+       int*    Cr_r_tab;
+       int*    Cb_b_tab;
+       int32*  Cr_g_tab;
+       int32*  Cb_g_tab;
+        int32*  Y_tab;
+} TIFFYCbCrToRGB;
+
+typedef struct {                               /* CIE Lab 1976->RGB support */
+       int     range;                          /* Size of conversion table */
+#define CIELABTORGB_TABLE_RANGE 1500
+       float   rstep, gstep, bstep;
+       float   X0, Y0, Z0;                     /* Reference white point */
+       TIFFDisplay display;
+       float   Yr2r[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yr to r */
+       float   Yg2g[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yg to g */
+       float   Yb2b[CIELABTORGB_TABLE_RANGE + 1];  /* Conversion of Yb to b */
+} TIFFCIELabToRGB;
+
+extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB*, TIFFDisplay *, float*);
+extern void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32, int32, int32,
+                           float *, float *, float *);
+extern void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float,
+                        uint32 *, uint32 *, uint32 *);
+
+extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB*, float*, float*);
+extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32, int32, int32,
+                          uint32 *, uint32 *, uint32 *);
+
 /*
  * RGBA-style image support.
  */
-typedef        unsigned char TIFFRGBValue;             /* 8-bit samples */
 typedef struct _TIFFRGBAImage TIFFRGBAImage;
 /*
  * The image reading and conversion routines invoke
  * ``put routines'' to copy/image/whatever tiles of
- * raw image data.  A default set of routines are
+ * raw image data.  A default set of routines are 
  * provided to convert/copy raw image data to 8-bit
  * packed ABGR format rasters.  Applications can supply
  * alternate routines that unpack the data into a
  * different format or, for example, unpack the data
  * and draw the unpacked raster on the display.
  */
-typedef void (LINKAGEMODE *tileContigRoutine)
+typedef void (*tileContigRoutine)
     (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32,
        unsigned char*);
-typedef void (LINKAGEMODE *tileSeparateRoutine)
+typedef void (*tileSeparateRoutine)
     (TIFFRGBAImage*, uint32*, uint32, uint32, uint32, uint32, int32, int32,
        unsigned char*, unsigned char*, unsigned char*, unsigned char*);
 /*
  * RGBA-reader state.
  */
-typedef struct {                               /* YCbCr->RGB support */
-       TIFFRGBValue* clamptab;                 /* range clamping table */
-       int*    Cr_r_tab;
-       int*    Cb_b_tab;
-       int32*  Cr_g_tab;
-       int32*  Cb_g_tab;
-       float   coeffs[3];                      /* cached for repeated use */
-} TIFFYCbCrToRGB;
-
 struct _TIFFRGBAImage {
        TIFF*   tif;                            /* image handle */
        int     stoponerr;                      /* stop on read error */
@@ -155,12 +210,13 @@ struct _TIFFRGBAImage {
        uint16  bitspersample;                  /* image bits/sample */
        uint16  samplesperpixel;                /* image samples/pixel */
        uint16  orientation;                    /* image orientation */
+       uint16  req_orientation;                /* requested orientation */
        uint16  photometric;                    /* image photometric interp */
        uint16* redcmap;                        /* colormap pallete */
        uint16* greencmap;
        uint16* bluecmap;
                                                /* get image data routine */
-       int     (LINKAGEMODE *get)(TIFFRGBAImage*, uint32*, uint32, uint32);
+       int     (*get)(TIFFRGBAImage*, uint32*, uint32, uint32);
        union {
            void (*any)(TIFFRGBAImage*);
            tileContigRoutine   contig;
@@ -170,6 +226,7 @@ struct _TIFFRGBAImage {
        uint32** BWmap;                         /* black&white map */
        uint32** PALmap;                        /* palette image map */
        TIFFYCbCrToRGB* ycbcr;                  /* YCbCr conversion state */
+        TIFFCIELabToRGB* cielab;               /* CIE L*a*b conversion state */
 
         int    row_offset;
         int     col_offset;
@@ -191,7 +248,7 @@ struct _TIFFRGBAImage {
  * More codecs may be registered through calls to the library
  * and/or the builtin implementations may be overridden.
  */
-typedef        int (LINKAGEMODE *TIFFInitMethod)(TIFF*, int);
+typedef        int (*TIFFInitMethod)(TIFF*, int);
 typedef struct {
        char*           name;
        uint16          scheme;
@@ -201,23 +258,29 @@ typedef struct {
 #include <stdio.h>
 #include <stdarg.h>
 
+/* share internal LogLuv conversion routines? */
+#ifndef LOGLUV_PUBLIC
+#define LOGLUV_PUBLIC          1       
+#endif
+
 #if defined(__cplusplus)
 extern "C" {
 #endif
-typedef        void (LINKAGEMODE *TIFFErrorHandler)(const char*, const char*, va_list);
-typedef        tsize_t (LINKAGEMODE *TIFFReadWriteProc)(thandle_t, tdata_t, tsize_t);
-typedef        toff_t (LINKAGEMODE *TIFFSeekProc)(thandle_t, toff_t, int);
-typedef        int (LINKAGEMODE *TIFFCloseProc)(thandle_t);
-typedef        toff_t (LINKAGEMODE *TIFFSizeProc)(thandle_t);
-typedef        int (LINKAGEMODE *TIFFMapFileProc)(thandle_t, tdata_t*, toff_t*);
-typedef        void (LINKAGEMODE *TIFFUnmapFileProc)(thandle_t, tdata_t, toff_t);
-typedef        void (LINKAGEMODE *TIFFExtendProc)(TIFF*);
+typedef        void (*TIFFErrorHandler)(const char*, const char*, va_list);
+typedef        tsize_t (*TIFFReadWriteProc)(thandle_t, tdata_t, tsize_t);
+typedef        toff_t (*TIFFSeekProc)(thandle_t, toff_t, int);
+typedef        int (*TIFFCloseProc)(thandle_t);
+typedef        toff_t (*TIFFSizeProc)(thandle_t);
+typedef        int (*TIFFMapFileProc)(thandle_t, tdata_t*, toff_t*);
+typedef        void (*TIFFUnmapFileProc)(thandle_t, tdata_t, toff_t);
+typedef        void (*TIFFExtendProc)(TIFF*); 
 
 extern const char* TIFFGetVersion(void);
 
 extern const TIFFCodec* TIFFFindCODEC(uint16);
 extern TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod);
 extern void TIFFUnRegisterCODEC(TIFFCodec*);
+extern  int TIFFIsCODECConfigured(uint16);
 
 extern tdata_t _TIFFmalloc(tsize_t);
 extern tdata_t _TIFFrealloc(tdata_t, tsize_t);
@@ -237,6 +300,7 @@ extern      int TIFFReadDirectory(TIFF*);
 extern tsize_t TIFFScanlineSize(TIFF*);
 extern tsize_t TIFFRasterScanlineSize(TIFF*);
 extern tsize_t TIFFStripSize(TIFF*);
+extern tsize_t TIFFRawStripSize(TIFF*, tstrip_t);
 extern tsize_t TIFFVStripSize(TIFF*, uint32);
 extern tsize_t TIFFTileRowSize(TIFF*);
 extern tsize_t TIFFTileSize(TIFF*);
@@ -257,6 +321,9 @@ extern      tstrip_t TIFFCurrentStrip(TIFF*);
 extern ttile_t TIFFCurrentTile(TIFF*);
 extern int TIFFReadBufferSetup(TIFF*, tdata_t, tsize_t);
 extern int TIFFWriteBufferSetup(TIFF*, tdata_t, tsize_t);
+extern int TIFFSetupStrips(TIFF *);
+extern  int TIFFWriteCheck(TIFF*, int, const char *);
+extern  int TIFFCreateDirectory(TIFF*);
 extern int TIFFLastDirectory(TIFF*);
 extern int TIFFSetDirectory(TIFF*, tdir_t);
 extern int TIFFSetSubDirectory(TIFF*, uint32);
@@ -264,6 +331,8 @@ extern      int TIFFUnlinkDirectory(TIFF*, tdir_t);
 extern int TIFFSetField(TIFF*, ttag_t, ...);
 extern int TIFFVSetField(TIFF*, ttag_t, va_list);
 extern int TIFFWriteDirectory(TIFF *);
+extern int TIFFCheckpointDirectory(TIFF *);
+extern int TIFFRewriteDirectory(TIFF *);
 extern int TIFFReassignTagToIgnore(enum TIFFIgnoreSense, int);
 
 #if defined(c_plusplus) || defined(__cplusplus)
@@ -271,11 +340,14 @@ extern    void TIFFPrintDirectory(TIFF*, FILE*, long = 0);
 extern int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t = 0);
 extern int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t = 0);
 extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0);
+extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*,
+                                     int = ORIENTATION_BOTLEFT, int = 0);
 #else
 extern void TIFFPrintDirectory(TIFF*, FILE*, long);
 extern int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t);
 extern int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t);
 extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int);
+extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, int, int);
 #endif
 
 extern int TIFFReadRGBAStrip(TIFF*, tstrip_t, uint32 * );
@@ -315,6 +387,7 @@ extern      tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
 extern tsize_t TIFFWriteRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
 extern tsize_t TIFFWriteEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t);
 extern tsize_t TIFFWriteRawTile(TIFF*, ttile_t, tdata_t, tsize_t);
+extern int TIFFDataWidth(TIFFDataType);    /* table of tag datatype widths */
 extern void TIFFSetWriteOffset(TIFF*, toff_t);
 extern void TIFFSwabShort(uint16*);
 extern void TIFFSwabLong(uint32*);
@@ -324,6 +397,80 @@ extern     void TIFFSwabArrayOfLong(uint32*, unsigned long);
 extern void TIFFSwabArrayOfDouble(double*, unsigned long);
 extern void TIFFReverseBits(unsigned char *, unsigned long);
 extern const unsigned char* TIFFGetBitRevTable(int);
+
+#ifdef LOGLUV_PUBLIC
+#define U_NEU          0.210526316
+#define V_NEU          0.473684211
+#define UVSCALE                410.
+extern double LogL16toY(int);
+extern double LogL10toY(int);
+extern void XYZtoRGB24(float*, uint8*);
+extern int uv_decode(double*, double*, int);
+extern void LogLuv24toXYZ(uint32, float*);
+extern void LogLuv32toXYZ(uint32, float*);
+#if defined(c_plusplus) || defined(__cplusplus)
+extern int LogL16fromY(double, int = SGILOGENCODE_NODITHER);
+extern int LogL10fromY(double, int = SGILOGENCODE_NODITHER);
+extern int uv_encode(double, double, int = SGILOGENCODE_NODITHER);
+extern uint32 LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER);
+extern uint32 LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER);
+#else
+extern int LogL16fromY(double, int);
+extern int LogL10fromY(double, int);
+extern int uv_encode(double, double, int);
+extern uint32 LogLuv24fromXYZ(float*, int);
+extern uint32 LogLuv32fromXYZ(float*, int);
+#endif
+#endif /* LOGLUV_PUBLIC */
+
+/*
+** New stuff going public in 3.6.x.
+*/
+extern  int  TIFFGetTagListCount( TIFF * );
+extern  ttag_t TIFFGetTagListEntry( TIFF *, int tag_index );
+    
+#define        TIFF_ANY        TIFF_NOTYPE     /* for field descriptor searching */
+#define        TIFF_VARIABLE   -1              /* marker for variable length tags */
+#define        TIFF_SPP        -2              /* marker for SamplesPerPixel tags */
+#define        TIFF_VARIABLE2  -3              /* marker for uint32 var-length tags */
+
+#define FIELD_CUSTOM    65    
+
+typedef        struct {
+       ttag_t  field_tag;              /* field's tag */
+       short   field_readcount;        /* read count/TIFF_VARIABLE/TIFF_SPP */
+       short   field_writecount;       /* write count/TIFF_VARIABLE */
+       TIFFDataType field_type;        /* type of associated data */
+        unsigned short field_bit;      /* bit in fieldsset bit vector */
+       unsigned char field_oktochange; /* if true, can change while writing */
+       unsigned char field_passcount;  /* if true, pass dir count on set */
+       char    *field_name;            /* ASCII name */
+} TIFFFieldInfo;
+
+typedef struct _TIFFTagValue {
+    const TIFFFieldInfo  *info;
+    int             count;
+    void           *value;
+} TIFFTagValue;
+
+extern void TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], int);
+extern const TIFFFieldInfo* TIFFFindFieldInfo(TIFF*, ttag_t, TIFFDataType);
+extern const TIFFFieldInfo* TIFFFieldWithTag(TIFF*, ttag_t);
+
+typedef        int (*TIFFVSetMethod)(TIFF*, ttag_t, va_list);
+typedef        int (*TIFFVGetMethod)(TIFF*, ttag_t, va_list);
+typedef        void (*TIFFPrintMethod)(TIFF*, FILE*, long);
+    
+typedef struct {
+    TIFFVSetMethod     vsetfield;      /* tag set routine */
+    TIFFVGetMethod     vgetfield;      /* tag get routine */
+    TIFFPrintMethod    printdir;       /* directory print routine */
+} TIFFTagMethods;
+        
+extern  TIFFTagMethods *TIFFAccessTagMethods( TIFF * );
+extern  void *TIFFGetClientInfo( TIFF *, const char * );
+extern  void TIFFSetClientInfo( TIFF *, void *, const char * );
+    
 #if defined(__cplusplus)
 }
 #endif