|
|
|
/*
|
|
|
|
GENERATED FILE, DO NOT EDIT
|
|
|
|
Generated from dcraw/dcraw.c at Tue Apr 7 15:14:48 2009
|
|
|
|
Look into original file (probably http://cybercom.net/~dcoffin/dcraw/dcraw.c)
|
|
|
|
for copyright information.
|
|
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include "config.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define NO_JPEG
|
|
|
|
#define DCRAW_VERSION "8.93"
|
|
|
|
#define _USE_MATH_DEFINES
|
|
|
|
|
|
|
|
#include <ctype.h>
|
|
|
|
#include <errno.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <float.h>
|
|
|
|
#include <limits.h>
|
|
|
|
#include <math.h>
|
|
|
|
#include <setjmp.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <time.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
|
|
|
#ifdef _OPENMP
|
|
|
|
#include <omp.h>
|
|
|
|
#endif
|
|
|
|
/*
|
|
|
|
NO_JPEG disables decoding of compressed Kodak DC120 files.
|
|
|
|
NO_LCMS disables the "-p" option.
|
|
|
|
*/
|
|
|
|
#ifndef NO_JPEG
|
|
|
|
#include <jpeglib.h>
|
|
|
|
#endif
|
|
|
|
#ifndef NO_LCMS
|
|
|
|
#include LCMS_HEADER
|
|
|
|
#endif
|
|
|
|
#ifdef LOCALEDIR
|
|
|
|
#include <libintl.h>
|
|
|
|
#define _(String) gettext(String)
|
|
|
|
#else
|
|
|
|
#define _(String) (String)
|
|
|
|
#endif
|
|
|
|
#ifdef __CYGWIN__
|
|
|
|
#include <io.h>
|
|
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
|
|
#include <sys/utime.h>
|
|
|
|
#include <winsock2.h>
|
|
|
|
#pragma comment(lib, "ws2_32.lib")
|
|
|
|
#define snprintf _snprintf
|
|
|
|
#define strcasecmp _stricmp
|
|
|
|
#define strncasecmp strnicmp
|
|
|
|
typedef __int64 INT64;
|
|
|
|
typedef unsigned __int64 UINT64;
|
|
|
|
#else
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <utime.h>
|
|
|
|
#include <netinet/in.h>
|
|
|
|
typedef long long INT64;
|
|
|
|
typedef unsigned long long UINT64;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef LJPEG_DECODE
|
|
|
|
#error Please compile dcraw.c by itself.
|
|
|
|
#error Do not link it with ljpeg_decode.
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef LONG_BIT
|
|
|
|
#define LONG_BIT (8 * sizeof (long))
|
|
|
|
#endif
|
|
|
|
#define FORC(cnt) for (c=0; c < cnt; c++)
|
|
|
|
#define FORC3 FORC(3)
|
|
|
|
#define FORC4 FORC(4)
|
|
|
|
#define FORCC FORC(colors)
|
|
|
|
|
|
|
|
#define SQR(x) ((x)*(x))
|
|
|
|
#define ABS(x) (((int)(x) ^ ((int)(x) >> 31)) - ((int)(x) >> 31))
|
|
|
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
|
|
|
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
|
|
|
#define LIM(x,min,max) MAX(min,MIN(x,max))
|
|
|
|
#define ULIM(x,y,z) ((y) < (z) ? LIM(x,y,z) : LIM(x,z,y))
|
|
|
|
#define CLIP(x) LIM(x,0,65535)
|
|
|
|
#define SWAP(a,b) { a ^= b; a ^= (b ^= a); }
|
|
|
|
|
|
|
|
/*
|
|
|
|
In order to inline this calculation, I make the risky
|
|
|
|
assumption that all filter patterns can be described
|
|
|
|
by a repeating pattern of eight rows and two columns
|
|
|
|
|
|
|
|
Do not use the FC or BAYER macros with the Leaf CatchLight,
|
|
|
|
because its pattern is 16x16, not 2x8.
|
|
|
|
|
|
|
|
Return values are either 0/1/2/3 = G/M/C/Y or 0/1/2/3 = R/G1/B/G2
|
|
|
|
|
|
|
|
PowerShot 600 PowerShot A50 PowerShot Pro70 Pro90 & G1
|
|
|
|
0xe1e4e1e4: 0x1b4e4b1e: 0x1e4b4e1b: 0xb4b4b4b4:
|
|
|
|
|
|
|
|
0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
|
|
|
|
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
|
|
|
|
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
|
|
|
|
2 M G M G M G 2 Y C Y C Y C 2 C Y C Y C Y
|
|
|
|
3 C Y C Y C Y 3 G M G M G M 3 G M G M G M
|
|
|
|
4 C Y C Y C Y 4 Y C Y C Y C
|
|
|
|
PowerShot A5 5 G M G M G M 5 G M G M G M
|
|
|
|
0x1e4e1e4e: 6 Y C Y C Y C 6 C Y C Y C Y
|
|
|
|
7 M G M G M G 7 M G M G M G
|
|
|
|
0 1 2 3 4 5
|
|
|
|
0 C Y C Y C Y
|
|
|
|
1 G M G M G M
|
|
|
|
2 C Y C Y C Y
|
|
|
|
3 M G M G M G
|
|
|
|
|
|
|
|
All RGB cameras use one of these Bayer grids:
|
|
|
|
|
|
|
|
0x16161616: 0x61616161: 0x49494949: 0x94949494:
|
|
|
|
|
|
|
|
0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define BAYER(row,col) \
|
|
|
|
image[((row) >> shrink)*iwidth + ((col) >> shrink)][FC(row,col)]
|
|
|
|
|
|
|
|
#define BAYER2(row,col) \
|
|
|
|
image[((row) >> shrink)*iwidth + ((col) >> shrink)][fc(row,col)]
|