468 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			468 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 | 
						|
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
 |