Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/3rdparty/openexr/IlmImf/ImfCRgbaFile.h
16337 views
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
469