Advertisement
a1ex

Kelvin to RGB from ufraw

Apr 10th, 2014
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 43.17 KB | None | 0 0
  1. /* Code ported from ufraw */
  2.  
  3. /* Convert between Temperature and RGB.
  4.  * Base on information from http://www.brucelindbloom.com/
  5.  * The fit for D-illuminant between 4000K and 23000K are from CIE
  6.  * The generalization to 2000K < T < 4000K and the blackbody fits
  7.  * are my own and should be taken with a grain of salt.
  8.  */
  9. static const double XYZ_to_RGB[3][3] = {
  10.     { 3.24071,  -0.969258,  0.0556352 },
  11.     { -1.53726, 1.87599,    -0.203996 },
  12.     { -0.498571,    0.0415557,  1.05707 }
  13. };
  14.  
  15. void Temperature_to_RGB(double T, double RGB[3])
  16. {
  17.     int c;
  18.     double xD, yD, X, Y, Z, max;
  19.     // Fit for CIE Daylight illuminant
  20.     if (T <= 4000) {
  21.         xD = 0.27475e9 / (T * T * T) - 0.98598e6 / (T * T) + 1.17444e3 / T + 0.145986;
  22.     } else if (T <= 7000) {
  23.         xD = -4.6070e9 / (T * T * T) + 2.9678e6 / (T * T) + 0.09911e3 / T + 0.244063;
  24.     } else {
  25.         xD = -2.0064e9 / (T * T * T) + 1.9018e6 / (T * T) + 0.24748e3 / T + 0.237040;
  26.     }
  27.     yD = -3 * xD * xD + 2.87 * xD - 0.275;
  28.  
  29.     // Fit for Blackbody using CIE standard observer function at 2 degrees
  30.     //xD = -1.8596e9/(T*T*T) + 1.37686e6/(T*T) + 0.360496e3/T + 0.232632;
  31.     //yD = -2.6046*xD*xD + 2.6106*xD - 0.239156;
  32.  
  33.     // Fit for Blackbody using CIE standard observer function at 10 degrees
  34.     //xD = -1.98883e9/(T*T*T) + 1.45155e6/(T*T) + 0.364774e3/T + 0.231136;
  35.     //yD = -2.35563*xD*xD + 2.39688*xD - 0.196035;
  36.  
  37.     X = xD / yD;
  38.     Y = 1;
  39.     Z = (1 - xD - yD) / yD;
  40.     max = 0;
  41.     for (c = 0; c < 3; c++) {
  42.         RGB[c] = X * XYZ_to_RGB[0][c] + Y * XYZ_to_RGB[1][c] + Z * XYZ_to_RGB[2][c];
  43.         if (RGB[c] > max) max = RGB[c];
  44.     }
  45.     for (c = 0; c < 3; c++) RGB[c] = RGB[c] / max;
  46. }
  47.  
  48. void RGB_to_Temperature(double RGB[3], double *T, double *Green)
  49. {
  50.     double Tmax, Tmin, testRGB[3];
  51.     Tmin = 2000;
  52.     Tmax = 23000;
  53.     for (*T = (Tmax + Tmin) / 2; Tmax - Tmin > 0.1; *T = (Tmax + Tmin) / 2) {
  54.         Temperature_to_RGB(*T, testRGB);
  55.         if (testRGB[2] / testRGB[0] > RGB[2] / RGB[0])
  56.             Tmax = *T;
  57.         else
  58.             Tmin = *T;
  59.     }
  60.     *Green = (testRGB[1] / testRGB[0]) / (RGB[1] / RGB[0]);
  61.     if (*Green < 0.2) *Green = 0.2;
  62.     if (*Green > 2.5) *Green = 2.5;
  63. }
  64.  
  65. void ufraw_kelvin_green_to_multipliers(double temperature, double green, double chanMulArray[3])
  66. {
  67.     /* color matrices from dcraw */
  68.     extern float pre_mul[4], rgb_cam[3][4];
  69.     double rgbWB[3];
  70.     int c, cc, i, j;
  71.  
  72.     double cam_rgb[3][3];
  73.     double rgb_cam_transpose[4][3];
  74.     for (i = 0; i < 4; i++) for (j = 0; j < 3; j++)
  75.             rgb_cam_transpose[i][j] = rgb_cam[j][i];
  76.  
  77.     extern void CLASS pseudoinverse (double (*in)[3], double (*out)[3], int size);
  78.     pseudoinverse(rgb_cam_transpose, cam_rgb, 3);
  79.  
  80.     /* For uf_manual_wb we calculate chanMul from the temperature/green. */
  81.     {
  82.         Temperature_to_RGB(temperature, rgbWB);
  83.         rgbWB[1] = rgbWB[1] / green;
  84.         /* Suppose we shot a white card at some temperature:
  85.          * rgbWB[3] = rgb_cam[3][4] * preMul[4] * camWhite[4]
  86.          * Now we want to make it white (1,1,1), so we replace preMul
  87.          * with chanMul, which is defined as:
  88.          * chanMul[4][4] = cam_rgb[4][3] * (1/rgbWB[3][3]) * rgb_cam[3][4]
  89.          *      * preMul[4][4]
  90.          * We "upgraded" preMul, chanMul and rgbWB to diagonal matrices.
  91.          * This allows for the manipulation:
  92.          * (1/chanMul)[4][4] = (1/preMul)[4][4] * cam_rgb[4][3] * rgbWB[3][3]
  93.          *      * rgb_cam[3][4]
  94.          * We use the fact that rgb_cam[3][4] * (1,1,1,1) = (1,1,1) and get:
  95.          * (1/chanMul)[4] = (1/preMul)[4][4] * cam_rgb[4][3] * rgbWB[3]
  96.          */
  97.         if (0) {
  98.             /* If there is no color matrix it is simple */
  99.             for (c = 0; c < 3; c++)
  100.                 chanMulArray[c] = pre_mul[c] / rgbWB[c];
  101.         } else {
  102.             for (c = 0; c < 3; c++) {
  103.                 double chanMulInv = 0;
  104.                 for (cc = 0; cc < 3; cc++)
  105.                     chanMulInv += 1 / pre_mul[c] * cam_rgb[c][cc]
  106.                                   * rgbWB[cc];
  107.                 chanMulArray[c] = 1 / chanMulInv;
  108.             }
  109.         }
  110.        
  111.         /* normalize green multiplier */
  112.         chanMulArray[0] /= chanMulArray[1];
  113.         chanMulArray[2] /= chanMulArray[1];
  114.         chanMulArray[1] = 1;
  115.     }
  116. }
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137. /* Routines copied from dcraw */
  138.  
  139. #include "string.h"
  140. #include "stdio.h"
  141.  
  142. #define CLASS
  143.  
  144. #if !defined(uchar)
  145. #define uchar unsigned char
  146. #endif
  147. #if !defined(ushort)
  148. #define ushort unsigned short
  149. #endif
  150.  
  151. float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];
  152.  
  153. const double xyz_rgb[3][3] = {                        /* XYZ from RGB */
  154.   { 0.412453, 0.357580, 0.180423 },
  155.   { 0.212671, 0.715160, 0.072169 },
  156.   { 0.019334, 0.119193, 0.950227 } };
  157.  
  158. int black, maximum;
  159. unsigned raw_color;
  160. int colors = 3;
  161.  
  162.  
  163. void CLASS pseudoinverse (double (*in)[3], double (*out)[3], int size)
  164. {
  165.   double work[3][6], num;
  166.   int i, j, k;
  167.  
  168.   for (i=0; i < 3; i++) {
  169.     for (j=0; j < 6; j++)
  170.       work[i][j] = j == i+3;
  171.     for (j=0; j < 3; j++)
  172.       for (k=0; k < size; k++)
  173.         work[i][j] += in[k][i] * in[k][j];
  174.   }
  175.   for (i=0; i < 3; i++) {
  176.     num = work[i][i];
  177.     for (j=0; j < 6; j++)
  178.       work[i][j] /= num;
  179.     for (k=0; k < 3; k++) {
  180.       if (k==i) continue;
  181.       num = work[k][i];
  182.       for (j=0; j < 6; j++)
  183.         work[k][j] -= work[i][j] * num;
  184.     }
  185.   }
  186.   for (i=0; i < size; i++)
  187.     for (j=0; j < 3; j++)
  188.       for (out[i][j]=k=0; k < 3; k++)
  189.         out[i][j] += work[j][k+3] * in[i][k];
  190. }
  191.  
  192. void CLASS cam_xyz_coeff (double cam_xyz[4][3])
  193. {
  194.   double cam_rgb[4][3], inverse[4][3], num;
  195.   int i, j, k;
  196.  
  197.   for (i=0; i < colors; i++)                /* Multiply out XYZ colorspace */
  198.     for (j=0; j < 3; j++)
  199.       for (cam_rgb[i][j] = k=0; k < 3; k++)
  200.         cam_rgb[i][j] += cam_xyz[i][k] * xyz_rgb[k][j];
  201.  
  202.   for (i=0; i < colors; i++) {                /* Normalize cam_rgb so that */
  203.     for (num=j=0; j < 3; j++)                /* cam_rgb * (1,1,1) is (1,1,1,1) */
  204.       num += cam_rgb[i][j];
  205.     for (j=0; j < 3; j++)
  206.       cam_rgb[i][j] /= num;
  207.     pre_mul[i] = 1 / num;
  208.   }
  209.   pseudoinverse (cam_rgb, inverse, colors);
  210.   for (raw_color = i=0; i < 3; i++)
  211.     for (j=0; j < colors; j++)
  212.       rgb_cam[i][j] = inverse[j][i];
  213. }
  214.  
  215. /*
  216.    All matrices are from Adobe DNG Converter unless otherwise noted.
  217.  */
  218. void CLASS adobe_coeff (const char *make, const char *model)
  219. {
  220.   static const struct {
  221.     const char *prefix;
  222.     short black, maximum, trans[12];
  223.   } table[] = {
  224.     { "AGFAPHOTO DC-833m", 0, 0,        /* DJC */
  225.         { 11438,-3762,-1115,-2409,9914,2497,-1227,2295,5300 } },
  226.     { "Apple QuickTake", 0, 0,                /* DJC */
  227.         { 21392,-5653,-3353,2406,8010,-415,7166,1427,2078 } },
  228.     { "Canon EOS D2000", 0, 0,
  229.         { 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 } },
  230.     { "Canon EOS D6000", 0, 0,
  231.         { 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 } },
  232.     { "Canon EOS D30", 0, 0,
  233.         { 9805,-2689,-1312,-5803,13064,3068,-2438,3075,8775 } },
  234.     { "Canon EOS D60", 0, 0xfa0,
  235.         { 6188,-1341,-890,-7168,14489,2937,-2640,3228,8483 } },
  236.     { "Canon EOS 5D Mark III", 0, 0x3c80,
  237.         { 6722,-635,-963,-4287,12460,2028,-908,2162,5668 } },
  238.     { "Canon EOS 5D Mark II", 0, 0x3cf0,
  239.         { 4716,603,-830,-7798,15474,2480,-1496,1937,6651 } },
  240.     { "Canon EOS 5D", 0, 0xe6c,
  241.         { 6347,-479,-972,-8297,15954,2480,-1968,2131,7649 } },
  242.     { "Canon EOS 6D", 0, 0x3c82,
  243.         { 7034,-804,-1014,-4420,12564,2058,-851,1994,5758 } },
  244.     { "Canon EOS 7D", 0, 0x3510,
  245.         { 6844,-996,-856,-3876,11761,2396,-593,1772,6198 } },
  246.     { "Canon EOS 10D", 0, 0xfa0,
  247.         { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } },
  248.     { "Canon EOS 20Da", 0, 0,
  249.         { 14155,-5065,-1382,-6550,14633,2039,-1623,1824,6561 } },
  250.     { "Canon EOS 20D", 0, 0xfff,
  251.         { 6599,-537,-891,-8071,15783,2424,-1983,2234,7462 } },
  252.     { "Canon EOS 30D", 0, 0,
  253.         { 6257,-303,-1000,-7880,15621,2396,-1714,1904,7046 } },
  254.     { "Canon EOS 40D", 0, 0x3f60,
  255.         { 6071,-747,-856,-7653,15365,2441,-2025,2553,7315 } },
  256.     { "Canon EOS 50D", 0, 0x3d93,
  257.         { 4920,616,-593,-6493,13964,2784,-1774,3178,7005 } },
  258.     { "Canon EOS 60D", 0, 0x2ff7,
  259.         { 6719,-994,-925,-4408,12426,2211,-887,2129,6051 } },
  260.     { "Canon EOS 300D", 0, 0xfa0,
  261.         { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } },
  262.     { "Canon EOS 350D", 0, 0xfff,
  263.         { 6018,-617,-965,-8645,15881,2975,-1530,1719,7642 } },
  264.     { "Canon EOS 400D", 0, 0xe8e,
  265.         { 7054,-1501,-990,-8156,15544,2812,-1278,1414,7796 } },
  266.     { "Canon EOS 450D", 0, 0x390d,
  267.         { 5784,-262,-821,-7539,15064,2672,-1982,2681,7427 } },
  268.     { "Canon EOS 500D", 0, 0x3479,
  269.         { 4763,712,-646,-6821,14399,2640,-1921,3276,6561 } },
  270.     { "Canon EOS 550D", 0, 0x3dd7,
  271.         { 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 } },
  272.     { "Canon EOS 600D", 0, 0x3510,
  273.         { 6461,-907,-882,-4300,12184,2378,-819,1944,5931 } },
  274.     { "Canon EOS 650D", 0, 0x354d,
  275.         { 6602,-841,-939,-4472,12458,2247,-975,2039,6148 } },
  276.     { "Canon EOS 1000D", 0, 0xe43,
  277.         { 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } },
  278.     { "Canon EOS 1100D", 0, 0x3510,
  279.         { 6444,-904,-893,-4563,12308,2535,-903,2016,6728 } },
  280.     { "Canon EOS M", 0, 0,
  281.         { 6602,-841,-939,-4472,12458,2247,-975,2039,6148 } },
  282.     { "Canon EOS-1Ds Mark III", 0, 0x3bb0,
  283.         { 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } },
  284.     { "Canon EOS-1Ds Mark II", 0, 0xe80,
  285.         { 6517,-602,-867,-8180,15926,2378,-1618,1771,7633 } },
  286.     { "Canon EOS-1D Mark IV", 0, 0x3bb0,
  287.         { 6014,-220,-795,-4109,12014,2361,-561,1824,5787 } },
  288.     { "Canon EOS-1D Mark III", 0, 0x3bb0,
  289.         { 6291,-540,-976,-8350,16145,2311,-1714,1858,7326 } },
  290.     { "Canon EOS-1D Mark II N", 0, 0xe80,
  291.         { 6240,-466,-822,-8180,15825,2500,-1801,1938,8042 } },
  292.     { "Canon EOS-1D Mark II", 0, 0xe80,
  293.         { 6264,-582,-724,-8312,15948,2504,-1744,1919,8664 } },
  294.     { "Canon EOS-1DS", 0, 0xe20,
  295.         { 4374,3631,-1743,-7520,15212,2472,-2892,3632,8161 } },
  296.     { "Canon EOS-1D X", 0, 0x3c4e,
  297.         { 6847,-614,-1014,-4669,12737,2139,-1197,2488,6846 } },
  298.     { "Canon EOS-1D", 0, 0xe20,
  299.         { 6806,-179,-1020,-8097,16415,1687,-3267,4236,7690 } },
  300.     { "Canon EOS", 0, 0,
  301.         { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } },
  302.     { "Canon PowerShot A530", 0, 0,
  303.         { 0 } },        /* don't want the A5 matrix */
  304.     { "Canon PowerShot A50", 0, 0,
  305.         { -5300,9846,1776,3436,684,3939,-5540,9879,6200,-1404,11175,217 } },
  306.     { "Canon PowerShot A5", 0, 0,
  307.         { -4801,9475,1952,2926,1611,4094,-5259,10164,5947,-1554,10883,547 } },
  308.     { "Canon PowerShot G10", 0, 0,
  309.         { 11093,-3906,-1028,-5047,12492,2879,-1003,1750,5561 } },
  310.     { "Canon PowerShot G11", 0, 0,
  311.         { 12177,-4817,-1069,-1612,9864,2049,-98,850,4471 } },
  312.     { "Canon PowerShot G12", 0, 0,
  313.         { 13244,-5501,-1248,-1508,9858,1935,-270,1083,4366 } },
  314.     { "Canon PowerShot G15", 0, 0,
  315.         { 7474,-2301,-567,-4056,11456,2975,-222,716,4181 } },
  316.     { "Canon PowerShot G1 X", 0, 0,
  317.         { 7378,-1255,-1043,-4088,12251,2048,-876,1946,5805 } },
  318.     { "Canon PowerShot G1", 0, 0,
  319.         { -4778,9467,2172,4743,-1141,4344,-5146,9908,6077,-1566,11051,557 } },
  320.     { "Canon PowerShot G2", 0, 0,
  321.         { 9087,-2693,-1049,-6715,14382,2537,-2291,2819,7790 } },
  322.     { "Canon PowerShot G3", 0, 0,
  323.         { 9212,-2781,-1073,-6573,14189,2605,-2300,2844,7664 } },
  324.     { "Canon PowerShot G5", 0, 0,
  325.         { 9757,-2872,-933,-5972,13861,2301,-1622,2328,7212 } },
  326.     { "Canon PowerShot G6", 0, 0,
  327.         { 9877,-3775,-871,-7613,14807,3072,-1448,1305,7485 } },
  328.     { "Canon PowerShot G9", 0, 0,
  329.         { 7368,-2141,-598,-5621,13254,2625,-1418,1696,5743 } },
  330.     { "Canon PowerShot Pro1", 0, 0,
  331.         { 10062,-3522,-999,-7643,15117,2730,-765,817,7323 } },
  332.     { "Canon PowerShot Pro70", 34, 0,
  333.         { -4155,9818,1529,3939,-25,4522,-5521,9870,6610,-2238,10873,1342 } },
  334.     { "Canon PowerShot Pro90", 0, 0,
  335.         { -4963,9896,2235,4642,-987,4294,-5162,10011,5859,-1770,11230,577 } },
  336.     { "Canon PowerShot S30", 0, 0,
  337.         { 10566,-3652,-1129,-6552,14662,2006,-2197,2581,7670 } },
  338.     { "Canon PowerShot S40", 0, 0,
  339.         { 8510,-2487,-940,-6869,14231,2900,-2318,2829,9013 } },
  340.     { "Canon PowerShot S45", 0, 0,
  341.         { 8163,-2333,-955,-6682,14174,2751,-2077,2597,8041 } },
  342.     { "Canon PowerShot S50", 0, 0,
  343.         { 8882,-2571,-863,-6348,14234,2288,-1516,2172,6569 } },
  344.     { "Canon PowerShot S60", 0, 0,
  345.         { 8795,-2482,-797,-7804,15403,2573,-1422,1996,7082 } },
  346.     { "Canon PowerShot S70", 0, 0,
  347.         { 9976,-3810,-832,-7115,14463,2906,-901,989,7889 } },
  348.     { "Canon PowerShot S90", 0, 0,
  349.         { 12374,-5016,-1049,-1677,9902,2078,-83,852,4683 } },
  350.     { "Canon PowerShot S95", 0, 0,
  351.         { 13440,-5896,-1279,-1236,9598,1931,-180,1001,4651 } },
  352.     { "Canon PowerShot S100", 0, 0,
  353.         { 7968,-2565,-636,-2873,10697,2513,180,667,4211 } },
  354.     { "Canon PowerShot S110", 0, 0,
  355.         { 8039,-2643,-654,-3783,11230,2930,-206,690,4194 } },
  356.     { "Canon PowerShot SX1 IS", 0, 0,
  357.         { 6578,-259,-502,-5974,13030,3309,-308,1058,4970 } },
  358.     { "Canon PowerShot SX50 HS", 0, 0,
  359.         { 12432,-4753,-1247,-2110,10691,1629,-412,1623,4926 } },
  360.     { "Canon PowerShot A470", 0, 0,        /* DJC */
  361.         { 12513,-4407,-1242,-2680,10276,2405,-878,2215,4734 } },
  362.     { "Canon PowerShot A610", 0, 0,        /* DJC */
  363.         { 15591,-6402,-1592,-5365,13198,2168,-1300,1824,5075 } },
  364.     { "Canon PowerShot A620", 0, 0,        /* DJC */
  365.         { 15265,-6193,-1558,-4125,12116,2010,-888,1639,5220 } },
  366.     { "Canon PowerShot A630", 0, 0,        /* DJC */
  367.         { 14201,-5308,-1757,-6087,14472,1617,-2191,3105,5348 } },
  368.     { "Canon PowerShot A640", 0, 0,        /* DJC */
  369.         { 13124,-5329,-1390,-3602,11658,1944,-1612,2863,4885 } },
  370.     { "Canon PowerShot A650", 0, 0,        /* DJC */
  371.         { 9427,-3036,-959,-2581,10671,1911,-1039,1982,4430 } },
  372.     { "Canon PowerShot A720", 0, 0,        /* DJC */
  373.         { 14573,-5482,-1546,-1266,9799,1468,-1040,1912,3810 } },
  374.     { "Canon PowerShot S3 IS", 0, 0,        /* DJC */
  375.         { 14062,-5199,-1446,-4712,12470,2243,-1286,2028,4836 } },
  376.     { "Canon PowerShot SX110 IS", 0, 0,        /* DJC */
  377.         { 14134,-5576,-1527,-1991,10719,1273,-1158,1929,3581 } },
  378.     { "Canon PowerShot SX220", 0, 0,        /* DJC */
  379.         { 13898,-5076,-1447,-1405,10109,1297,-244,1860,3687 } },
  380.     { "CASIO EX-S20", 0, 0,                /* DJC */
  381.         { 11634,-3924,-1128,-4968,12954,2015,-1588,2648,7206 } },
  382.     { "CASIO EX-Z750", 0, 0,                /* DJC */
  383.         { 10819,-3873,-1099,-4903,13730,1175,-1755,3751,4632 } },
  384.     { "CASIO EX-Z10", 128, 0xfff,        /* DJC */
  385.         { 9790,-3338,-603,-2321,10222,2099,-344,1273,4799 } },
  386.     { "CINE 650", 0, 0,
  387.         { 3390,480,-500,-800,3610,340,-550,2336,1192 } },
  388.     { "CINE 660", 0, 0,
  389.         { 3390,480,-500,-800,3610,340,-550,2336,1192 } },
  390.     { "CINE", 0, 0,
  391.         { 20183,-4295,-423,-3940,15330,3985,-280,4870,9800 } },
  392.     { "Contax N Digital", 0, 0xf1e,
  393.         { 7777,1285,-1053,-9280,16543,2916,-3677,5679,7060 } },
  394.     { "EPSON R-D1", 0, 0,
  395.         { 6827,-1878,-732,-8429,16012,2564,-704,592,7145 } },
  396.     { "FUJIFILM E550", 0, 0,
  397.         { 11044,-3888,-1120,-7248,15168,2208,-1531,2277,8069 } },
  398.     { "FUJIFILM E900", 0, 0,
  399.         { 9183,-2526,-1078,-7461,15071,2574,-2022,2440,8639 } },
  400.     { "FUJIFILM F5", 0, 0,
  401.         { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
  402.     { "FUJIFILM F6", 0, 0,
  403.         { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
  404.     { "FUJIFILM F77", 0, 0xfe9,
  405.         { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
  406.     { "FUJIFILM F7", 0, 0,
  407.         { 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } },
  408.     { "FUJIFILM F8", 0, 0,
  409.         { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
  410.     { "FUJIFILM S100FS", 514, 0,
  411.         { 11521,-4355,-1065,-6524,13767,3058,-1466,1984,6045 } },
  412.     { "FUJIFILM S200EXR", 512, 0x3fff,
  413.         { 11401,-4498,-1312,-5088,12751,2613,-838,1568,5941 } },
  414.     { "FUJIFILM S20Pro", 0, 0,
  415.         { 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } },
  416.     { "FUJIFILM S2Pro", 128, 0,
  417.         { 12492,-4690,-1402,-7033,15423,1647,-1507,2111,7697 } },
  418.     { "FUJIFILM S3Pro", 0, 0,
  419.         { 11807,-4612,-1294,-8927,16968,1988,-2120,2741,8006 } },
  420.     { "FUJIFILM S5Pro", 0, 0,
  421.         { 12300,-5110,-1304,-9117,17143,1998,-1947,2448,8100 } },
  422.     { "FUJIFILM S5000", 0, 0,
  423.         { 8754,-2732,-1019,-7204,15069,2276,-1702,2334,6982 } },
  424.     { "FUJIFILM S5100", 0, 0,
  425.         { 11940,-4431,-1255,-6766,14428,2542,-993,1165,7421 } },
  426.     { "FUJIFILM S5500", 0, 0,
  427.         { 11940,-4431,-1255,-6766,14428,2542,-993,1165,7421 } },
  428.     { "FUJIFILM S5200", 0, 0,
  429.         { 9636,-2804,-988,-7442,15040,2589,-1803,2311,8621 } },
  430.     { "FUJIFILM S5600", 0, 0,
  431.         { 9636,-2804,-988,-7442,15040,2589,-1803,2311,8621 } },
  432.     { "FUJIFILM S6", 0, 0,
  433.         { 12628,-4887,-1401,-6861,14996,1962,-2198,2782,7091 } },
  434.     { "FUJIFILM S7000", 0, 0,
  435.         { 10190,-3506,-1312,-7153,15051,2238,-2003,2399,7505 } },
  436.     { "FUJIFILM S9000", 0, 0,
  437.         { 10491,-3423,-1145,-7385,15027,2538,-1809,2275,8692 } },
  438.     { "FUJIFILM S9500", 0, 0,
  439.         { 10491,-3423,-1145,-7385,15027,2538,-1809,2275,8692 } },
  440.     { "FUJIFILM S9100", 0, 0,
  441.         { 12343,-4515,-1285,-7165,14899,2435,-1895,2496,8800 } },
  442.     { "FUJIFILM S9600", 0, 0,
  443.         { 12343,-4515,-1285,-7165,14899,2435,-1895,2496,8800 } },
  444.     { "FUJIFILM IS-1", 0, 0,
  445.         { 21461,-10807,-1441,-2332,10599,1999,289,875,7703 } },
  446.     { "FUJIFILM IS Pro", 0, 0,
  447.         { 12300,-5110,-1304,-9117,17143,1998,-1947,2448,8100 } },
  448.     { "FUJIFILM HS10 HS11", 0, 0xf68,
  449.         { 12440,-3954,-1183,-1123,9674,1708,-83,1614,4086 } },
  450.     { "FUJIFILM HS20EXR", 0, 0,
  451.         { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
  452.     { "FUJIFILM HS3", 0, 0,
  453.         { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
  454.     { "FUJIFILM X100", 0, 0,
  455.         { 12161,-4457,-1069,-5034,12874,2400,-795,1724,6904 } },
  456.     { "FUJIFILM X10", 0, 0,
  457.         { 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
  458.     { "FUJIFILM X-Pro1", 0, 0,
  459.         { 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } },
  460.     { "FUJIFILM X-E1", 0, 0,
  461.         { 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } },
  462.     { "FUJIFILM XF1", 0, 0,
  463.         { 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
  464.     { "FUJIFILM X-S1", 0, 0,
  465.         { 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
  466.     { "Imacon Ixpress", 0, 0,                /* DJC */
  467.         { 7025,-1415,-704,-5188,13765,1424,-1248,2742,6038 } },
  468.     { "KODAK NC2000", 0, 0,
  469.         { 13891,-6055,-803,-465,9919,642,2121,82,1291 } },
  470.     { "Kodak DCS315C", 8, 0,
  471.         { 17523,-4827,-2510,756,8546,-137,6113,1649,2250 } },
  472.     { "Kodak DCS330C", 8, 0,
  473.         { 20620,-7572,-2801,-103,10073,-396,3551,-233,2220 } },
  474.     { "KODAK DCS420", 0, 0,
  475.         { 10868,-1852,-644,-1537,11083,484,2343,628,2216 } },
  476.     { "KODAK DCS460", 0, 0,
  477.         { 10592,-2206,-967,-1944,11685,230,2206,670,1273 } },
  478.     { "KODAK EOSDCS1", 0, 0,
  479.         { 10592,-2206,-967,-1944,11685,230,2206,670,1273 } },
  480.     { "KODAK EOSDCS3B", 0, 0,
  481.         { 9898,-2700,-940,-2478,12219,206,1985,634,1031 } },
  482.     { "Kodak DCS520C", 178, 0,
  483.         { 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 } },
  484.     { "Kodak DCS560C", 177, 0,
  485.         { 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 } },
  486.     { "Kodak DCS620C", 177, 0,
  487.         { 23617,-10175,-3149,-2054,11749,-272,2586,-489,3453 } },
  488.     { "Kodak DCS620X", 176, 0,
  489.         { 13095,-6231,154,12221,-21,-2137,895,4602,2258 } },
  490.     { "Kodak DCS660C", 173, 0,
  491.         { 18244,-6351,-2739,-791,11193,-521,3711,-129,2802 } },
  492.     { "Kodak DCS720X", 0, 0,
  493.         { 11775,-5884,950,9556,1846,-1286,-1019,6221,2728 } },
  494.     { "Kodak DCS760C", 0, 0,
  495.         { 16623,-6309,-1411,-4344,13923,323,2285,274,2926 } },
  496.     { "Kodak DCS Pro SLR", 0, 0,
  497.         { 5494,2393,-232,-6427,13850,2846,-1876,3997,5445 } },
  498.     { "Kodak DCS Pro 14nx", 0, 0,
  499.         { 5494,2393,-232,-6427,13850,2846,-1876,3997,5445 } },
  500.     { "Kodak DCS Pro 14", 0, 0,
  501.         { 7791,3128,-776,-8588,16458,2039,-2455,4006,6198 } },
  502.     { "Kodak ProBack645", 0, 0,
  503.         { 16414,-6060,-1470,-3555,13037,473,2545,122,4948 } },
  504.     { "Kodak ProBack", 0, 0,
  505.         { 21179,-8316,-2918,-915,11019,-165,3477,-180,4210 } },
  506.     { "KODAK P712", 0, 0,
  507.         { 9658,-3314,-823,-5163,12695,2768,-1342,1843,6044 } },
  508.     { "KODAK P850", 0, 0xf7c,
  509.         { 10511,-3836,-1102,-6946,14587,2558,-1481,1792,6246 } },
  510.     { "KODAK P880", 0, 0xfff,
  511.         { 12805,-4662,-1376,-7480,15267,2360,-1626,2194,7904 } },
  512.     { "KODAK EasyShare Z980", 0, 0,
  513.         { 11313,-3559,-1101,-3893,11891,2257,-1214,2398,4908 } },
  514.     { "KODAK EasyShare Z981", 0, 0,
  515.         { 12729,-4717,-1188,-1367,9187,2582,274,860,4411 } },
  516.     { "KODAK EasyShare Z990", 0, 0xfed,
  517.         { 11749,-4048,-1309,-1867,10572,1489,-138,1449,4522 } },
  518.     { "KODAK EASYSHARE Z1015", 0, 0xef1,
  519.         { 11265,-4286,-992,-4694,12343,2647,-1090,1523,5447 } },
  520.     { "Leaf CMost", 0, 0,
  521.         { 3952,2189,449,-6701,14585,2275,-4536,7349,6536 } },
  522.     { "Leaf Valeo 6", 0, 0,
  523.         { 3952,2189,449,-6701,14585,2275,-4536,7349,6536 } },
  524.     { "Leaf Aptus 54S", 0, 0,
  525.         { 8236,1746,-1314,-8251,15953,2428,-3673,5786,5771 } },
  526.     { "Leaf Aptus 65", 0, 0,
  527.         { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } },
  528.     { "Leaf Aptus 75", 0, 0,
  529.         { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } },
  530.     { "Leaf", 0, 0,
  531.         { 8236,1746,-1314,-8251,15953,2428,-3673,5786,5771 } },
  532.     { "Mamiya ZD", 0, 0,
  533.         { 7645,2579,-1363,-8689,16717,2015,-3712,5941,5961 } },
  534.     { "Micron 2010", 110, 0,                /* DJC */
  535.         { 16695,-3761,-2151,155,9682,163,3433,951,4904 } },
  536.     { "Minolta DiMAGE 5", 0, 0xf7d,
  537.         { 8983,-2942,-963,-6556,14476,2237,-2426,2887,8014 } },
  538.     { "Minolta DiMAGE 7Hi", 0, 0xf7d,
  539.         { 11368,-3894,-1242,-6521,14358,2339,-2475,3056,7285 } },
  540.     { "Minolta DiMAGE 7", 0, 0xf7d,
  541.         { 9144,-2777,-998,-6676,14556,2281,-2470,3019,7744 } },
  542.     { "Minolta DiMAGE A1", 0, 0xf8b,
  543.         { 9274,-2547,-1167,-8220,16323,1943,-2273,2720,8340 } },
  544.     { "MINOLTA DiMAGE A200", 0, 0,
  545.         { 8560,-2487,-986,-8112,15535,2771,-1209,1324,7743 } },
  546.     { "Minolta DiMAGE A2", 0, 0xf8f,
  547.         { 9097,-2726,-1053,-8073,15506,2762,-966,981,7763 } },
  548.     { "Minolta DiMAGE Z2", 0, 0,        /* DJC */
  549.         { 11280,-3564,-1370,-4655,12374,2282,-1423,2168,5396 } },
  550.     { "MINOLTA DYNAX 5", 0, 0xffb,
  551.         { 10284,-3283,-1086,-7957,15762,2316,-829,882,6644 } },
  552.     { "MINOLTA DYNAX 7", 0, 0xffb,
  553.         { 10239,-3104,-1099,-8037,15727,2451,-927,925,6871 } },
  554.     { "MOTOROLA PIXL", 0, 0,                /* DJC */
  555.         { 8898,-989,-1033,-3292,11619,1674,-661,3178,5216 } },
  556.     { "NIKON D100", 0, 0,
  557.         { 5902,-933,-782,-8983,16719,2354,-1402,1455,6464 } },
  558.     { "NIKON D1H", 0, 0,
  559.         { 7577,-2166,-926,-7454,15592,1934,-2377,2808,8606 } },
  560.     { "NIKON D1X", 0, 0,
  561.         { 7702,-2245,-975,-9114,17242,1875,-2679,3055,8521 } },
  562.     { "NIKON D1", 0, 0, /* multiplied by 2.218750, 1.0, 1.148438 */
  563.         { 16772,-4726,-2141,-7611,15713,1972,-2846,3494,9521 } },
  564.     { "NIKON D200", 0, 0xfbc,
  565.         { 8367,-2248,-763,-8758,16447,2422,-1527,1550,8053 } },
  566.     { "NIKON D2H", 0, 0,
  567.         { 5710,-901,-615,-8594,16617,2024,-2975,4120,6830 } },
  568.     { "NIKON D2X", 0, 0,
  569.         { 10231,-2769,-1255,-8301,15900,2552,-797,680,7148 } },
  570.     { "NIKON D3000", 0, 0,
  571.         { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } },
  572.     { "NIKON D3100", 0, 0,
  573.         { 7911,-2167,-813,-5327,13150,2408,-1288,2483,7968 } },
  574.     { "NIKON D3200", 0, 0xfb9,
  575.         { 7013,-1408,-635,-5268,12902,2640,-1470,2801,7379 } },
  576.     { "NIKON D300", 0, 0,
  577.         { 9030,-1992,-715,-8465,16302,2255,-2689,3217,8069 } },
  578.     { "NIKON D3X", 0, 0,
  579.         { 7171,-1986,-648,-8085,15555,2718,-2170,2512,7457 } },
  580.     { "NIKON D3S", 0, 0,
  581.         { 8828,-2406,-694,-4874,12603,2541,-660,1509,7587 } },
  582.     { "NIKON D3", 0, 0,
  583.         { 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } },
  584.     { "NIKON D40X", 0, 0,
  585.         { 8819,-2543,-911,-9025,16928,2151,-1329,1213,8449 } },
  586.     { "NIKON D40", 0, 0,
  587.         { 6992,-1668,-806,-8138,15748,2543,-874,850,7897 } },
  588.     { "NIKON D4", 0, 0,
  589.         { 8598,-2848,-857,-5618,13606,2195,-1002,1773,7137 } },
  590.     { "NIKON D5000", 0, 0xf00,
  591.         { 7309,-1403,-519,-8474,16008,2622,-2433,2826,8064 } },
  592.     { "NIKON D5100", 0, 0x3de6,
  593.         { 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } },
  594.     { "NIKON D50", 0, 0,
  595.         { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } },
  596.     { "NIKON D600", 0, 0x3e07,
  597.         { 8178,-2245,-609,-4857,12394,2776,-1207,2086,7298 } },
  598.     { "NIKON D60", 0, 0,
  599.         { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } },
  600.     { "NIKON D7000", 0, 0,
  601.         { 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } },
  602.     { "NIKON D700", 0, 0,
  603.         { 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } },
  604.     { "NIKON D70", 0, 0,
  605.         { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } },
  606.     { "NIKON D800", 0, 0,
  607.         { 7866,-2108,-555,-4869,12483,2681,-1176,2069,7501 } },
  608.     { "NIKON D80", 0, 0,
  609.         { 8629,-2410,-883,-9055,16940,2171,-1490,1363,8520 } },
  610.     { "NIKON D90", 0, 0xf00,
  611.         { 7309,-1403,-519,-8474,16008,2622,-2434,2826,8064 } },
  612.     { "NIKON E950", 0, 0x3dd,                /* DJC */
  613.         { -3746,10611,1665,9621,-1734,2114,-2389,7082,3064,3406,6116,-244 } },
  614.     { "NIKON E995", 0, 0,        /* copied from E5000 */
  615.         { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } },
  616.     { "NIKON E2100", 0, 0,        /* copied from Z2, new white balance */
  617.         { 13142,-4152,-1596,-4655,12374,2282,-1769,2696,6711} },
  618.     { "NIKON E2500", 0, 0,
  619.         { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } },
  620.     { "NIKON E3200", 0, 0,                /* DJC */
  621.         { 9846,-2085,-1019,-3278,11109,2170,-774,2134,5745 } },
  622.     { "NIKON E4300", 0, 0,        /* copied from Minolta DiMAGE Z2 */
  623.         { 11280,-3564,-1370,-4655,12374,2282,-1423,2168,5396 } },
  624.     { "NIKON E4500", 0, 0,
  625.         { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } },
  626.     { "NIKON E5000", 0, 0,
  627.         { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } },
  628.     { "NIKON E5400", 0, 0,
  629.         { 9349,-2987,-1001,-7919,15766,2266,-2098,2680,6839 } },
  630.     { "NIKON E5700", 0, 0,
  631.         { -5368,11478,2368,5537,-113,3148,-4969,10021,5782,778,9028,211 } },
  632.     { "NIKON E8400", 0, 0,
  633.         { 7842,-2320,-992,-8154,15718,2599,-1098,1342,7560 } },
  634.     { "NIKON E8700", 0, 0,
  635.         { 8489,-2583,-1036,-8051,15583,2643,-1307,1407,7354 } },
  636.     { "NIKON E8800", 0, 0,
  637.         { 7971,-2314,-913,-8451,15762,2894,-1442,1520,7610 } },
  638.     { "NIKON COOLPIX P6000", 0, 0,
  639.         { 9698,-3367,-914,-4706,12584,2368,-837,968,5801 } },
  640.     { "NIKON COOLPIX P7000", 0, 0,
  641.         { 11432,-3679,-1111,-3169,11239,2202,-791,1380,4455 } },
  642.     { "NIKON COOLPIX P7100", 0, 0,
  643.         { 11053,-4269,-1024,-1976,10182,2088,-526,1263,4469 } },
  644.     { "NIKON COOLPIX P7700", 200, 0,
  645.         { 10321,-3920,-931,-2750,11146,1824,-442,1545,5539 } },
  646.     { "NIKON 1 V2", 0, 0,
  647.         { 6588,-1305,-693,-3277,10987,2634,-355,2016,5106 } },
  648.     { "NIKON 1 ", 0, 0,
  649.         { 8994,-2667,-865,-4594,12324,2552,-699,1786,6260 } },
  650.     { "OLYMPUS C5050", 0, 0,
  651.         { 10508,-3124,-1273,-6079,14294,1901,-1653,2306,6237 } },
  652.     { "OLYMPUS C5060", 0, 0,
  653.         { 10445,-3362,-1307,-7662,15690,2058,-1135,1176,7602 } },
  654.     { "OLYMPUS C7070", 0, 0,
  655.         { 10252,-3531,-1095,-7114,14850,2436,-1451,1723,6365 } },
  656.     { "OLYMPUS C70", 0, 0,
  657.         { 10793,-3791,-1146,-7498,15177,2488,-1390,1577,7321 } },
  658.     { "OLYMPUS C80", 0, 0,
  659.         { 8606,-2509,-1014,-8238,15714,2703,-942,979,7760 } },
  660.     { "OLYMPUS E-10", 0, 0xffc,
  661.         { 12745,-4500,-1416,-6062,14542,1580,-1934,2256,6603 } },
  662.     { "OLYMPUS E-1", 0, 0,
  663.         { 11846,-4767,-945,-7027,15878,1089,-2699,4122,8311 } },
  664.     { "OLYMPUS E-20", 0, 0xffc,
  665.         { 13173,-4732,-1499,-5807,14036,1895,-2045,2452,7142 } },
  666.     { "OLYMPUS E-300", 0, 0,
  667.         { 7828,-1761,-348,-5788,14071,1830,-2853,4518,6557 } },
  668.     { "OLYMPUS E-330", 0, 0,
  669.         { 8961,-2473,-1084,-7979,15990,2067,-2319,3035,8249 } },
  670.     { "OLYMPUS E-30", 0, 0xfbc,
  671.         { 8144,-1861,-1111,-7763,15894,1929,-1865,2542,7607 } },
  672.     { "OLYMPUS E-3", 0, 0xf99,
  673.         { 9487,-2875,-1115,-7533,15606,2010,-1618,2100,7389 } },
  674.     { "OLYMPUS E-400", 0, 0,
  675.         { 6169,-1483,-21,-7107,14761,2536,-2904,3580,8568 } },
  676.     { "OLYMPUS E-410", 0, 0xf6a,
  677.         { 8856,-2582,-1026,-7761,15766,2082,-2009,2575,7469 } },
  678.     { "OLYMPUS E-420", 0, 0xfd7,
  679.         { 8746,-2425,-1095,-7594,15612,2073,-1780,2309,7416 } },
  680.     { "OLYMPUS E-450", 0, 0xfd2,
  681.         { 8745,-2425,-1095,-7594,15613,2073,-1780,2309,7416 } },
  682.     { "OLYMPUS E-500", 0, 0,
  683.         { 8136,-1968,-299,-5481,13742,1871,-2556,4205,6630 } },
  684.     { "OLYMPUS E-510", 0, 0xf6a,
  685.         { 8785,-2529,-1033,-7639,15624,2112,-1783,2300,7817 } },
  686.     { "OLYMPUS E-520", 0, 0xfd2,
  687.         { 8344,-2322,-1020,-7596,15635,2048,-1748,2269,7287 } },
  688.     { "OLYMPUS E-5", 0, 0xeec,
  689.         { 11200,-3783,-1325,-4576,12593,2206,-695,1742,7504 } },
  690.     { "OLYMPUS E-600", 0, 0xfaf,
  691.         { 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } },
  692.     { "OLYMPUS E-620", 0, 0xfaf,
  693.         { 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } },
  694.     { "OLYMPUS E-P1", 0, 0xffd,
  695.         { 8343,-2050,-1021,-7715,15705,2103,-1831,2380,8235 } },
  696.     { "OLYMPUS E-P2", 0, 0xffd,
  697.         { 8343,-2050,-1021,-7715,15705,2103,-1831,2380,8235 } },
  698.     { "OLYMPUS E-P3", 0, 0,
  699.         { 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
  700.     { "OLYMPUS E-PL1s", 0, 0,
  701.         { 11409,-3872,-1393,-4572,12757,2003,-709,1810,7415 } },
  702.     { "OLYMPUS E-PL1", 0, 0,
  703.         { 11408,-4289,-1215,-4286,12385,2118,-387,1467,7787 } },
  704.     { "OLYMPUS E-PL2", 0, 0,
  705.         { 15030,-5552,-1806,-3987,12387,1767,-592,1670,7023 } },
  706.     { "OLYMPUS E-PL3", 0, 0,
  707.         { 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
  708.     { "OLYMPUS E-PL5", 0, 0xfcb,
  709.         { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
  710.     { "OLYMPUS E-PM1", 0, 0,
  711.         { 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
  712.     { "OLYMPUS E-PM2", 0, 0,
  713.         { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
  714.     { "OLYMPUS E-M5", 0, 0xfe1,
  715.         { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
  716.     { "OLYMPUS SP350", 0, 0,
  717.         { 12078,-4836,-1069,-6671,14306,2578,-786,939,7418 } },
  718.     { "OLYMPUS SP3", 0, 0,
  719.         { 11766,-4445,-1067,-6901,14421,2707,-1029,1217,7572 } },
  720.     { "OLYMPUS SP500UZ", 0, 0xfff,
  721.         { 9493,-3415,-666,-5211,12334,3260,-1548,2262,6482 } },
  722.     { "OLYMPUS SP510UZ", 0, 0xffe,
  723.         { 10593,-3607,-1010,-5881,13127,3084,-1200,1805,6721 } },
  724.     { "OLYMPUS SP550UZ", 0, 0xffe,
  725.         { 11597,-4006,-1049,-5432,12799,2957,-1029,1750,6516 } },
  726.     { "OLYMPUS SP560UZ", 0, 0xff9,
  727.         { 10915,-3677,-982,-5587,12986,2911,-1168,1968,6223 } },
  728.     { "OLYMPUS SP570UZ", 0, 0,
  729.         { 11522,-4044,-1146,-4736,12172,2904,-988,1829,6039 } },
  730.     { "OLYMPUS XZ-1", 0, 0,
  731.         { 10901,-4095,-1074,-1141,9208,2293,-62,1417,5158 } },
  732.     { "OLYMPUS XZ-2", 0, 0,
  733.         { 9777,-3483,-925,-2886,11297,1800,-602,1663,5134 } },
  734.     { "PENTAX *ist DL2", 0, 0,
  735.         { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } },
  736.     { "PENTAX *ist DL", 0, 0,
  737.         { 10829,-2838,-1115,-8339,15817,2696,-837,680,11939 } },
  738.     { "PENTAX *ist DS2", 0, 0,
  739.         { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } },
  740.     { "PENTAX *ist DS", 0, 0,
  741.         { 10371,-2333,-1206,-8688,16231,2602,-1230,1116,11282 } },
  742.     { "PENTAX *ist D", 0, 0,
  743.         { 9651,-2059,-1189,-8881,16512,2487,-1460,1345,10687 } },
  744.     { "PENTAX K10D", 0, 0,
  745.         { 9566,-2863,-803,-7170,15172,2112,-818,803,9705 } },
  746.     { "PENTAX K1", 0, 0,
  747.         { 11095,-3157,-1324,-8377,15834,2720,-1108,947,11688 } },
  748.     { "PENTAX K20D", 0, 0,
  749.         { 9427,-2714,-868,-7493,16092,1373,-2199,3264,7180 } },
  750.     { "PENTAX K200D", 0, 0,
  751.         { 9186,-2678,-907,-8693,16517,2260,-1129,1094,8524 } },
  752.     { "PENTAX K2000", 0, 0,
  753.         { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } },
  754.     { "PENTAX K-m", 0, 0,
  755.         { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } },
  756.     { "PENTAX K-x", 0, 0,
  757.         { 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 } },
  758.     { "PENTAX K-r", 0, 0,
  759.         { 9895,-3077,-850,-5304,13035,2521,-883,1768,6936 } },
  760.     { "PENTAX K-5 II", 0, 0,
  761.         { 8170,-2725,-639,-4440,12017,2744,-771,1465,6599 } },
  762.     { "PENTAX K-5", 0, 0,
  763.         { 8713,-2833,-743,-4342,11900,2772,-722,1543,6247 } },
  764.     { "PENTAX K-7", 0, 0,
  765.         { 9142,-2947,-678,-8648,16967,1663,-2224,2898,8615 } },
  766.     { "PENTAX 645D", 0, 0x3e00,
  767.         { 10646,-3593,-1158,-3329,11699,1831,-667,2874,6287 } },
  768.     { "Panasonic DMC-FZ8", 0, 0xf7f,
  769.         { 8986,-2755,-802,-6341,13575,3077,-1476,2144,6379 } },
  770.     { "Panasonic DMC-FZ18", 0, 0,
  771.         { 9932,-3060,-935,-5809,13331,2753,-1267,2155,5575 } },
  772.     { "Panasonic DMC-FZ28", 15, 0xf96,
  773.         { 10109,-3488,-993,-5412,12812,2916,-1305,2140,5543 } },
  774.     { "Panasonic DMC-FZ30", 0, 0xf94,
  775.         { 10976,-4029,-1141,-7918,15491,2600,-1670,2071,8246 } },
  776.     { "Panasonic DMC-FZ3", 143, 0,
  777.         { 9938,-2780,-890,-4604,12393,2480,-1117,2304,4620 } },
  778.     { "Panasonic DMC-FZ4", 143, 0,
  779.         { 13639,-5535,-1371,-1698,9633,2430,316,1152,4108 } },
  780.     { "Panasonic DMC-FZ50", 0, 0,
  781.         { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } },
  782.     { "LEICA V-LUX1", 0, 0,
  783.         { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } },
  784.     { "Panasonic DMC-L10", 15, 0xf96,
  785.         { 8025,-1942,-1050,-7920,15904,2100,-2456,3005,7039 } },
  786.     { "Panasonic DMC-L1", 0, 0xf7f,
  787.         { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } },
  788.     { "LEICA DIGILUX 3", 0, 0xf7f,
  789.         { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } },
  790.     { "Panasonic DMC-LC1", 0, 0,
  791.         { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } },
  792.     { "LEICA DIGILUX 2", 0, 0,
  793.         { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } },
  794.     { "Panasonic DMC-LX1", 0, 0xf7f,
  795.         { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } },
  796.     { "LEICA D-LUX2", 0, 0xf7f,
  797.         { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } },
  798.     { "Panasonic DMC-LX2", 0, 0,
  799.         { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } },
  800.     { "LEICA D-LUX3", 0, 0,
  801.         { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } },
  802.     { "Panasonic DMC-LX3", 15, 0,
  803.         { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } },
  804.     { "LEICA D-LUX 4", 15, 0,
  805.         { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } },
  806.     { "Panasonic DMC-LX5", 143, 0,
  807.         { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } },
  808.     { "LEICA D-LUX 5", 143, 0,
  809.         { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } },
  810.     { "Panasonic DMC-LX7", 143, 0,
  811.         { 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } },
  812.     { "LEICA D-LUX 6", 143, 0,
  813.         { 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } },
  814.     { "Panasonic DMC-FZ100", 143, 0xfff,
  815.         { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } },
  816.     { "LEICA V-LUX 2", 143, 0xfff,
  817.         { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } },
  818.     { "Panasonic DMC-FZ150", 143, 0xfff,
  819.         { 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } },
  820.     { "LEICA V-LUX 3", 143, 0xfff,
  821.         { 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } },
  822.     { "Panasonic DMC-FZ200", 143, 0xfff,
  823.         { 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } },
  824.     { "LEICA V-LUX 4", 143, 0xfff,
  825.         { 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } },
  826.     { "Panasonic DMC-FX150", 15, 0xfff,
  827.         { 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } },
  828.     { "Panasonic DMC-G10", 0, 0,
  829.         { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } },
  830.     { "Panasonic DMC-G1", 15, 0xf94,
  831.         { 8199,-2065,-1056,-8124,16156,2033,-2458,3022,7220 } },
  832.     { "Panasonic DMC-G2", 15, 0xf3c,
  833.         { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } },
  834.     { "Panasonic DMC-G3", 143, 0xfff,
  835.         { 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } },
  836.     { "Panasonic DMC-G5", 143, 0xfff,
  837.         { 7798,-2562,-740,-3879,11584,2613,-1055,2248,5434 } },
  838.     { "Panasonic DMC-GF1", 15, 0xf92,
  839.         { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } },
  840.     { "Panasonic DMC-GF2", 143, 0xfff,
  841.         { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } },
  842.     { "Panasonic DMC-GF3", 143, 0xfff,
  843.         { 9051,-2468,-1204,-5212,13276,2121,-1197,2510,6890 } },
  844.     { "Panasonic DMC-GF5", 143, 0xfff,
  845.         { 8228,-2945,-660,-3938,11792,2430,-1094,2278,5793 } },
  846.     { "Panasonic DMC-GH1", 15, 0xf92,
  847.         { 6299,-1466,-532,-6535,13852,2969,-2331,3112,5984 } },
  848.     { "Panasonic DMC-GH2", 15, 0xf95,
  849.         { 7780,-2410,-806,-3913,11724,2484,-1018,2390,5298 } },
  850.     { "Panasonic DMC-GH3", 144, 0,
  851.         { 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } },
  852.     { "Panasonic DMC-GX1", 143, 0,
  853.         { 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } },
  854.     { "Phase One H 20", 0, 0,                /* DJC */
  855.         { 1313,1855,-109,-6715,15908,808,-327,1840,6020 } },
  856.     { "Phase One H 25", 0, 0,
  857.         { 2905,732,-237,-8134,16626,1476,-3038,4253,7517 } },
  858.     { "Phase One P 2", 0, 0,
  859.         { 2905,732,-237,-8134,16626,1476,-3038,4253,7517 } },
  860.     { "Phase One P 30", 0, 0,
  861.         { 4516,-245,-37,-7020,14976,2173,-3206,4671,7087 } },
  862.     { "Phase One P 45", 0, 0,
  863.         { 5053,-24,-117,-5684,14076,1702,-2619,4492,5849 } },
  864.     { "Phase One P40", 0, 0,
  865.         { 8035,435,-962,-6001,13872,2320,-1159,3065,5434 } },
  866.     { "Phase One P65", 0, 0,
  867.         { 8035,435,-962,-6001,13872,2320,-1159,3065,5434 } },
  868.     { "RED ONE", 704, 0xffff,                /* DJC */
  869.         { 21014,-7891,-2613,-3056,12201,856,-2203,5125,8042 } },
  870.     { "SAMSUNG EX1", 0, 0x3e00,
  871.         { 8898,-2498,-994,-3144,11328,2066,-760,1381,4576 } },
  872.     { "SAMSUNG EX2F", 0, 0x7ff,
  873.         { 10648,-3897,-1055,-2022,10573,1668,-492,1611,4742 } },
  874.     { "SAMSUNG NX2", 0, 0xfff,        /* NX20, NX200, NX210 */
  875.         { 6933,-2268,-753,-4921,13387,1647,-803,1641,6096 } },
  876.     { "SAMSUNG NX1000", 0, 0,
  877.         { 6933,-2268,-753,-4921,13387,1647,-803,1641,6096 } },
  878.     { "SAMSUNG NX", 0, 0,        /* NX5, NX10, NX11, NX100 */
  879.         { 10332,-3234,-1168,-6111,14639,1520,-1352,2647,8331 } },
  880.     { "SAMSUNG WB2000", 0, 0xfff,
  881.         { 12093,-3557,-1155,-1000,9534,1733,-22,1787,4576 } },
  882.     { "SAMSUNG GX-1", 0, 0,
  883.         { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } },
  884.     { "SAMSUNG S85", 0, 0xffff,                /* DJC */
  885.         { 11885,-3968,-1473,-4214,12299,1916,-835,1655,5549 } },
  886.     { "Sinar", 0, 0,                        /* DJC */
  887.         { 16442,-2956,-2422,-2877,12128,750,-1136,6066,4559 } },
  888.     { "SONY DSC-F828", 0, 0,
  889.         { 7924,-1910,-777,-8226,15459,2998,-1517,2199,6818,-7242,11401,3481 } },
  890.     { "SONY DSC-R1", 512, 0,
  891.         { 8512,-2641,-694,-8042,15670,2526,-1821,2117,7414 } },
  892.     { "SONY DSC-V3", 0, 0,
  893.         { 7511,-2571,-692,-7894,15088,3060,-948,1111,8128 } },
  894.     { "SONY DSC-RX100", 200, 0,
  895.         { 8651,-2754,-1057,-3464,12207,1373,-568,1398,4434 } },
  896.     { "SONY DSC-RX1", 128, 0,
  897.         { 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } },
  898.     { "SONY DSLR-A100", 0, 0xfeb,
  899.         { 9437,-2811,-774,-8405,16215,2290,-710,596,7181 } },
  900.     { "SONY DSLR-A290", 0, 0,
  901.         { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } },
  902.     { "SONY DSLR-A2", 0, 0,
  903.         { 9847,-3091,-928,-8485,16345,2225,-715,595,7103 } },
  904.     { "SONY DSLR-A300", 0, 0,
  905.         { 9847,-3091,-928,-8485,16345,2225,-715,595,7103 } },
  906.     { "SONY DSLR-A330", 0, 0,
  907.         { 9847,-3091,-929,-8485,16346,2225,-714,595,7103 } },
  908.     { "SONY DSLR-A350", 0, 0xffc,
  909.         { 6038,-1484,-578,-9146,16746,2513,-875,746,7217 } },
  910.     { "SONY DSLR-A380", 0, 0,
  911.         { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } },
  912.     { "SONY DSLR-A390", 0, 0,
  913.         { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } },
  914.     { "SONY DSLR-A450", 128, 0xfeb,
  915.         { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } },
  916.     { "SONY DSLR-A580", 128, 0xfeb,
  917.         { 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } },
  918.     { "SONY DSLR-A5", 128, 0xfeb,
  919.         { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } },
  920.     { "SONY DSLR-A700", 126, 0,
  921.         { 5775,-805,-359,-8574,16295,2391,-1943,2341,7249 } },
  922.     { "SONY DSLR-A850", 128, 0,
  923.         { 5413,-1162,-365,-5665,13098,2866,-608,1179,8440 } },
  924.     { "SONY DSLR-A900", 128, 0,
  925.         { 5209,-1072,-397,-8845,16120,2919,-1618,1803,8654 } },
  926.     { "SONY NEX-5N", 128, 0,
  927.         { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } },
  928.     { "SONY NEX-5R", 128, 0,
  929.         { 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } },
  930.     { "SONY NEX-3", 138, 0,                /* DJC */
  931.         { 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } },
  932.     { "SONY NEX-5", 116, 0,                /* DJC */
  933.         { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } },
  934.     { "SONY NEX-3", 128, 0,                /* Adobe */
  935.         { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } },
  936.     { "SONY NEX-5", 128, 0,                /* Adobe */
  937.         { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } },
  938.     { "SONY NEX-6", 128, 0,
  939.         { 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } },
  940.     { "SONY NEX-7", 128, 0,
  941.         { 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
  942.     { "SONY NEX", 128, 0,        /* NEX-C3, NEX-F3 */
  943.         { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } },
  944.     { "SONY SLT-A33", 128, 0,
  945.         { 6069,-1221,-366,-5221,12779,2734,-1024,2066,6834 } },
  946.     { "SONY SLT-A35", 128, 0,
  947.         { 5986,-1618,-415,-4557,11820,3120,-681,1404,6971 } },
  948.     { "SONY SLT-A37", 128, 0,
  949.         { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } },
  950.     { "SONY SLT-A55", 128, 0,
  951.         { 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } },
  952.     { "SONY SLT-A57", 128, 0,
  953.         { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } },
  954.     { "SONY SLT-A65", 128, 0,
  955.         { 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
  956.     { "SONY SLT-A77", 128, 0,
  957.         { 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
  958.     { "SONY SLT-A99", 128, 0,
  959.         { 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } },
  960.   };
  961.   double cam_xyz[4][3];
  962.   char name[130];
  963.   int i, j;
  964.  
  965.   sprintf (name, "%s %s", make, model);
  966.   for (i=0; i < sizeof table / sizeof *table; i++)
  967.     if (!strncmp (name, table[i].prefix, strlen(table[i].prefix))) {
  968.       printf("Camera model    : %s\n", table[i].prefix);
  969.       if (table[i].black)   black   = (ushort) table[i].black;
  970.       if (table[i].maximum) maximum = (ushort) table[i].maximum;
  971.       if (table[i].trans[0]) {
  972.         for (j=0; j < 12; j++)
  973.           cam_xyz[0][j] = table[i].trans[j] / 10000.0;
  974.         cam_xyz_coeff (cam_xyz);
  975.       }
  976.       break;
  977.     }
  978. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement