Author: post
Date: 2011-02-26 16:15:08 +0100 (Sat, 26 Feb 2011)
New Revision: 3831
Modified:
trunk/librawstudio/lens_fix.xml
trunk/librawstudio/rs-lens-fix.c
trunk/librawstudio/rs-metadata.c
Log:
Overhaul Lens ID generation and add information on many variable aperture
lenses on Canon.
Modified: trunk/librawstudio/lens_fix.xml
===================================================================
--- trunk/librawstudio/lens_fix.xml 2011-02-23 21:47:31 UTC (rev 3830)
+++ trunk/librawstudio/lens_fix.xml 2011-02-26 15:15:08 UTC (rev 3831)
@@ -1,28 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<rawstudio-lens-fix>
- <!-- Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical (IF) -->
- <lens id="37" min-focal="18" max-focal="270">
- <max-aperture>3.6</max-aperture>
- <min-aperture>22</min-aperture>
+ <lens id="-1" min-focal="28" max-focal="135" make ="Canon">
+ <name>Canon EF 28-135mm f/3.5-5.6 IS USM</name>
</lens>
- <!-- Sigma 10-20mm f/4-5.6 EX DC on Canon -->
- <lens id="152" min-focal="10" max-focal="20">
- <max-aperture>4.0</max-aperture>
- <min-aperture>22</min-aperture>
+ <lens id="4" min-focal="35" max-focal="105" make="Canon">
+ <name>Canon EF 35-105mm f/3.5-4.5</name>
</lens>
- <!-- Sigma 10-20mm f/4-5.6 EX DC on Old Canon -->
- <lens id="-1" min-focal="10" max-focal="20">
- <max-aperture>4.0</max-aperture>
- <min-aperture>22</min-aperture>
+ <lens id="4" min-focal="35" max-focal="135" make="Canon">
+ <name>Sigma UC Zoom 35-135mm f/4-5.6</name>
</lens>
- <!-- Sigma 17-70mm f/2.8-4.5 DC Macro -->
- <lens id="-1" min-focal="17" max-focal="70">
- <max-aperture>4.5</max-aperture>
- <min-aperture>22</min-aperture>
+ <lens id="6" min-focal="28" max-focal="70" make="Canon">
+ <name>Canon EF 28-70mm f/3.5-4.5</name>
</lens>
- <!-- Canon EF 28-135mm f/3.5-5.6 IS USM on old cameras -->
- <lens id="-1" min-focal="28" max-focal="135">
- <max-aperture>3.5</max-aperture>
- <min-aperture>22</min-aperture>
+ <lens id="6" min-focal="18" max-focal="50" make="Canon">
+ <name>Sigma 18-50mm f/3.5-5.6 DC</name>
</lens>
+ <lens id="6" min-focal="18" max-focal="125" make="Canon">
+ <name>Sigma 18-125mm f/3.5-5.6 DC IF ASP</name>
+ </lens>
+ <lens id="6" min-focal="19" max-focal="35" make="Canon">
+ <name>Tokina AF193-2 19-35mm f/3.5-4.5</name>
+ </lens>
+ <lens id="6" min-focal="28" max-focal="80" make="Canon">
+ <name>Sigma 28-80mm f/3.5-5.6 II Macro</name>
+ </lens>
+ <lens id="8" min-focal="70" max-focal="300" make="Canon">
+ <name>Sigma 70-300mm f/4-5.6 [APO] DG Macro</name>
+ </lens>
+ <lens id="8" min-focal="24" max-focal="200" make="Canon">
+ <name>Tokina AT-X242AF 24-200mm f/3.5-5.6</name>
+ </lens>
+ <lens id="9" min-focal="55" max-focal="200" make="Canon">
+ <name>Sigma 55-200mm f/4-5.6 DC</name>
+ </lens>
+ <lens id="28" min-focal="80" max-focal="200" make="Canon">
+ <name>Canon EF 80-200mm f/4.5-5.6</name>
+ </lens>
+ <lens id="28" min-focal="70" max-focal="300" make="Canon">
+ <name>Tamron AF 70-300mm f/4.5-5.6 Di LD 1:2 Macro Zoom</name>
+ </lens>
+ <lens id="28" min-focal="28" max-focal="200" make="Canon">
+ <name>Tamron AF Aspherical 28-200mm f/3.8-5.6</name>
+ </lens>
+ <lens id="31" min-focal="75" max-focal="300" make="Canon">
+ <name>Canon EF 75-300mm f/4-5.6</name>
+ </lens>
+ <lens id="37" min-focal="35" max-focal="80" make= "Canon">
+ <name>Canon EF 35-80mm f/4-5.6</name>
+ </lens>
+ <lens id="37" min-focal="18" max-focal="270" make= "Canon">
+ <name>Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical (IF)</name>
+ </lens>
+ <lens id="37" min-focal="28" max-focal="300" make= "Canon">
+ <name>Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro
Model A20</name>
+ </lens>
+ <lens id="42" min-focal="28" max-focal="200" make= "Canon">
+ <name>Canon EF 28-200mm f/3.5-5.6</name>
+ </lens>
+ <lens id="42" min-focal="28" max-focal="300" make= "Canon">
+ <name>Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro
Model A20</name>
+ </lens>
+ <lens id="131" min-focal="28" max-focal="80" make= "Canon">
+ <name>Canon EF 28-80mm f/2.8-4L</name>
+ </lens>
+ <lens id="131" min-focal="17" max-focal="35" make= "Canon">
+ <name>Sigma 17-35mm f/2.8-4 EX DG Aspherical HSM</name>
+ </lens>
+ <lens id="131" min-focal="17" max-focal="70" make= "Canon">
+ <name>Sigma 17-70mm f/2.8-4.5 DC Macro</name>
+ </lens>
+ <lens id="137" min-focal="18" max-focal="50" make= "Canon">
+ <name>Sigma 18-50mm f/2.8-4.5 DC OS HSM</name>
+ </lens>
+ <lens id="137" min-focal="50" max-focal="200" make= "Canon">
+ <name>Sigma 50-200mm f/4-5.6 DC OS HSM</name>
+ </lens>
+ <lens id="137" min-focal="18" max-focal="250" make= "Canon">
+ <name>Sigma 18-250mm f/3.5-6.3 DC OS HSM</name>
+ </lens>
+ <lens id="137" min-focal="18" max-focal="125" make= "Canon">
+ <name>Sigma 18-125mm f/3.8-5.6 DC OS HSM</name>
+ </lens>
+ <lens id="137" min-focal="17" max-focal="70" make= "Canon">
+ <name>Sigma 17-70mm f/2.8-4 DC Macro OS HSM</name>
+ </lens>
+ <lens id="137" min-focal="18" max-focal="270" make= "Canon">
+ <name>Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD</name>
+ </lens>
+ <lens id="152" min-focal="12" max-focal="24" make= "Canon">
+ <name>Sigma 12-24mm f/4.5-5.6 EX DG ASPHERICAL HSM</name>
+ </lens>
+ <lens id="152" min-focal="10" max-focal="20" make= "Canon">
+ <name>Sigma 10-20mm f/4-5.6 EX DC</name>
+ </lens>
+ <lens id="153" min-focal="35" max-focal="350" make= "Canon">
+ <name>Canon EF 35-350mm f/3.5-5.6L</name>
+ </lens>
+ <lens id="153" min-focal="50" max-focal="500" make= "Canon">
+ <name>Sigma 50-500mm f/4-6.3 APO HSM EX</name>
+ </lens>
+ <lens id="153" min-focal="28" max-focal="300" make= "Canon">
+ <name>Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical [IF] Macro</name>
+ </lens>
+ <lens id="153" min-focal="18" max-focal="200" make= "Canon">
+ <name>Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical [IF] Macro Model
A14</name>
+ </lens>
+ <lens id="153" min-focal="18" max-focal="250" make= "Canon">
+ <name>Tamron 18-250mm f/3.5-6.3 Di II LD Aspherical [IF] Macro</name>
+ </lens>
+ <lens id="156" min-focal="28" max-focal="105" make= "Canon">
+ <name>Canon EF 28-105mm f/3.5-4.5 USM</name>
+ </lens>
+ <lens id="156" min-focal="70" max-focal="300" make= "Canon">
+ <name>Tamron SP 70-300mm f/4.0-5.6 Di VC USD</name>
+ </lens>
+ <lens id="160" min-focal="20" max-focal="35" make= "Canon">
+ <name>Canon EF 20-35mm f/3.5-4.5 USM</name>
+ </lens>
+ <lens id="160" min-focal="19" max-focal="35" make= "Canon">
+ <name>Tamron AF 19-35mm f/3.5-4.5</name>
+ </lens>
+ <lens id="161" min-focal="17" max-focal="50" make= "Canon">
+ <name>Tamron AF 17-50mm f/2.8 Di-II LD Aspherical</name>
+ </lens>
+ <lens id="169" min-focal="18" max-focal="20" make= "Canon">
+ <name>Sigma 18-200mm f/3.5-6.3 DC OS</name>
+ </lens>
+ <lens id="169" min-focal="18" max-focal="50" make= "Canon">
+ <name>Sigma 15-30mm f/3.5-4.5 EX DG Aspherical</name>
+ </lens>
</rawstudio-lens-fix>
Modified: trunk/librawstudio/rs-lens-fix.c
===================================================================
--- trunk/librawstudio/rs-lens-fix.c 2011-02-23 21:47:31 UTC (rev 3830)
+++ trunk/librawstudio/rs-lens-fix.c 2011-02-26 15:15:08 UTC (rev 3831)
@@ -23,40 +23,223 @@
static GHashTable *lens_fix_hash_table;
-typedef struct {
- gdouble max;
- gdouble min;
-} LensAperture;
-
-gchar *
-lens_fix_str_hash(gint id, gdouble min_focal, gdouble max_focal)
+static gchar *
+lens_fix_str_hash(RS_MAKE make, gint id, gdouble min_focal, gdouble max_focal)
{
- return g_strdup_printf("%d:%0.1f:%0.1f", id, min_focal, max_focal);
+ return g_strdup_printf("%d %d:%0.1f:%0.1f", (int)make, id, min_focal,
max_focal);
}
-LensAperture *
-lens_fix_find(gint id, gdouble min_focal, gdouble max_focal)
+static const gchar*
+lens_fix_find(RS_MAKE make, gint id, gdouble min_focal, gdouble max_focal)
{
- gchar *str_hash = lens_fix_str_hash(id, min_focal, max_focal);
- LensAperture *lens_aperture = g_hash_table_lookup(lens_fix_hash_table,
str_hash);
+ gchar *str_hash = lens_fix_str_hash(make, id, min_focal, max_focal);
+ const gchar* lens_name = g_hash_table_lookup(lens_fix_hash_table,
str_hash);
g_free(str_hash);
- return lens_aperture;
+ return lens_name;
}
-gboolean
-lens_fix_insert(gint id, gdouble min_focal, gdouble max_focal, gdouble
max_aperture, gdouble min_aperture)
+static gboolean
+lens_fix_insert(RS_MAKE make, gint id, gdouble min_focal, gdouble max_focal,
const gchar* name)
{
- gchar *str_hash = lens_fix_str_hash(id, min_focal, max_focal); /* May
NOT be freed */
- LensAperture *lens_aperture = g_new(LensAperture, 1);
- lens_aperture->max = max_aperture;
- lens_aperture->min = min_aperture;
+ gchar *str_hash = lens_fix_str_hash(make, id, min_focal, max_focal); /*
May NOT be freed */
- if (!lens_fix_find(id, min_focal, max_focal))
- g_hash_table_insert(lens_fix_hash_table, str_hash,
lens_aperture);
-
+ if (!lens_fix_find(make, id, min_focal, max_focal))
+ g_hash_table_insert(lens_fix_hash_table, str_hash,
g_strdup(name));
+ else
+ g_free(str_hash);
+
+ lens_fix_find(make, id, min_focal, max_focal);
return TRUE;
}
+/* These are lenses for Canon, where there is no known 3rd party lenses */
+/* This table is mainly used for Canon cameras, where there is no text
indication of lenses */
+
+static gchar*
+get_canon_name_from_lens_id(gint lens_id)
+{
+ gchar* id = NULL;
+ switch (lens_id)
+ {
+ case 1: id = g_strdup("Canon EF 50mm f/1.8"); break;
+ case 2: id = g_strdup("Canon EF 28mm f/2.8"); break;
+ case 3: id = g_strdup("Canon EF 135mm f/2.8 Soft"); break;
+ case 5: id = g_strdup("Canon EF 35-70mm f/3.5-4.5"); break;
+ case 7: id = g_strdup("Canon EF 100-300mm f/5.6L"); break;
+ case 9: id = g_strdup("Canon EF 70-210mm f/4"); break;
+ case 11: id = g_strdup("Canon EF 35mm f/2"); break;
+ case 13: id = g_strdup("Canon EF 15mm f/2.8 Fisheye"); break;
+ case 14: id = g_strdup("Canon EF 50-200mm f/3.5-4.5L"); break;
+ case 15: id = g_strdup("Canon EF 50-200mm f/3.5-4.5"); break;
+ case 16: id = g_strdup("Canon EF 35-135mm f/3.5-4.5"); break;
+ case 17: id = g_strdup("Canon EF 35-70mm f/3.5-4.5A"); break;
+ case 18: id = g_strdup("Canon EF 28-70mm f/3.5-4.5"); break;
+ case 20: id = g_strdup("Canon EF 100-200mm f/4.5A"); break;
+ case 21: id = g_strdup("Canon EF 80-200mm f/2.8L"); break;
+ case 23: id = g_strdup("Canon EF 35-105mm f/3.5-4.5"); break;
+ case 24: id = g_strdup("Canon EF 35-80mm f/4-5.6 Power Zoom");
break;
+ case 25: id = g_strdup("Canon EF 35-80mm f/4-5.6 Power Zoom");
break;
+ case 27: id = g_strdup("Canon EF 35-80mm f/4-5.6"); break;
+ case 29: id = g_strdup("Canon EF 50mm f/1.8 II"); break;
+ case 30: id = g_strdup("Canon EF 35-105mm f/4.5-5.6"); break;
+ case 33: id = g_strdup("Voigtlander or Zeiss Lens"); break;
+ case 35: id = g_strdup("Canon EF 35-80mm f/4-5.6"); break;
+ case 36: id = g_strdup("Canon EF 38-76mm f/4.5-5.6"); break;
+ case 38: id = g_strdup("Canon EF 80-200mm f/4.5-5.6"); break;
+ case 39: id = g_strdup("Canon EF 75-300mm f/4-5.6"); break;
+ case 40: id = g_strdup("Canon EF 28-80mm f/3.5-5.6"); break;
+ case 41: id = g_strdup("Canon EF 28-90mm f/4-5.6"); break;
+ case 43: id = g_strdup("Canon EF 28-105mm f/4-5.6"); break;
+ case 44: id = g_strdup("Canon EF 90-300mm f/4.5-5.6"); break;
+ case 45: id = g_strdup("Canon EF-S 18-55mm f/3.5-5.6 [II]");
break;
+ case 46: id = g_strdup("Canon EF 28-90mm f/4-5.6"); break;
+ case 48: id = g_strdup("Canon EF-S 18-55mm f/3.5-5.6 IS");
break;
+ case 49: id = g_strdup("Canon EF-S 55-250mm f/4-5.6 IS"); break;
+ case 50: id = g_strdup("Canon EF-S 18-200mm f/3.5-5.6 IS");
break;
+ case 51: id = g_strdup("Canon EF-S 18-135mm f/3.5-5.6 IS");
break;
+ case 52: id = g_strdup("Canon EF-S 18-55mm f/3.5-5.6 IS II");
break;
+ case 94: id = g_strdup("Canon TS-E 17mm f/4L"); break;
+ case 95: id = g_strdup("Canon TS-E 24.0mm f/3.5 L II"); break;
+ case 124: id = g_strdup("Canon MP-E 65mm f/2.8 1-5x Macro
Photo"); break;
+ case 125: id = g_strdup("Canon TS-E 24mm f/3.5L"); break;
+ case 126: id = g_strdup("Canon TS-E 45mm f/2.8"); break;
+ case 127: id = g_strdup("Canon TS-E 90mm f/2.8"); break;
+ case 129: id = g_strdup("Canon EF 300mm f/2.8L"); break;
+ case 130: id = g_strdup("Canon EF 50mm f/1.0L"); break;
+ case 132: id = g_strdup("Canon EF 1200mm f/5.6L"); break;
+ case 134: id = g_strdup("Canon EF 600mm f/4L IS"); break;
+ case 135: id = g_strdup("Canon EF 200mm f/1.8L"); break;
+ case 136: id = g_strdup("Canon EF 300mm f/2.8L"); break;
+ case 138: id = g_strdup("Canon EF 28-80mm f/2.8-4L"); break;
+ case 139: id = g_strdup("Canon EF 400mm f/2.8L"); break;
+ case 140: id = g_strdup("Canon EF 500mm f/4.5L"); break;
+ case 141: id = g_strdup("Canon EF 500mm f/4.5L"); break;
+ case 142: id = g_strdup("Canon EF 300mm f/2.8L IS"); break;
+ case 143: id = g_strdup("Canon EF 500mm f/4L IS"); break;
+ case 144: id = g_strdup("Canon EF 35-135mm f/4-5.6 USM"); break;
+ case 145: id = g_strdup("Canon EF 100-300mm f/4.5-5.6 USM");
break;
+ case 146: id = g_strdup("Canon EF 70-210mm f/3.5-4.5 USM");
break;
+ case 147: id = g_strdup("Canon EF 35-135mm f/4-5.6 USM"); break;
+ case 148: id = g_strdup("Canon EF 28-80mm f/3.5-5.6 USM");
break;
+ case 149: id = g_strdup("Canon EF 100mm f/2 USM"); break;
+ case 151: id = g_strdup("Canon EF 200mm f/2.8L"); break;
+ case 154: id = g_strdup("Canon EF 20mm f/2.8 USM"); break;
+ case 155: id = g_strdup("Canon EF 85mm f/1.8 USM"); break;
+ case 162: id = g_strdup("Canon EF 200mm f/2.8L"); break;
+ case 163: id = g_strdup("Canon EF 300mm f/4L"); break;
+ case 164: id = g_strdup("Canon EF 400mm f/5.6L"); break;
+ case 165: id = g_strdup("Canon EF 70-200mm f/2.8 L"); break;
+ case 166: id = g_strdup("Canon EF 70-200mm f/2.8 L + 1.4x");
break;
+ case 167: id = g_strdup("Canon EF 70-200mm f/2.8 L + 2x");
break;
+ case 168: id = g_strdup("Canon EF 28mm f/1.8 USM"); break;
+ case 170: id = g_strdup("Canon EF 200mm f/2.8L II"); break;
+ case 171: id = g_strdup("Canon EF 300mm f/4L"); break;
+ case 172: id = g_strdup("Canon EF 400mm f/5.6L"); break;
+ case 175: id = g_strdup("Canon EF 400mm f/2.8L"); break;
+ case 176: id = g_strdup("Canon EF 24-85mm f/3.5-4.5 USM");
break;
+ case 177: id = g_strdup("Canon EF 300mm f/4L IS"); break;
+ case 178: id = g_strdup("Canon EF 28-135mm f/3.5-5.6 IS");
break;
+ case 179: id = g_strdup("Canon EF 24mm f/1.4L"); break;
+ case 180: id = g_strdup("Canon EF 35mm f/1.4L"); break;
+ case 181: id = g_strdup("Canon EF 100-400mm f/4.5-5.6L IS +
1.4x"); break;
+ case 182: id = g_strdup("Canon EF 100-400mm f/4.5-5.6L IS +
2x"); break;
+ case 183: id = g_strdup("Canon EF 100-400mm f/4.5-5.6L IS");
break;
+ case 184: id = g_strdup("Canon EF 400mm f/2.8L + 2x"); break;
+ case 185: id = g_strdup("Canon EF 600mm f/4L IS"); break;
+ case 186: id = g_strdup("Canon EF 70-200mm f/4L"); break;
+ case 187: id = g_strdup("Canon EF 70-200mm f/4L + 1.4x"); break;
+ case 188: id = g_strdup("Canon EF 70-200mm f/4L + 2x"); break;
+ case 189: id = g_strdup("Canon EF 70-200mm f/4L + 2.8x"); break;
+ case 190: id = g_strdup("Canon EF 100mm f/2.8 Macro"); break;
+ case 191: id = g_strdup("Canon EF 400mm f/4 DO IS"); break;
+ case 193: id = g_strdup("Canon EF 35-80mm f/4-5.6 USM"); break;
+ case 194: id = g_strdup("Canon EF 80-200mm f/4.5-5.6 USM");
break;
+ case 195: id = g_strdup("Canon EF 35-105mm f/4.5-5.6 USM");
break;
+ case 196: id = g_strdup("Canon EF 75-300mm f/4-5.6 USM"); break;
+ case 197: id = g_strdup("Canon EF 75-300mm f/4-5.6 IS USM");
break;
+ case 198: id = g_strdup("Canon EF 50mm f/1.4 USM"); break;
+ case 199: id = g_strdup("Canon EF 28-80mm f/3.5-5.6 USM");
break;
+ case 200: id = g_strdup("Canon EF 75-300mm f/4-5.6 USM"); break;
+ case 201: id = g_strdup("Canon EF 28-80mm f/3.5-5.6 USM");
break;
+ case 202: id = g_strdup("Canon EF 28-80mm f/3.5-5.6 USM IV");
break;
+ case 208: id = g_strdup("Canon EF 22-55mm f/4-5.6 USM"); break;
+ case 209: id = g_strdup("Canon EF 55-200mm f/4.5-5.6"); break;
+ case 210: id = g_strdup("Canon EF 28-90mm f/4-5.6 USM"); break;
+ case 211: id = g_strdup("Canon EF 28-200mm f/3.5-5.6 USM");
break;
+ case 212: id = g_strdup("Canon EF 28-105mm f/4-5.6 USM"); break;
+ case 213: id = g_strdup("Canon EF 90-300mm f/4.5-5.6 USM");
break;
+ case 214: id = g_strdup("Canon EF-S 18-55mm f/3.5-5.6 USM");
break;
+ case 215: id = g_strdup("Canon EF 55-200mm f/4.5-5.6 II USM");
break;
+ case 224: id = g_strdup("Canon EF 70-200mm f/2.8L IS"); break;
+ case 225: id = g_strdup("Canon EF 70-200mm f/2.8L IS + 1.4x");
break;
+ case 226: id = g_strdup("Canon EF 70-200mm f/2.8L IS + 2x");
break;
+ case 227: id = g_strdup("Canon EF 70-200mm f/2.8L IS + 2.8x");
break;
+ case 228: id = g_strdup("Canon EF 28-105mm f/3.5-4.5 USM");
break;
+ case 229: id = g_strdup("Canon EF 16-35mm f/2.8L"); break;
+ case 230: id = g_strdup("Canon EF 24-70mm f/2.8L"); break;
+ case 231: id = g_strdup("Canon EF 17-40mm f/4L"); break;
+ case 232: id = g_strdup("Canon EF 70-300mm f/4.5-5.6 DO IS
USM"); break;
+ case 233: id = g_strdup("Canon EF 28-300mm f/3.5-5.6L IS");
break;
+ case 234: id = g_strdup("Canon EF-S 17-85mm f4-5.6 IS USM");
break;
+ case 235: id = g_strdup("Canon EF-S 10-22mm f/3.5-4.5 USM");
break;
+ case 236: id = g_strdup("Canon EF-S 60mm f/2.8 Macro USM");
break;
+ case 237: id = g_strdup("Canon EF 24-105mm f/4L IS"); break;
+ case 238: id = g_strdup("Canon EF 70-300mm f/4-5.6 IS USM");
break;
+ case 239: id = g_strdup("Canon EF 85mm f/1.2L II"); break;
+ case 240: id = g_strdup("Canon EF-S 17-55mm f/2.8 IS USM");
break;
+ case 241: id = g_strdup("Canon EF 50mm f/1.2L"); break;
+ case 242: id = g_strdup("Canon EF 70-200mm f/4L IS"); break;
+ case 243: id = g_strdup("Canon EF 70-200mm f/4L IS + 1.4x");
break;
+ case 244: id = g_strdup("Canon EF 70-200mm f/4L IS + 2x");
break;
+ case 245: id = g_strdup("Canon EF 70-200mm f/4L IS + 2.8x");
break;
+ case 246: id = g_strdup("Canon EF 16-35mm f/2.8L II"); break;
+ case 247: id = g_strdup("Canon EF 14mm f/2.8L II USM"); break;
+ case 248: id = g_strdup("Canon EF 200mm f/2L IS"); break;
+ case 249: id = g_strdup("Canon EF 800mm f/5.6L IS"); break;
+ case 250: id = g_strdup("Canon EF 24 f/1.4L II"); break;
+ case 251: id = g_strdup("Canon EF 70-200mm f/2.8L IS II USM");
break;
+ case 254: id = g_strdup("Canon EF 100mm f/2.8L Macro IS USM");
break;
+ case 488: id = g_strdup("Canon EF-S 15-85mm f/3.5-5.6 IS USM");
break;
+ }
+ return id;
+}
+
+static RS_MAKE
+translate_maker_name(const gchar *maker)
+{
+ if (0 == g_strcmp0(maker, "canon"))
+ return MAKE_CANON;
+ if (0 == g_strcmp0(maker, "cikon"))
+ return MAKE_NIKON;
+ if (0 == g_strcmp0(maker, "casio"))
+ return MAKE_CASIO;
+ if (0 == g_strcmp0(maker, "olympus"))
+ return MAKE_OLYMPUS;
+ if (0 == g_strcmp0(maker, "kodak"))
+ return MAKE_KODAK;
+ if (0 == g_strcmp0(maker, "leica"))
+ return MAKE_LEICA;
+ if (0 == g_strcmp0(maker, "minolta"))
+ return MAKE_MINOLTA;
+ if (0 == g_strcmp0(maker, "hasselblad"))
+ return MAKE_HASSELBLAD;
+ if (0 == g_strcmp0(maker, "panasonic"))
+ return MAKE_PANASONIC;
+ if (0 == g_strcmp0(maker, "pentax"))
+ return MAKE_PENTAX;
+ if (0 == g_strcmp0(maker, "fujifilm"))
+ return MAKE_FUJIFILM;
+ if (0 == g_strcmp0(maker, "phase one"))
+ return MAKE_PHASEONE;
+ if (0 == g_strcmp0(maker, "ricoh"))
+ return MAKE_RICOH;
+ if (0 == g_strcmp0(maker, "sony"))
+ return MAKE_SONY;
+ g_debug("Warning: Could not identify camera in lens-fix DB: %s", maker);
+ return MAKE_UNKNOWN;
+}
+
+
gboolean
rs_lens_fix_init()
{
@@ -69,7 +252,8 @@
gint lens_id;
gdouble min_focal = 0.0, max_focal = 0.0;
- gdouble max_aperture = 0.0, min_aperture = 0.0;
+ gchar *camera_make = NULL;
+ gchar *lens_name = NULL;
gchar *filename = g_build_filename(PACKAGE_DATA_DIR, PACKAGE,
"lens_fix.xml", NULL);
@@ -99,26 +283,24 @@
lens_id = atoi((char *) xmlGetProp(cur,
BAD_CAST "id"));
min_focal = rs_atof((char *) xmlGetProp(cur,
BAD_CAST "min-focal"));
max_focal = rs_atof((char *) xmlGetProp(cur,
BAD_CAST "max-focal"));
+ camera_make = g_ascii_strdown((gchar *)
xmlGetProp(cur, BAD_CAST "make"), -1);
entry = cur->xmlChildrenNode;
while (entry)
{
- if (!xmlStrcmp(entry->name, BAD_CAST
"max-aperture"))
+ if (!xmlStrcmp(entry->name, BAD_CAST
"name"))
{
val = xmlNodeListGetString(doc,
entry->xmlChildrenNode, 1);
- max_aperture = rs_atof((char *)
val);
+ lens_name = g_strdup((gchar *)
val);
xmlFree(val);
}
- else if (!xmlStrcmp(entry->name,
BAD_CAST "min-aperture"))
- {
- val = xmlNodeListGetString(doc,
entry->xmlChildrenNode, 1);
- min_aperture = rs_atof((char *)
val);
- xmlFree(val);
- }
entry = entry->next;
}
-
- lens_fix_insert(lens_id, min_focal, max_focal,
max_aperture, min_aperture);
+ if (lens_name)
+ {
+ RS_MAKE camera_maker_id =
translate_maker_name(camera_make);
+ lens_fix_insert(camera_maker_id,
lens_id, min_focal, max_focal, lens_name);
+ }
}
cur = cur->next;
}
@@ -139,12 +321,21 @@
return FALSE;
}
- LensAperture *lens_aperture = lens_fix_find(meta->lens_id,
meta->lens_min_focal, meta->lens_max_focal);
- if (!lens_aperture)
- return FALSE;
+ if (meta->make == MAKE_CANON && meta->lens_id > 0)
+ {
+ gchar *lens = get_canon_name_from_lens_id(meta->lens_id);
+ if (lens)
+ {
+ meta->lens_identifier = lens;
+ return TRUE;
+ }
+ }
- meta->lens_max_aperture = lens_aperture->max;
- meta->lens_min_aperture = lens_aperture->min;
-
+ const gchar* lens_name = lens_fix_find(meta->make, meta->lens_id,
meta->lens_min_focal, meta->lens_max_focal);
+ if (lens_name)
+ {
+ meta->lens_identifier = g_strdup(lens_name);
+ return TRUE;
+ }
return TRUE;
}
Modified: trunk/librawstudio/rs-metadata.c
===================================================================
--- trunk/librawstudio/rs-metadata.c 2011-02-23 21:47:31 UTC (rev 3830)
+++ trunk/librawstudio/rs-metadata.c 2011-02-26 15:15:08 UTC (rev 3831)
@@ -425,6 +425,10 @@
setting the correct aperture values, so the lens only will show up
once in the lens db editor */
rs_lens_fix(meta);
+ /* If this generated a lens identifier return that! */
+ if (meta->lens_identifier)
+ return;
+
/* Build identifier string */
GString *identifier = g_string_new("");
if (meta->lens_id > 0)
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit