/src/freeimage-svn/FreeImage/trunk/Source/LibRawLite/internal/defines.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | Copyright 2008-2021 LibRaw LLC (info@libraw.org) |
3 | | |
4 | | LibRaw is free software; you can redistribute it and/or modify |
5 | | it under the terms of the one of two licenses as you choose: |
6 | | |
7 | | 1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1 |
8 | | (See file LICENSE.LGPL provided in LibRaw distribution archive for details). |
9 | | |
10 | | 2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 |
11 | | (See file LICENSE.CDDL provided in LibRaw distribution archive for details). |
12 | | |
13 | | This file is generated from Dave Coffin's dcraw.c |
14 | | dcraw.c -- Dave Coffin's raw photo decoder |
15 | | Copyright 1997-2010 by Dave Coffin, dcoffin a cybercom o net |
16 | | |
17 | | Look into dcraw homepage (probably http://cybercom.net/~dcoffin/dcraw/) |
18 | | for more information |
19 | | */ |
20 | | |
21 | | #ifndef LIBRAW_INT_DEFINES_H |
22 | | #define LIBRAW_INT_DEFINES_H |
23 | | #ifndef USE_JPEG |
24 | | #define NO_JPEG |
25 | | #endif |
26 | | #ifndef USE_JASPER |
27 | | #define NO_JASPER |
28 | | #endif |
29 | 0 | #define DCRAW_VERSION "9.26" |
30 | | |
31 | | #ifndef _GNU_SOURCE |
32 | | #define _GNU_SOURCE |
33 | | #endif |
34 | | #define _USE_MATH_DEFINES |
35 | | #include <ctype.h> |
36 | | #include <errno.h> |
37 | | #include <fcntl.h> |
38 | | #include <float.h> |
39 | | #include <limits.h> |
40 | | #include <math.h> |
41 | | #include <setjmp.h> |
42 | | #include <stdio.h> |
43 | | #include <stdlib.h> |
44 | | #include <string.h> |
45 | | #include <time.h> |
46 | | #include <sys/types.h> |
47 | | #ifdef __CYGWIN__ |
48 | | #include <io.h> |
49 | | #endif |
50 | | #if defined LIBRAW_WIN32_CALLS |
51 | | #include <sys/utime.h> |
52 | | #ifndef LIBRAW_NO_WINSOCK2 |
53 | | #include <winsock2.h> |
54 | | #pragma comment(lib, "ws2_32.lib") |
55 | | #endif |
56 | | #define snprintf _snprintf |
57 | | #define strcasecmp stricmp |
58 | | #define strncasecmp strnicmp |
59 | | #else |
60 | | #include <unistd.h> |
61 | | #include <utime.h> |
62 | | #include <netinet/in.h> |
63 | | #include <stdint.h> |
64 | | typedef int64_t INT64; |
65 | | typedef uint64_t UINT64; |
66 | | #endif |
67 | | |
68 | | #ifdef NODEPS |
69 | | #define NO_JASPER |
70 | | #define NO_JPEG |
71 | | #define NO_LCMS |
72 | | #endif |
73 | | #ifndef NO_JASPER |
74 | | #include <jasper/jasper.h> /* Decode Red camera movies */ |
75 | | #endif |
76 | | #ifndef NO_JPEG |
77 | | #include <jpeglib.h> /* Decode compressed Kodak DC120 photos */ |
78 | | #endif /* and Adobe Lossy DNGs */ |
79 | | #ifndef NO_LCMS |
80 | | #ifdef USE_LCMS |
81 | | #include <lcms.h> /* Support color profiles */ |
82 | | #else |
83 | | #include <lcms2.h> /* Support color profiles */ |
84 | | #endif |
85 | | #endif |
86 | | #ifdef LOCALEDIR |
87 | | #include <libintl.h> |
88 | | #define _(String) gettext(String) |
89 | | #else |
90 | | #define _(String) (String) |
91 | | #endif |
92 | | |
93 | | #ifdef LJPEG_DECODE |
94 | | #error Please compile dcraw.c by itself. |
95 | | #error Do not link it with ljpeg_decode. |
96 | | #endif |
97 | | |
98 | | #ifndef LONG_BIT |
99 | | #define LONG_BIT (8 * sizeof(long)) |
100 | | #endif |
101 | 33.5M | #define FORC(cnt) for (c = 0; c < cnt; c++) |
102 | 309k | #define FORC3 FORC(3) |
103 | 6.25M | #define FORC4 FORC(4) |
104 | 2.18M | #define FORCC for (c = 0; c < colors && c < 4; c++) |
105 | | |
106 | 75.5k | #define SQR(x) ((x) * (x)) |
107 | 2.98k | #define ABS(x) (((int)(x) ^ ((int)(x) >> 31)) - ((int)(x) >> 31)) |
108 | 112k | #define MIN(a, b) ((a) < (b) ? (a) : (b)) |
109 | 975k | #define MAX(a, b) ((a) > (b) ? (a) : (b)) |
110 | 241k | #define LIM(x, min, max) MAX(min, MIN(x, max)) |
111 | 0 | #define ULIM(x, y, z) ((y) < (z) ? LIM(x, y, z) : LIM(x, z, y)) |
112 | 0 | #define CLIP(x) LIM((int)(x), 0, 65535) |
113 | 0 | #define CLIP15(x) LIM((int)(x), 0, 32767) |
114 | | #define SWAP(a, b) \ |
115 | 279 | { \ |
116 | 279 | a = a + b; \ |
117 | 279 | b = a - b; \ |
118 | 279 | a = a - b; \ |
119 | 279 | } |
120 | | |
121 | | #define my_swap(type, i, j) \ |
122 | | { \ |
123 | | type t = i; \ |
124 | | i = j; \ |
125 | | j = t; \ |
126 | | } |
127 | | |
128 | | #ifdef __GNUC__ |
129 | | inline |
130 | | #elif defined(_MSC_VER) |
131 | | __forceinline |
132 | | #else |
133 | | static |
134 | | #endif |
135 | 583k | float fMAX(float a, float b) { return MAX(a, b); } |
136 | | |
137 | | /* |
138 | | In order to inline this calculation, I make the risky |
139 | | assumption that all filter patterns can be described |
140 | | by a repeating pattern of eight rows and two columns |
141 | | |
142 | | Do not use the FC or BAYER macros with the Leaf CatchLight, |
143 | | because its pattern is 16x16, not 2x8. |
144 | | |
145 | | Return values are either 0/1/2/3 = G/M/C/Y or 0/1/2/3 = R/G1/B/G2 |
146 | | |
147 | | PowerShot 600 PowerShot A50 PowerShot Pro70 Pro90 & G1 |
148 | | 0xe1e4e1e4: 0x1b4e4b1e: 0x1e4b4e1b: 0xb4b4b4b4: |
149 | | |
150 | | 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 |
151 | | 0 G M G M G M 0 C Y C Y C Y 0 Y C Y C Y C 0 G M G M G M |
152 | | 1 C Y C Y C Y 1 M G M G M G 1 M G M G M G 1 Y C Y C Y C |
153 | | 2 M G M G M G 2 Y C Y C Y C 2 C Y C Y C Y |
154 | | 3 C Y C Y C Y 3 G M G M G M 3 G M G M G M |
155 | | 4 C Y C Y C Y 4 Y C Y C Y C |
156 | | PowerShot A5 5 G M G M G M 5 G M G M G M |
157 | | 0x1e4e1e4e: 6 Y C Y C Y C 6 C Y C Y C Y |
158 | | 7 M G M G M G 7 M G M G M G |
159 | | 0 1 2 3 4 5 |
160 | | 0 C Y C Y C Y |
161 | | 1 G M G M G M |
162 | | 2 C Y C Y C Y |
163 | | 3 M G M G M G |
164 | | |
165 | | All RGB cameras use one of these Bayer grids: |
166 | | |
167 | | 0x16161616: 0x61616161: 0x49494949: 0x94949494: |
168 | | |
169 | | 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 |
170 | | 0 B G B G B G 0 G R G R G R 0 G B G B G B 0 R G R G R G |
171 | | 1 G R G R G R 1 B G B G B G 1 R G R G R G 1 G B G B G B |
172 | | 2 B G B G B G 2 G R G R G R 2 G B G B G B 2 R G R G R G |
173 | | 3 G R G R G R 3 B G B G B G 3 R G R G R G 3 G B G B G B |
174 | | */ |
175 | | |
176 | | // _RGBG means R, G1, B, G2 sequence |
177 | 466k | #define GRBG_2_RGBG(q) (q ^ (q >> 1) ^ 1) |
178 | 1.70M | #define RGGB_2_RGBG(q) (q ^ (q >> 1)) |
179 | 7.46k | #define BG2RG1_2_RGBG(q) (q ^ 2) |
180 | 1.92k | #define G2BRG1_2_RGBG(q) (q ^ (q >> 1) ^ 3) |
181 | 556k | #define GRGB_2_RGBG(q) (q ^ 1) |
182 | 16 | #define RBGG_2_RGBG(q) ((q >> 1) | ((q & 1) << 1)) |
183 | | |
184 | 0 | #define RAWINDEX(row, col) ((row)*raw_width + (col)) |
185 | 0 | #define RAW(row, col) raw_image[(row)*raw_width + (col)] |
186 | | #define BAYER(row, col) \ |
187 | 0 | image[((row) >> shrink) * iwidth + ((col) >> shrink)][FC(row, col)] |
188 | | |
189 | | #define BAYER2(row, col) \ |
190 | 0 | image[((row) >> shrink) * iwidth + ((col) >> shrink)][fcol(row, col)] |
191 | | #define BAYERC(row, col, c) \ |
192 | | imgdata.image[((row) >> IO.shrink) * S.iwidth + ((col) >> IO.shrink)][c] |
193 | | |
194 | | #endif |