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