Update domain name to kpe.io
[cl-photo.git] / cameras.lisp
index 745ea0a887905de6902560a9783cc3a9bdb450a5..9edbcd3615c20dba4789b6ad9143804007581a80 100644 (file)
 
 (eval-when (:compile-toplevel :load-toplevel :execute)
   (defun make-output-format (w h &key (units :inches))
-    (let ((name (format nil "~Dx~Din" w h)))
+    (let ((name (format nil "~Dx~D~A" w h
+                        (ecase units
+                          (:inches "in")
+                          (:mm "mm")
+                          (:cm "cm")
+                          (:m "m")
+                          (:feet "ft")))))
       (list :format (kmrcl:ensure-keyword name)
-            :output (cons (inches->mm w) (inches->mm h))
+            :output (cons (length->mm w units) (length->mm h units))
             :name name
             :nicks (list (kmrcl:ensure-keyword (format nil "~Dx~D" w h)))))))
 
     (:format :d60 :make "Canon" :pixels (3072 . 2048) :imager (22.7 . 15.1) :name "D60")
     (:format :10d :make "Canon" :pixels (3072 . 2048) :imager (22.7 . 15.1) :name "10D")
     (:format :20d :make "Canon" :pixels (3456 . 2304) :imager (22.5 . 15) :name "20D")
+    (:format :5d :make "Canon" :pixels (4368 . 2912) :imager (35.8 . 23.9) :name "5D")
     (:format :300d :make "Canon" :pixels (3072 . 2048) :imager (22.7 . 15.1) :name "300D")
     (:format :350d :make "Canon" :pixels (3456 . 2304) :imager (22.2 . 14.8) :name "350D")
     (:format :1d :make "Canon" :pixels (2464 . 1648) :imager (27 . 17.8) :name "1D")
     (:format :1dmkii :make "Canon" :pixels (3504 . 2336) :imager (28.7 . 19.1)
      :name "1D Mark II" :nicks (:1d2 :1dii :1dmkii))
+    (:format :1dmkiii :make "Canon" :pixels (3888 . 2592) :imager (28.1 . 18.7)
+     :name "1D Mark III" :nicks (:1d3 :1diii :1dmkiii))
     (:format :1ds :make "Canon" :pixels (4064 . 3328) :imager (36 . 24) :name "1Ds")
     (:format :1dsmkii :make "Canon" :pixels (4992 . 3328) :imager (36 . 24)
     :name "1Ds Mark II" :nicks (:1ds2 :1dsii))
-    
+    (:format :1dsmkiii :make "Canon" :pixels (5616 . 3744) :imager (36 . 24)
+    :name "1Ds Mark III" :nicks (:1ds3 :1dsiii))
+    (:format :g7 :make "Canon" :pixels (3648 . 2736) :imager (7.2 . 5.3)
+             :name "PowerShot G7")
     (:format :ndigital :make "Contax" :pixels (3040 . 2008) :imager (36 . 24)
      :name "N Digital")
 
     (:format :s1pro :make "FujiFilm" :pixels (3040 . 2016) :imager (23 . 15.5)
-     :name "FinePix S1 Pro") 
+     :name "FinePix S1 Pro")
     (:format :s2pro :make "FujiFilm" :pixels (4256 . 2848) :imager (23 . 15.5)
      :name "FinePix S2 Pro")
     (:format :s3pro :make "FujiFilm" :pixels (4256 . 2848) :imager (23 . 15.5)
     (:format :d1 :make "Nikon" :pixels (2000 . 1312) :imager (23.7 . 15.6) :name "D1")
     (:format :d1x :make "Nikon" :pixels (4028 . 1324) :imager (23.7 . 15.6) :name "D1X")
     (:format :d100 :make "Nikon" :pixels (3037 . 2024) :imager (23.7 . 15.6) :name "D100")
+    (:format :d200 :make "Nikon" :pixels (3872 . 2592) :imager (23.6 . 15.8) :name "D200")
+    (:format :d300 :make "Nikon" :pixels (4288 . 2848) :imager (23.6 . 15.8) :name "D300")
     (:format :d50 :make "Nikon" :pixels (3008 . 2000) :imager (23.7 . 15.6) :name "D50")
     (:format :d70 :make "Nikon" :pixels (3008 . 2000) :imager (23.7 . 15.6) :name "D70")
     (:format :d70s :make "Nikon" :pixels (3008 . 2000) :imager (23.7 . 15.6) :name "D70s")
     (:format :d2h :make "Nikon" :pixels (2464 . 1632) :imager (23.3 . 15.5) :name "D2H")
     (:format :d2hs :make "Nikon" :pixels (2464 . 1632) :imager (23.3 . 15.5) :name "D2Hs")
     (:format :d2x :make "Nikon" :pixels (4288 . 2848) :imager (23.7 . 15.6) :name "D2X")
+    (:format :d3 :make "Nikon" :pixels (4256 . 2832) :imager (36 . 23.9) :name "D3")
 
+    (:format :cp5900 :make "Nikon" :pixels (2592 . 1944) :imager (7.18 . 5.32) :name "Coolpix 5900")
     (:format :cp7900 :make "Nikon" :pixels (3072 . 2304) :imager (7.18 . 5.32) :name "Coolpix 7900")
+    (:format :cp8800 :make "Nikon" :pixels (3264 . 2448) :imager (8.8 . 6.6) :name "Coolpix 8800")
 
     (:format :*ist-d :make "Pentax" :pixels (3008 . 2008) :imager (36 . 24)
      :name "*ist D")
     (:format :sd10 :make "Sigma" :pixels (2268 . 1512) :imager (20.7 . 13.8)
      :name "SD10")
 
+    (:format :1/1.8in :imager (7.18 . 5.32) :name "1/1.8\"")
+    (:format :dx :imager (24 . 16) :name "DX")
     (:format :35mm :imager (36 . 24) :name "35mm")
-    
+
     (:format :6x4.5cm :imager (60 . 45) :name "6x4.5cm" :nicks (:\645))
     (:format :6x6cm :imager (60 . 60) :name "6x6cm" :nicks (:6x6))
     (:format :6x7cm :imager (60 . 70) :name "6x7cm" :nicks (:6x7))
     (:format :6x9cm :imager (60 . 90) :name "6x9cm" :nicks (:6x9))
     (:format :6x12cm :imager (60 . 120) :name "6x12cm" :nicks (:6x12))
-    
+
     #.(make-output-format 4 5)
     #.(make-output-format 5 7)
     #.(make-output-format 8 10)
     ))
 
 (defun sort-formats (formats)
-  (sort formats 
-       (lambda (a b)
-         (block nil
-           (cond
-             ((and (null (getf a :make)) (getf b :make))
-              (return nil))
-             ((and (getf a :make) (null (getf b :make)))
-              (return t))
-             ((string-lessp (getf a :make) (getf b :make))
-              (return t))
-             ((string-greaterp (getf a :make) (getf b :make))
-              (return nil)))
-           (when (and (getf a :name) (getf b :name))
-             (cond
-               ((string-lessp (getf a :name) (getf b :name))
-                (return t))
-               ((string-greaterp (getf a :name) (getf b :name))
-                (return nil))))))))
+  (sort formats
+        (lambda (a b)
+          (block nil
+            (cond
+              ((and (null (getf a :make)) (getf b :make))
+               (return nil))
+              ((and (getf a :make) (null (getf b :make)))
+               (return t))
+              ((string-lessp (getf a :make) (getf b :make))
+               (return t))
+              ((string-greaterp (getf a :make) (getf b :make))
+               (return nil)))
+            (when (and (getf a :name) (getf b :name))
+              (cond
+                ((string-lessp (getf a :name) (getf b :name))
+                 (return t))
+                ((string-greaterp (getf a :name) (getf b :name))
+                 (return nil))))))))
 
 (defvar *digital-cameras*
   (sort-formats (loop for format in +format-db+
-                     when (getf format :pixels)
-                     collect format)))
+                      when (getf format :pixels)
+                      collect format)))
 
 (defvar *cameras*
   (sort-formats (loop for format in +format-db+
-                     when (getf format :imager)
-                     collect format)))
-  
+                      when (getf format :imager)
+                      collect format)))
+
 
 (defun format-match-p (format-spec format)
   (let ((key (ensure-keyword format-spec)))
     (when (or (eql key (getf format :format))
-             (member key (getf format :nicks)))
+              (member key (getf format :nicks)))
       t)))
 
 (defun find-format (format-spec)
   (find format-spec +format-db+ :test 'format-match-p))
 
 (defun pixel-dimensions (sensor-spec &key (format :35mm))
-  "Returns the number of pixels for a format. 
+  "Returns the number of pixels for a format.
 CAMERA-SPEC is either a keyword designating the camera or
 the number of megapixels of the sensor.
 FORMAT should be defined if the CAMERA-SPEC is the number of megapixels
@@ -182,13 +201,13 @@ so the proper aspect ratio is used."
   "Returns the imager dimensions in mm of a FORMAT."
   (getf (find-format format-spec) :imager))
 
-(defun pixel-size (format-spec) 
+(defun pixel-size (format-spec)
   "Return pixel size in micrometers."
   (let ((pixel-dim (pixel-dimensions format-spec))
-       (imager-dim (imager-dimensions format-spec)))
+        (imager-dim (imager-dimensions format-spec)))
     (when (and pixel-dim imager-dim)
       (values (* 1000 (/ (car imager-dim) (car pixel-dim)))
-             (* 1000 (/ (cdr imager-dim) (cdr pixel-dim)))))))
+              (* 1000 (/ (cdr imager-dim) (cdr pixel-dim)))))))
 
 (defun output-dimensions (format-spec)
   "Returns the output dimensions in mm of a FORMAT."