Home | History | Annotate | Download | only in IlmImf
      1 /*
      2 
      3 Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
      4 Digital Ltd. LLC
      5 
      6 All rights reserved.
      7 
      8 Redistribution and use in source and binary forms, with or without
      9 modification, are permitted provided that the following conditions are
     10 met:
     11 *       Redistributions of source code must retain the above copyright
     12 notice, this list of conditions and the following disclaimer.
     13 *       Redistributions in binary form must reproduce the above
     14 copyright notice, this list of conditions and the following disclaimer
     15 in the documentation and/or other materials provided with the
     16 distribution.
     17 *       Neither the name of Industrial Light & Magic nor the names of
     18 its contributors may be used to endorse or promote products derived
     19 from this software without specific prior written permission.
     20 
     21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     22 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     23 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     24 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     25 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     26 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     27 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     28 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     29 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     30 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     31 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32 
     33 */
     34 
     35 #ifndef INCLUDED_IMF_C_RGBA_FILE_H
     36 #define INCLUDED_IMF_C_RGBA_FILE_H
     37 
     38 
     39 #include <stdlib.h>
     40 
     41 #ifdef __cplusplus
     42 extern "C" {
     43 #endif
     44 
     45 /*
     46 ** Interpreting unsigned shorts as 16-bit floating point numbers
     47 */
     48 
     49 typedef unsigned short ImfHalf;
     50 
     51 void	ImfFloatToHalf (float f,
     52             ImfHalf *h);
     53 
     54 void	ImfFloatToHalfArray (int n,
     55                 const float f[/*n*/],
     56                 ImfHalf h[/*n*/]);
     57 
     58 float	ImfHalfToFloat (ImfHalf h);
     59 
     60 void	ImfHalfToFloatArray (int n,
     61                 const ImfHalf h[/*n*/],
     62                 float f[/*n*/]);
     63 
     64 /*
     65 ** RGBA pixel; memory layout must be the same as struct Imf::Rgba.
     66 */
     67 
     68 struct ImfRgba
     69 {
     70     ImfHalf	r;
     71     ImfHalf	g;
     72     ImfHalf	b;
     73     ImfHalf	a;
     74 };
     75 
     76 typedef struct ImfRgba ImfRgba;
     77 
     78 /*
     79 ** Magic number; this must be the same as Imf::MAGIC
     80 */
     81 
     82 #define IMF_MAGIC               20000630
     83 
     84 /*
     85 ** Version number; this must be the same as Imf::EXR_VERSION
     86 */
     87 
     88 #define IMF_VERSION_NUMBER      2
     89 
     90 /*
     91 ** Line order; values must the the same as in Imf::LineOrder.
     92 */
     93 
     94 #define IMF_INCREASING_Y	0
     95 #define IMF_DECREASING_Y	1
     96 #define IMF_RAMDOM_Y		2
     97 
     98 
     99 /*
    100 ** Compression types; values must be the same as in Imf::Compression.
    101 */
    102 
    103 #define IMF_NO_COMPRESSION	0
    104 #define IMF_RLE_COMPRESSION	1
    105 #define IMF_ZIPS_COMPRESSION	2
    106 #define IMF_ZIP_COMPRESSION	3
    107 #define IMF_PIZ_COMPRESSION	4
    108 #define IMF_PXR24_COMPRESSION	5
    109 #define IMF_B44_COMPRESSION	6
    110 #define IMF_B44A_COMPRESSION	7
    111 
    112 
    113 /*
    114 ** Channels; values must be the same as in Imf::RgbaChannels.
    115 */
    116 
    117 #define IMF_WRITE_R		0x01
    118 #define IMF_WRITE_G		0x02
    119 #define IMF_WRITE_B		0x04
    120 #define IMF_WRITE_A		0x08
    121 #define IMF_WRITE_Y		0x10
    122 #define IMF_WRITE_C		0x20
    123 #define IMF_WRITE_RGB		0x07
    124 #define IMF_WRITE_RGBA		0x0f
    125 #define IMF_WRITE_YC		0x30
    126 #define IMF_WRITE_YA		0x18
    127 #define IMF_WRITE_YCA		0x38
    128 
    129 
    130 /*
    131 ** Level modes; values must be the same as in Imf::LevelMode
    132 */
    133 
    134 #define IMF_ONE_LEVEL		0
    135 #define IMF_MIPMAP_LEVELS	1
    136 #define IMF_RIPMAP_LEVELS	2
    137 
    138 
    139 /*
    140 ** Level rounding modes; values must be the same as in Imf::LevelRoundingMode
    141 */
    142 
    143 #define IMF_ROUND_DOWN		0
    144 #define IMF_ROUND_UP		1
    145 
    146 
    147 /*
    148 ** RGBA file header
    149 */
    150 
    151 struct ImfHeader;
    152 typedef struct ImfHeader ImfHeader;
    153 
    154 ImfHeader *	ImfNewHeader (void);
    155 
    156 void		ImfDeleteHeader (ImfHeader *hdr);
    157 
    158 ImfHeader *	ImfCopyHeader (const ImfHeader *hdr);
    159 
    160 void		ImfHeaderSetDisplayWindow (ImfHeader *hdr,
    161                        int xMin, int yMin,
    162                        int xMax, int yMax);
    163 
    164 void		ImfHeaderDisplayWindow (const ImfHeader *hdr,
    165                     int *xMin, int *yMin,
    166                     int *xMax, int *yMax);
    167 
    168 void		ImfHeaderSetDataWindow (ImfHeader *hdr,
    169                     int xMin, int yMin,
    170                     int xMax, int yMax);
    171 
    172 void		ImfHeaderDataWindow (const ImfHeader *hdr,
    173                      int *xMin, int *yMin,
    174                      int *xMax, int *yMax);
    175 
    176 void		ImfHeaderSetPixelAspectRatio (ImfHeader *hdr,
    177                           float pixelAspectRatio);
    178 
    179 float		ImfHeaderPixelAspectRatio (const ImfHeader *hdr);
    180 
    181 void		ImfHeaderSetScreenWindowCenter (ImfHeader *hdr,
    182                         float x, float y);
    183 
    184 void		ImfHeaderScreenWindowCenter (const ImfHeader *hdr,
    185                          float *x, float *y);
    186 
    187 void		ImfHeaderSetScreenWindowWidth (ImfHeader *hdr,
    188                            float width);
    189 
    190 float		ImfHeaderScreenWindowWidth (const ImfHeader *hdr);
    191 
    192 void		ImfHeaderSetLineOrder (ImfHeader *hdr,
    193                        int lineOrder);
    194 
    195 int		ImfHeaderLineOrder (const ImfHeader *hdr);
    196 
    197 void		ImfHeaderSetCompression (ImfHeader *hdr,
    198                      int compression);
    199 
    200 int		ImfHeaderCompression (const ImfHeader *hdr);
    201 
    202 int		ImfHeaderSetIntAttribute (ImfHeader *hdr,
    203                       const char name[],
    204                       int value);
    205 
    206 int		ImfHeaderIntAttribute (const ImfHeader *hdr,
    207                        const char name[],
    208                        int *value);
    209 
    210 int		ImfHeaderSetFloatAttribute (ImfHeader *hdr,
    211                         const char name[],
    212                         float value);
    213 
    214 int		ImfHeaderSetDoubleAttribute (ImfHeader *hdr,
    215                          const char name[],
    216                          double value);
    217 
    218 int		ImfHeaderFloatAttribute (const ImfHeader *hdr,
    219                          const char name[],
    220                          float *value);
    221 
    222 int		ImfHeaderDoubleAttribute (const ImfHeader *hdr,
    223                           const char name[],
    224                           double *value);
    225 
    226 int		ImfHeaderSetStringAttribute (ImfHeader *hdr,
    227                          const char name[],
    228                          const char value[]);
    229 
    230 int		ImfHeaderStringAttribute (const ImfHeader *hdr,
    231                          const char name[],
    232                       const char **value);
    233 
    234 int		ImfHeaderSetBox2iAttribute (ImfHeader *hdr,
    235                         const char name[],
    236                         int xMin, int yMin,
    237                         int xMax, int yMax);
    238 
    239 int		ImfHeaderBox2iAttribute (const ImfHeader *hdr,
    240                      const char name[],
    241                      int *xMin, int *yMin,
    242                      int *xMax, int *yMax);
    243 
    244 int		ImfHeaderSetBox2fAttribute (ImfHeader *hdr,
    245                         const char name[],
    246                         float xMin, float yMin,
    247                         float xMax, float yMax);
    248 
    249 int		ImfHeaderBox2fAttribute (const ImfHeader *hdr,
    250                      const char name[],
    251                      float *xMin, float *yMin,
    252                      float *xMax, float *yMax);
    253 
    254 int		ImfHeaderSetV2iAttribute (ImfHeader *hdr,
    255                          const char name[],
    256                          int x, int y);
    257 
    258 int		ImfHeaderV2iAttribute (const ImfHeader *hdr,
    259                        const char name[],
    260                        int *x, int *y);
    261 
    262 int		ImfHeaderSetV2fAttribute (ImfHeader *hdr,
    263                           const char name[],
    264                           float x, float y);
    265 
    266 int		ImfHeaderV2fAttribute (const ImfHeader *hdr,
    267                        const char name[],
    268                        float *x, float *y);
    269 
    270 int		ImfHeaderSetV3iAttribute (ImfHeader *hdr,
    271                           const char name[],
    272                           int x, int y, int z);
    273 
    274 int		ImfHeaderV3iAttribute (const ImfHeader *hdr,
    275                        const char name[],
    276                        int *x, int *y, int *z);
    277 
    278 int		ImfHeaderSetV3fAttribute (ImfHeader *hdr,
    279                           const char name[],
    280                           float x, float y, float z);
    281 
    282 int		ImfHeaderV3fAttribute (const ImfHeader *hdr,
    283                        const char name[],
    284                        float *x, float *y, float *z);
    285 
    286 int		ImfHeaderSetM33fAttribute (ImfHeader *hdr,
    287                        const char name[],
    288                        const float m[3][3]);
    289 
    290 int		ImfHeaderM33fAttribute (const ImfHeader *hdr,
    291                     const char name[],
    292                     float m[3][3]);
    293 
    294 int		ImfHeaderSetM44fAttribute (ImfHeader *hdr,
    295                        const char name[],
    296                        const float m[4][4]);
    297 
    298 int		ImfHeaderM44fAttribute (const ImfHeader *hdr,
    299                     const char name[],
    300                     float m[4][4]);
    301 
    302 /*
    303 ** RGBA output file
    304 */
    305 
    306 struct ImfOutputFile;
    307 typedef struct ImfOutputFile ImfOutputFile;
    308 
    309 ImfOutputFile *	ImfOpenOutputFile (const char name[],
    310                    const ImfHeader *hdr,
    311                    int channels);
    312 
    313 int			ImfCloseOutputFile (ImfOutputFile *out);
    314 
    315 int			ImfOutputSetFrameBuffer (ImfOutputFile *out,
    316                          const ImfRgba *base,
    317                          size_t xStride,
    318                          size_t yStride);
    319 
    320 int			ImfOutputWritePixels (ImfOutputFile *out,
    321                           int numScanLines);
    322 
    323 int			ImfOutputCurrentScanLine (const ImfOutputFile *out);
    324 
    325 const ImfHeader *	ImfOutputHeader (const ImfOutputFile *out);
    326 
    327 int			ImfOutputChannels (const ImfOutputFile *out);
    328 
    329 
    330 /*
    331 ** Tiled RGBA output file
    332 */
    333 
    334 struct ImfTiledOutputFile;
    335 typedef struct ImfTiledOutputFile ImfTiledOutputFile;
    336 
    337 ImfTiledOutputFile *	ImfOpenTiledOutputFile (const char name[],
    338                             const ImfHeader *hdr,
    339                         int channels,
    340                         int xSize, int ySize,
    341                         int mode, int rmode);
    342 
    343 int		ImfCloseTiledOutputFile (ImfTiledOutputFile *out);
    344 
    345 int		ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out,
    346                           const ImfRgba *base,
    347                           size_t xStride,
    348                           size_t yStride);
    349 
    350 int		ImfTiledOutputWriteTile (ImfTiledOutputFile *out,
    351                      int dx, int dy,
    352                      int lx, int ly);
    353 
    354 int             ImfTiledOutputWriteTiles (ImfTiledOutputFile *out,
    355                                           int dxMin, int dxMax,
    356                                           int dyMin, int dyMax,
    357                                           int lx, int ly);
    358 
    359 const ImfHeader *	ImfTiledOutputHeader (const ImfTiledOutputFile *out);
    360 
    361 int		ImfTiledOutputChannels (const ImfTiledOutputFile *out);
    362 
    363 int		ImfTiledOutputTileXSize (const ImfTiledOutputFile *out);
    364 
    365 int		ImfTiledOutputTileYSize (const ImfTiledOutputFile *out);
    366 
    367 int		ImfTiledOutputLevelMode (const ImfTiledOutputFile *out);
    368 int	       	ImfTiledOutputLevelRoundingMode
    369                         (const ImfTiledOutputFile *out);
    370 
    371 
    372 /*
    373 ** RGBA input file
    374 */
    375 
    376 struct ImfInputFile;
    377 typedef struct ImfInputFile ImfInputFile;
    378 
    379 ImfInputFile *		ImfOpenInputFile (const char name[]);
    380 
    381 int			ImfCloseInputFile (ImfInputFile *in);
    382 
    383 int			ImfInputSetFrameBuffer (ImfInputFile *in,
    384                         ImfRgba *base,
    385                         size_t xStride,
    386                         size_t yStride);
    387 
    388 int			ImfInputReadPixels (ImfInputFile *in,
    389                         int scanLine1,
    390                         int scanLine2);
    391 
    392 const ImfHeader *	ImfInputHeader (const ImfInputFile *in);
    393 
    394 int			ImfInputChannels (const ImfInputFile *in);
    395 
    396 const char *            ImfInputFileName (const ImfInputFile *in);
    397 
    398 
    399 /*
    400 ** Tiled RGBA input file
    401 */
    402 
    403 struct ImfTiledInputFile;
    404 typedef struct ImfTiledInputFile ImfTiledInputFile;
    405 
    406 ImfTiledInputFile *	ImfOpenTiledInputFile (const char name[]);
    407 
    408 int		ImfCloseTiledInputFile (ImfTiledInputFile *in);
    409 
    410 int		ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in,
    411                          ImfRgba *base,
    412                          size_t xStride,
    413                          size_t yStride);
    414 
    415 int		ImfTiledInputReadTile (ImfTiledInputFile *in,
    416                        int dx, int dy,
    417                        int lx, int ly);
    418 
    419 int		ImfTiledInputReadTiles (ImfTiledInputFile *in,
    420                                         int dxMin, int dxMax,
    421                                         int dyMin, int dyMax,
    422                                         int lx, int ly);
    423 
    424 const ImfHeader *	ImfTiledInputHeader (const ImfTiledInputFile *in);
    425 
    426 int		ImfTiledInputChannels (const ImfTiledInputFile *in);
    427 
    428 const char *		ImfTiledInputFileName (const ImfTiledInputFile *in);
    429 
    430 int		ImfTiledInputTileXSize (const ImfTiledInputFile *in);
    431 
    432 int		ImfTiledInputTileYSize (const ImfTiledInputFile *in);
    433 
    434 int		ImfTiledInputLevelMode (const ImfTiledInputFile *in);
    435 
    436 int	       	ImfTiledInputLevelRoundingMode
    437                            (const ImfTiledInputFile *in);
    438 
    439 /*
    440 ** Lookup tables
    441 */
    442 
    443 struct ImfLut;
    444 typedef struct ImfLut ImfLut;
    445 
    446 ImfLut *		ImfNewRound12logLut (int channels);
    447 
    448 ImfLut *		ImfNewRoundNBitLut (unsigned int n, int channels);
    449 
    450 void			ImfDeleteLut (ImfLut *lut);
    451 
    452 void			ImfApplyLut (ImfLut *lut,
    453                      ImfRgba *data,
    454                      int nData,
    455                      int stride);
    456 /*
    457 ** Most recent error message
    458 */
    459 
    460 const char *		ImfErrorMessage (void);
    461 
    462 
    463 #ifdef __cplusplus
    464 } /* extern "C" */
    465 #endif
    466 
    467 #endif
    468