// // SPDX-License-Identifier: BSD-3-Clause // Copyright (c) Contributors to the OpenEXR Project. // #ifndef INCLUDED_IMF_C_RGBA_FILE_H #define INCLUDED_IMF_C_RGBA_FILE_H #include "ImfExport.h" #include #ifdef __cplusplus extern "C" { #endif /* ** Interpreting unsigned shorts as 16-bit floating point numbers */ typedef unsigned short ImfHalf; IMF_EXPORT void ImfFloatToHalf (float f, ImfHalf *h); IMF_EXPORT void ImfFloatToHalfArray (int n, const float f[/*n*/], ImfHalf h[/*n*/]); IMF_EXPORT float ImfHalfToFloat (ImfHalf h); IMF_EXPORT 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_RANDOM_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 #define IMF_DWAA_COMPRESSION 8 #define IMF_DWAB_COMPRESSION 9 /* ** 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; IMF_EXPORT ImfHeader * ImfNewHeader (void); IMF_EXPORT void ImfDeleteHeader (ImfHeader *hdr); IMF_EXPORT ImfHeader * ImfCopyHeader (const ImfHeader *hdr); IMF_EXPORT void ImfHeaderSetDisplayWindow (ImfHeader *hdr, int xMin, int yMin, int xMax, int yMax); IMF_EXPORT void ImfHeaderDisplayWindow (const ImfHeader *hdr, int *xMin, int *yMin, int *xMax, int *yMax); IMF_EXPORT void ImfHeaderSetDataWindow (ImfHeader *hdr, int xMin, int yMin, int xMax, int yMax); IMF_EXPORT void ImfHeaderDataWindow (const ImfHeader *hdr, int *xMin, int *yMin, int *xMax, int *yMax); IMF_EXPORT void ImfHeaderSetPixelAspectRatio (ImfHeader *hdr, float pixelAspectRatio); IMF_EXPORT float ImfHeaderPixelAspectRatio (const ImfHeader *hdr); IMF_EXPORT void ImfHeaderSetScreenWindowCenter (ImfHeader *hdr, float x, float y); IMF_EXPORT void ImfHeaderScreenWindowCenter (const ImfHeader *hdr, float *x, float *y); IMF_EXPORT void ImfHeaderSetScreenWindowWidth (ImfHeader *hdr, float width); IMF_EXPORT float ImfHeaderScreenWindowWidth (const ImfHeader *hdr); IMF_EXPORT void ImfHeaderSetLineOrder (ImfHeader *hdr, int lineOrder); IMF_EXPORT int ImfHeaderLineOrder (const ImfHeader *hdr); IMF_EXPORT void ImfHeaderSetCompression (ImfHeader *hdr, int compression); IMF_EXPORT int ImfHeaderCompression (const ImfHeader *hdr); IMF_EXPORT int ImfHeaderSetIntAttribute (ImfHeader *hdr, const char name[], int value); IMF_EXPORT int ImfHeaderIntAttribute (const ImfHeader *hdr, const char name[], int *value); IMF_EXPORT int ImfHeaderSetFloatAttribute (ImfHeader *hdr, const char name[], float value); IMF_EXPORT int ImfHeaderSetDoubleAttribute (ImfHeader *hdr, const char name[], double value); IMF_EXPORT int ImfHeaderFloatAttribute (const ImfHeader *hdr, const char name[], float *value); IMF_EXPORT int ImfHeaderDoubleAttribute (const ImfHeader *hdr, const char name[], double *value); IMF_EXPORT int ImfHeaderSetStringAttribute (ImfHeader *hdr, const char name[], const char value[]); IMF_EXPORT int ImfHeaderStringAttribute (const ImfHeader *hdr, const char name[], const char **value); IMF_EXPORT int ImfHeaderSetBox2iAttribute (ImfHeader *hdr, const char name[], int xMin, int yMin, int xMax, int yMax); IMF_EXPORT int ImfHeaderBox2iAttribute (const ImfHeader *hdr, const char name[], int *xMin, int *yMin, int *xMax, int *yMax); IMF_EXPORT int ImfHeaderSetBox2fAttribute (ImfHeader *hdr, const char name[], float xMin, float yMin, float xMax, float yMax); IMF_EXPORT int ImfHeaderBox2fAttribute (const ImfHeader *hdr, const char name[], float *xMin, float *yMin, float *xMax, float *yMax); IMF_EXPORT int ImfHeaderSetV2iAttribute (ImfHeader *hdr, const char name[], int x, int y); IMF_EXPORT int ImfHeaderV2iAttribute (const ImfHeader *hdr, const char name[], int *x, int *y); IMF_EXPORT int ImfHeaderSetV2fAttribute (ImfHeader *hdr, const char name[], float x, float y); IMF_EXPORT int ImfHeaderV2fAttribute (const ImfHeader *hdr, const char name[], float *x, float *y); IMF_EXPORT int ImfHeaderSetV3iAttribute (ImfHeader *hdr, const char name[], int x, int y, int z); IMF_EXPORT int ImfHeaderV3iAttribute (const ImfHeader *hdr, const char name[], int *x, int *y, int *z); IMF_EXPORT int ImfHeaderSetV3fAttribute (ImfHeader *hdr, const char name[], float x, float y, float z); IMF_EXPORT int ImfHeaderV3fAttribute (const ImfHeader *hdr, const char name[], float *x, float *y, float *z); IMF_EXPORT int ImfHeaderSetM33fAttribute (ImfHeader *hdr, const char name[], const float m[3][3]); IMF_EXPORT int ImfHeaderM33fAttribute (const ImfHeader *hdr, const char name[], float m[3][3]); IMF_EXPORT int ImfHeaderSetM44fAttribute (ImfHeader *hdr, const char name[], const float m[4][4]); IMF_EXPORT int ImfHeaderM44fAttribute (const ImfHeader *hdr, const char name[], float m[4][4]); /* ** RGBA output file */ struct ImfOutputFile; typedef struct ImfOutputFile ImfOutputFile; IMF_EXPORT ImfOutputFile * ImfOpenOutputFile (const char name[], const ImfHeader *hdr, int channels); IMF_EXPORT int ImfCloseOutputFile (ImfOutputFile *out); IMF_EXPORT int ImfOutputSetFrameBuffer (ImfOutputFile *out, const ImfRgba *base, size_t xStride, size_t yStride); IMF_EXPORT int ImfOutputWritePixels (ImfOutputFile *out, int numScanLines); IMF_EXPORT int ImfOutputCurrentScanLine (const ImfOutputFile *out); IMF_EXPORT const ImfHeader * ImfOutputHeader (const ImfOutputFile *out); IMF_EXPORT int ImfOutputChannels (const ImfOutputFile *out); /* ** Tiled RGBA output file */ struct ImfTiledOutputFile; typedef struct ImfTiledOutputFile ImfTiledOutputFile; IMF_EXPORT ImfTiledOutputFile * ImfOpenTiledOutputFile (const char name[], const ImfHeader *hdr, int channels, int xSize, int ySize, int mode, int rmode); IMF_EXPORT int ImfCloseTiledOutputFile (ImfTiledOutputFile *out); IMF_EXPORT int ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out, const ImfRgba *base, size_t xStride, size_t yStride); IMF_EXPORT int ImfTiledOutputWriteTile (ImfTiledOutputFile *out, int dx, int dy, int lx, int ly); IMF_EXPORT int ImfTiledOutputWriteTiles (ImfTiledOutputFile *out, int dxMin, int dxMax, int dyMin, int dyMax, int lx, int ly); IMF_EXPORT const ImfHeader * ImfTiledOutputHeader (const ImfTiledOutputFile *out); IMF_EXPORT int ImfTiledOutputChannels (const ImfTiledOutputFile *out); IMF_EXPORT int ImfTiledOutputTileXSize (const ImfTiledOutputFile *out); IMF_EXPORT int ImfTiledOutputTileYSize (const ImfTiledOutputFile *out); IMF_EXPORT int ImfTiledOutputLevelMode (const ImfTiledOutputFile *out); IMF_EXPORT int ImfTiledOutputLevelRoundingMode (const ImfTiledOutputFile *out); /* ** RGBA input file */ struct ImfInputFile; typedef struct ImfInputFile ImfInputFile; IMF_EXPORT ImfInputFile * ImfOpenInputFile (const char name[]); IMF_EXPORT int ImfCloseInputFile (ImfInputFile *in); IMF_EXPORT int ImfInputSetFrameBuffer (ImfInputFile *in, ImfRgba *base, size_t xStride, size_t yStride); IMF_EXPORT int ImfInputReadPixels (ImfInputFile *in, int scanLine1, int scanLine2); IMF_EXPORT const ImfHeader * ImfInputHeader (const ImfInputFile *in); IMF_EXPORT int ImfInputChannels (const ImfInputFile *in); IMF_EXPORT const char * ImfInputFileName (const ImfInputFile *in); /* ** Tiled RGBA input file */ struct ImfTiledInputFile; typedef struct ImfTiledInputFile ImfTiledInputFile; IMF_EXPORT ImfTiledInputFile * ImfOpenTiledInputFile (const char name[]); IMF_EXPORT int ImfCloseTiledInputFile (ImfTiledInputFile *in); IMF_EXPORT int ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in, ImfRgba *base, size_t xStride, size_t yStride); IMF_EXPORT int ImfTiledInputReadTile (ImfTiledInputFile *in, int dx, int dy, int lx, int ly); IMF_EXPORT int ImfTiledInputReadTiles (ImfTiledInputFile *in, int dxMin, int dxMax, int dyMin, int dyMax, int lx, int ly); IMF_EXPORT const ImfHeader * ImfTiledInputHeader (const ImfTiledInputFile *in); IMF_EXPORT int ImfTiledInputChannels (const ImfTiledInputFile *in); IMF_EXPORT const char * ImfTiledInputFileName (const ImfTiledInputFile *in); IMF_EXPORT int ImfTiledInputTileXSize (const ImfTiledInputFile *in); IMF_EXPORT int ImfTiledInputTileYSize (const ImfTiledInputFile *in); IMF_EXPORT int ImfTiledInputLevelMode (const ImfTiledInputFile *in); IMF_EXPORT int ImfTiledInputLevelRoundingMode (const ImfTiledInputFile *in); /* ** Lookup tables */ struct ImfLut; typedef struct ImfLut ImfLut; IMF_EXPORT ImfLut * ImfNewRound12logLut (int channels); IMF_EXPORT ImfLut * ImfNewRoundNBitLut (unsigned int n, int channels); IMF_EXPORT void ImfDeleteLut (ImfLut *lut); IMF_EXPORT void ImfApplyLut (ImfLut *lut, ImfRgba *data, int nData, int stride); /* ** Most recent error message */ IMF_EXPORT const char * ImfErrorMessage (void); #ifdef __cplusplus } /* extern "C" */ #endif #endif