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

Reply via email to