Merged changes in the trunk up to revision 46309.
[blender.git] / source / blender / imbuf / intern / cineon / logImageCore.h
1 /*
2  *       Cineon image file format library definitions.
3  *       Cineon and DPX common structures.
4  *
5  *       This header file contains private details.
6  *       User code should generally use cineonlib.h and dpxlib.h only.
7  *       Hmm. I thought the two formats would have more in common!
8  *
9  *       Copyright 1999,2000,2001 David Hodson <hodsond@acm.org>
10  *
11  *       This program is free software; you can redistribute it and/or modify it
12  *       under the terms of the GNU General Public License as published by the Free
13  *       Software Foundation; either version 2 of the License, or (at your option)
14  *       any later version.
15  *
16  *       This program is distributed in the hope that it will be useful, but
17  *       WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18  *       or FITNESS FOR A PARTICULAR PURPOSE.    See the GNU General Public License
19  *       for more details.
20  *
21  *       You should have received a copy of the GNU General Public License
22  *       along with this program; if not, write to the Free Software
23  *       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24  *
25  */
26
27 #ifndef __LOGIMAGECORE_H__
28 #define __LOGIMAGECORE_H__
29
30 /** \file blender/imbuf/intern/cineon/logImageCore.h
31  *  \ingroup imbcineon
32  */
33
34 #include <stdio.h>
35 #include "logImageLib.h"
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 #include "BLO_sys_types.h" // for intptr_t support
42
43 #ifdef _MSC_VER
44 #undef ntohl
45 #undef htonl
46 #endif
47
48 typedef int (GetRowFn)(LogImageFile* logImage, unsigned short* row, int lineNum);
49 typedef int (SetRowFn)(LogImageFile* logImage, const unsigned short* row, int lineNum);
50 typedef void (CloseFn)(LogImageFile* logImage);
51
52 struct _Log_Image_File_t_
53 {
54         /* specified in header */
55         int width;
56         int height;
57         int depth;
58         int bitsPerPixel;
59         int imageOffset;
60
61         /* file buffer, measured in longwords (4 byte) */
62         int lineBufferLength;
63         unsigned int* lineBuffer;
64
65         /* pixel buffer, holds 10 bit pixel values */
66         unsigned short* pixelBuffer;
67         int pixelBufferUsed;
68
69         /* io stuff */
70         FILE* file;
71         int reading;
72         int fileYPos;
73
74         /* byte conversion stuff */
75         LogImageByteConversionParameters params;
76 #if 0
77         float gamma;
78         int blackPoint;
79         int whitePoint;
80 #endif
81         unsigned char lut10[1024];
82         unsigned short lut8[256];
83
84         unsigned short lut10_16[1024];
85         unsigned short lut16_16[65536];
86
87         /* pixel access functions */
88         GetRowFn* getRow;
89         SetRowFn* setRow;
90         CloseFn* close;
91         
92         unsigned char *membuffer;
93         uintptr_t membuffersize;
94         unsigned char *memcursor;
95 };
96
97 void setupLut(LogImageFile*);
98 void setupLut16(LogImageFile*);
99
100 int pixelsToLongs(int numPixels);
101
102 /* typedefs used in original docs */
103 /* note size assumptions! */
104
105 typedef unsigned int U32;
106 typedef unsigned short U16;
107 typedef unsigned char U8;
108 typedef signed int S32;
109 typedef float R32;
110 typedef char ASCII;
111
112 R32 htonf(R32 f);
113 R32 ntohf(R32 f);
114 R32 undefined(void);
115 U16 reverseU16(U16 value);
116 U32 reverseU32(U32 value);
117 R32 reverseR32(R32 value);
118
119 #ifdef __cplusplus
120 }
121 #endif
122
123 #endif /* __LOGIMAGECORE_H__ */