--- /dev/null
+/*
+
+Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
+Digital Ltd. LLC
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+* Neither the name of Industrial Light & Magic nor the names of
+its contributors may be used to endorse or promote products derived
+from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+#ifndef INCLUDED_IMF_C_RGBA_FILE_H
+#define INCLUDED_IMF_C_RGBA_FILE_H
+
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Interpreting unsigned shorts as 16-bit floating point numbers
+*/
+
+typedef unsigned short ImfHalf;
+
+void ImfFloatToHalf (float f,
+ ImfHalf *h);
+
+void ImfFloatToHalfArray (int n,
+ const float f[/*n*/],
+ ImfHalf h[/*n*/]);
+
+float ImfHalfToFloat (ImfHalf h);
+
+void ImfHalfToFloatArray (int n,
+ const ImfHalf h[/*n*/],
+ float f[/*n*/]);
+
+/*
+** RGBA pixel; memory layout must be the same as struct Imf::Rgba.
+*/
+
+struct ImfRgba
+{
+ ImfHalf r;
+ ImfHalf g;
+ ImfHalf b;
+ ImfHalf a;
+};
+
+typedef struct ImfRgba ImfRgba;
+
+/*
+** Magic number; this must be the same as Imf::MAGIC
+*/
+
+#define IMF_MAGIC 20000630
+
+/*
+** Version number; this must be the same as Imf::EXR_VERSION
+*/
+
+#define IMF_VERSION_NUMBER 2
+
+/*
+** Line order; values must the the same as in Imf::LineOrder.
+*/
+
+#define IMF_INCREASING_Y 0
+#define IMF_DECREASING_Y 1
+#define IMF_RAMDOM_Y 2
+
+
+/*
+** Compression types; values must be the same as in Imf::Compression.
+*/
+
+#define IMF_NO_COMPRESSION 0
+#define IMF_RLE_COMPRESSION 1
+#define IMF_ZIPS_COMPRESSION 2
+#define IMF_ZIP_COMPRESSION 3
+#define IMF_PIZ_COMPRESSION 4
+#define IMF_PXR24_COMPRESSION 5
+
+
+/*
+** Channels; values must be the same as in Imf::RgbaChannels.
+*/
+
+#define IMF_WRITE_R 0x01
+#define IMF_WRITE_G 0x02
+#define IMF_WRITE_B 0x04
+#define IMF_WRITE_A 0x08
+#define IMF_WRITE_Y 0x10
+#define IMF_WRITE_C 0x20
+#define IMF_WRITE_RGB 0x07
+#define IMF_WRITE_RGBA 0x0f
+#define IMF_WRITE_YC 0x30
+#define IMF_WRITE_YA 0x18
+#define IMF_WRITE_YCA 0x38
+
+
+/*
+** Level modes; values must be the same as in Imf::LevelMode
+*/
+
+#define IMF_ONE_LEVEL 0
+#define IMF_MIPMAP_LEVELS 1
+#define IMF_RIPMAP_LEVELS 2
+
+
+/*
+** Level rounding modes; values must be the same as in Imf::LevelRoundingMode
+*/
+
+#define IMF_ROUND_DOWN 0
+#define IMF_ROUND_UP 1
+
+
+/*
+** RGBA file header
+*/
+
+struct ImfHeader;
+typedef struct ImfHeader ImfHeader;
+
+ImfHeader * ImfNewHeader (void);
+
+void ImfDeleteHeader (ImfHeader *hdr);
+
+ImfHeader * ImfCopyHeader (const ImfHeader *hdr);
+
+void ImfHeaderSetDisplayWindow (ImfHeader *hdr,
+ int xMin, int yMin,
+ int xMax, int yMax);
+
+void ImfHeaderDisplayWindow (const ImfHeader *hdr,
+ int *xMin, int *yMin,
+ int *xMax, int *yMax);
+
+void ImfHeaderSetDataWindow (ImfHeader *hdr,
+ int xMin, int yMin,
+ int xMax, int yMax);
+
+void ImfHeaderDataWindow (const ImfHeader *hdr,
+ int *xMin, int *yMin,
+ int *xMax, int *yMax);
+
+void ImfHeaderSetPixelAspectRatio (ImfHeader *hdr,
+ float pixelAspectRatio);
+
+float ImfHeaderPixelAspectRatio (const ImfHeader *hdr);
+
+void ImfHeaderSetScreenWindowCenter (ImfHeader *hdr,
+ float x, float y);
+
+void ImfHeaderScreenWindowCenter (const ImfHeader *hdr,
+ float *x, float *y);
+
+void ImfHeaderSetScreenWindowWidth (ImfHeader *hdr,
+ float width);
+
+float ImfHeaderScreenWindowWidth (const ImfHeader *hdr);
+
+void ImfHeaderSetLineOrder (ImfHeader *hdr,
+ int lineOrder);
+
+int ImfHeaderLineOrder (const ImfHeader *hdr);
+
+void ImfHeaderSetCompression (ImfHeader *hdr,
+ int compression);
+
+int ImfHeaderCompression (const ImfHeader *hdr);
+
+int ImfHeaderSetIntAttribute (ImfHeader *hdr,
+ const char name[],
+ int value);
+
+int ImfHeaderIntAttribute (const ImfHeader *hdr,
+ const char name[],
+ int *value);
+
+int ImfHeaderSetFloatAttribute (ImfHeader *hdr,
+ const char name[],
+ float value);
+
+int ImfHeaderSetDoubleAttribute (ImfHeader *hdr,
+ const char name[],
+ double value);
+
+int ImfHeaderFloatAttribute (const ImfHeader *hdr,
+ const char name[],
+ float *value);
+
+int ImfHeaderDoubleAttribute (const ImfHeader *hdr,
+ const char name[],
+ double *value);
+
+int ImfHeaderSetStringAttribute (ImfHeader *hdr,
+ const char name[],
+ const char value[]);
+
+int ImfHeaderStringAttribute (const ImfHeader *hdr,
+ const char name[],
+ const char **value);
+
+int ImfHeaderSetBox2iAttribute (ImfHeader *hdr,
+ const char name[],
+ int xMin, int yMin,
+ int xMax, int yMax);
+
+int ImfHeaderBox2iAttribute (const ImfHeader *hdr,
+ const char name[],
+ int *xMin, int *yMin,
+ int *xMax, int *yMax);
+
+int ImfHeaderSetBox2fAttribute (ImfHeader *hdr,
+ const char name[],
+ float xMin, float yMin,
+ float xMax, float yMax);
+
+int ImfHeaderBox2fAttribute (const ImfHeader *hdr,
+ const char name[],
+ float *xMin, float *yMin,
+ float *xMax, float *yMax);
+
+int ImfHeaderSetV2iAttribute (ImfHeader *hdr,
+ const char name[],
+ int x, int y);
+
+int ImfHeaderV2iAttribute (const ImfHeader *hdr,
+ const char name[],
+ int *x, int *y);
+
+int ImfHeaderSetV2fAttribute (ImfHeader *hdr,
+ const char name[],
+ float x, float y);
+
+int ImfHeaderV2fAttribute (const ImfHeader *hdr,
+ const char name[],
+ float *x, float *y);
+
+int ImfHeaderSetV3iAttribute (ImfHeader *hdr,
+ const char name[],
+ int x, int y, int z);
+
+int ImfHeaderV3iAttribute (const ImfHeader *hdr,
+ const char name[],
+ int *x, int *y, int *z);
+
+int ImfHeaderSetV3fAttribute (ImfHeader *hdr,
+ const char name[],
+ float x, float y, float z);
+
+int ImfHeaderV3fAttribute (const ImfHeader *hdr,
+ const char name[],
+ float *x, float *y, float *z);
+
+int ImfHeaderSetM33fAttribute (ImfHeader *hdr,
+ const char name[],
+ const float m[3][3]);
+
+int ImfHeaderM33fAttribute (const ImfHeader *hdr,
+ const char name[],
+ float m[3][3]);
+
+int ImfHeaderSetM44fAttribute (ImfHeader *hdr,
+ const char name[],
+ const float m[4][4]);
+
+int ImfHeaderM44fAttribute (const ImfHeader *hdr,
+ const char name[],
+ float m[4][4]);
+
+/*
+** RGBA output file
+*/
+
+struct ImfOutputFile;
+typedef struct ImfOutputFile ImfOutputFile;
+
+ImfOutputFile * ImfOpenOutputFile (const char name[],
+ const ImfHeader *hdr,
+ int channels);
+
+int ImfCloseOutputFile (ImfOutputFile *out);
+
+int ImfOutputSetFrameBuffer (ImfOutputFile *out,
+ const ImfRgba *base,
+ size_t xStride,
+ size_t yStride);
+
+int ImfOutputWritePixels (ImfOutputFile *out,
+ int numScanLines);
+
+int ImfOutputCurrentScanLine (const ImfOutputFile *out);
+
+const ImfHeader * ImfOutputHeader (const ImfOutputFile *out);
+
+int ImfOutputChannels (const ImfOutputFile *out);
+
+
+/*
+** Tiled RGBA output file
+*/
+
+struct ImfTiledOutputFile;
+typedef struct ImfTiledOutputFile ImfTiledOutputFile;
+
+ImfTiledOutputFile * ImfOpenTiledOutputFile (const char name[],
+ const ImfHeader *hdr,
+ int channels,
+ int xSize, int ySize,
+ int mode, int rmode);
+
+int ImfCloseTiledOutputFile (ImfTiledOutputFile *out);
+
+int ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out,
+ const ImfRgba *base,
+ size_t xStride,
+ size_t yStride);
+
+int ImfTiledOutputWriteTile (ImfTiledOutputFile *out,
+ int dx, int dy,
+ int lx, int ly);
+
+int ImfTiledOutputWriteTiles (ImfTiledOutputFile *out,
+ int dxMin, int dxMax,
+ int dyMin, int dyMax,
+ int lx, int ly);
+
+const ImfHeader * ImfTiledOutputHeader (const ImfTiledOutputFile *out);
+
+int ImfTiledOutputChannels (const ImfTiledOutputFile *out);
+
+int ImfTiledOutputTileXSize (const ImfTiledOutputFile *out);
+
+int ImfTiledOutputTileYSize (const ImfTiledOutputFile *out);
+
+int ImfTiledOutputLevelMode (const ImfTiledOutputFile *out);
+int ImfTiledOutputLevelRoundingMode
+ (const ImfTiledOutputFile *out);
+
+
+/*
+** RGBA input file
+*/
+
+struct ImfInputFile;
+typedef struct ImfInputFile ImfInputFile;
+
+ImfInputFile * ImfOpenInputFile (const char name[]);
+
+int ImfCloseInputFile (ImfInputFile *in);
+
+int ImfInputSetFrameBuffer (ImfInputFile *in,
+ ImfRgba *base,
+ size_t xStride,
+ size_t yStride);
+
+int ImfInputReadPixels (ImfInputFile *in,
+ int scanLine1,
+ int scanLine2);
+
+const ImfHeader * ImfInputHeader (const ImfInputFile *in);
+
+int ImfInputChannels (const ImfInputFile *in);
+
+const char * ImfInputFileName (const ImfInputFile *in);
+
+
+/*
+** Tiled RGBA input file
+*/
+
+struct ImfTiledInputFile;
+typedef struct ImfTiledInputFile ImfTiledInputFile;
+
+ImfTiledInputFile * ImfOpenTiledInputFile (const char name[]);
+
+int ImfCloseTiledInputFile (ImfTiledInputFile *in);
+
+int ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in,
+ ImfRgba *base,
+ size_t xStride,
+ size_t yStride);
+
+int ImfTiledInputReadTile (ImfTiledInputFile *in,
+ int dx, int dy,
+ int lx, int ly);
+
+int ImfTiledInputReadTiles (ImfTiledInputFile *in,
+ int dxMin, int dxMax,
+ int dyMin, int dyMax,
+ int lx, int ly);
+
+const ImfHeader * ImfTiledInputHeader (const ImfTiledInputFile *in);
+
+int ImfTiledInputChannels (const ImfTiledInputFile *in);
+
+const char * ImfTiledInputFileName (const ImfTiledInputFile *in);
+
+int ImfTiledInputTileXSize (const ImfTiledInputFile *in);
+
+int ImfTiledInputTileYSize (const ImfTiledInputFile *in);
+
+int ImfTiledInputLevelMode (const ImfTiledInputFile *in);
+
+int ImfTiledInputLevelRoundingMode
+ (const ImfTiledInputFile *in);
+
+/*
+** Lookup tables
+*/
+
+struct ImfLut;
+typedef struct ImfLut ImfLut;
+
+ImfLut * ImfNewRound12logLut (int channels);
+
+ImfLut * ImfNewRoundNBitLut (unsigned int n, int channels);
+
+void ImfDeleteLut (ImfLut *lut);
+
+void ImfApplyLut (ImfLut *lut,
+ ImfRgba *data,
+ int nData,
+ int stride);
+/*
+** Most recent error message
+*/
+
+const char * ImfErrorMessage (void);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif