/3rdparty/openexr/IlmImf/ImfCRgbaFile.h
C Header | 467 lines | 254 code | 132 blank | 81 comment | 0 complexity | 3677c69affcad045a91fd51e285b43b2 MD5 | raw file
- /*
- 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
- #define IMF_B44_COMPRESSION 6
- #define IMF_B44A_COMPRESSION 7
- /*
- ** 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