lensfun  0.2.7.0
lensfun.h
Go to the documentation of this file.
1 /*
2  LensFun - a library for maintaining a database of photographical lenses,
3  and providing the means to correct some of the typical lens distortions.
4  Copyright (C) 2007 by Andrew Zabolotny
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Library General Public
8  License as published by the Free Software Foundation; either
9  version 2 of the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Library General Public License for more details.
15 
16  You should have received a copy of the GNU Library General Public
17  License along with this library; if not, write to the Free
18  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20 
21 #ifndef __LENSFUN_H__
22 #define __LENSFUN_H__
23 
24 #include <stddef.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
29 # define C_TYPEDEF(t,c)
30 #else
31 # define C_TYPEDEF(t,c) typedef t c c;
32 #endif
33 
39 /*----------------------------------------------------------------------------*/
40 
48 #define LF_VERSION_MAJOR 0
50 #define LF_VERSION_MINOR 2
52 #define LF_VERSION_MICRO 7
54 #define LF_VERSION_BUGFIX 0
56 #define LF_VERSION ((LF_VERSION_MAJOR << 24) | (LF_VERSION_MINOR << 16) | (LF_VERSION_MICRO << 8) | LF_VERSION_BUGFIX)
57 
58 #if defined CONF_LENSFUN_STATIC
60 # define LF_EXPORT
61 #else
62 # ifdef CONF_SYMBOL_VISIBILITY
63 # if defined PLATFORM_WINDOWS
64 # define LF_EXPORT __declspec(dllexport)
65 # elif defined CONF_COMPILER_GCC
66 # define LF_EXPORT __attribute__((visibility("default")))
67 # else
68 # error "I don't know how to change symbol visibility for your compiler"
69 # endif
70 # else
71 # if defined PLATFORM_WINDOWS || defined _MSC_VER
72 # define LF_EXPORT __declspec(dllimport)
73 # else
74 # define LF_EXPORT
75 # endif
76 # endif
77 #endif
78 
80 #define cbool int
81 
90 typedef char *lfMLstr;
91 
93 enum lfError
94 {
99 };
100 
101 C_TYPEDEF (enum, lfError)
102 
103 
111 LF_EXPORT void lf_free (void *data);
112 
119 LF_EXPORT const char *lf_mlstr_get (const lfMLstr str);
120 
136 LF_EXPORT lfMLstr lf_mlstr_add (lfMLstr str, const char *lang, const char *trstr);
137 
146 
149 /*----------------------------------------------------------------------------*/
150 
167 {
171  char **Compat;
172 
173 #ifdef __cplusplus
178 
182  lfMount &operator = (const lfMount &other);
183 
188 
197  void SetName (const char *val, const char *lang = NULL);
198 
204  void AddCompat (const char *val);
205 
211  bool Check ();
212 #endif
213 };
214 
215 C_TYPEDEF (struct, lfMount)
216 
217 
225 
235 
245 LF_EXPORT void lf_mount_copy (lfMount *dest, const lfMount *source);
246 
249 
252 /*----------------------------------------------------------------------------*/
253 
273 {
281  char *Mount;
283  float CropFactor;
285  int Score;
286 
287 #ifdef __cplusplus
292 
296  lfCamera (const lfCamera &other);
297 
302 
306  lfCamera &operator = (const lfCamera &other);
307 
316  void SetMaker (const char *val, const char *lang = NULL);
317 
326  void SetModel (const char *val, const char *lang = NULL);
327 
336  void SetVariant (const char *val, const char *lang = NULL);
337 
343  void SetMount (const char *val);
344 
350  bool Check ();
351 #endif
352 };
353 
354 C_TYPEDEF (struct, lfCamera)
355 
356 
364 
374 
384 LF_EXPORT void lf_camera_copy (lfCamera *dest, const lfCamera *source);
385 
388 
391 /*----------------------------------------------------------------------------*/
392 
409 {
434 };
435 
437 
438 
444 {
446  enum lfDistortionModel Model;
448  float Focal;
450  float Terms [3];
451 };
452 
454 
455 
465 {
475 
483 };
484 
485 C_TYPEDEF (enum, lfTCAModel)
486 
487 
494 {
496  enum lfTCAModel Model;
498  float Focal;
500  float Terms [6];
501 };
502 
503 C_TYPEDEF (struct, lfLensCalibTCA)
504 
505 
517 {
527 };
528 
530 
531 
539 {
541  enum lfVignettingModel Model;
543  float Focal;
545  float Aperture;
547  float Distance;
549  float Terms [3];
550 };
551 
553 
554 
558 {
565 };
566 
567 C_TYPEDEF(enum, lfCropMode)
568 
569 
573 {
575  float Focal;
577  enum lfCropMode CropMode;
586  float Crop [4];
587 };
588 
589 C_TYPEDEF (struct, lfLensCalibCrop)
590 
591 
595 {
597  float Focal;
604  float FieldOfView;
605 };
606 
607 C_TYPEDEF (struct, lfLensCalibFov)
608 
609 
613 {
615  const char *Name;
617  float Min;
619  float Max;
621  float Default;
622 };
623 
624 C_TYPEDEF (struct, lfParameter)
625 
626 
630 {
655 };
656 
657 C_TYPEDEF (enum, lfLensType)
658 
659 
670 {
676  float MinFocal;
678  float MaxFocal;
680  float MinAperture;
682  float MaxAperture;
684  char **Mounts;
694  float CenterX;
696  float CenterY;
698  float RedCCI;
700  float GreenCCI;
702  float BlueCCI;
704  float CropFactor;
718  int Score;
719 
720 #ifdef __cplusplus
724  lfLens ();
725 
729  lfLens (const lfLens &other);
730 
735 
739  lfLens &operator = (const lfLens &other);
740 
749  void SetMaker (const char *val, const char *lang = NULL);
750 
759  void SetModel (const char *val, const char *lang = NULL);
760 
767  void AddMount (const char *val);
768 
777 
783  bool RemoveCalibDistortion (int idx);
784 
792  void AddCalibTCA (const lfLensCalibTCA *tcac);
793 
799  bool RemoveCalibTCA (int idx);
800 
809 
815  bool RemoveCalibVignetting (int idx);
816 
824  void AddCalibCrop (const lfLensCalibCrop *cc);
825 
831  bool RemoveCalibCrop (int idx);
832 
840  void AddCalibFov (const lfLensCalibFov *cf);
841 
847  bool RemoveCalibFov (int idx);
848 
857 
863  bool Check ();
864 
880  static const char *GetDistortionModelDesc (
881  lfDistortionModel model, const char **details, const lfParameter ***params);
897  static const char *GetTCAModelDesc (
898  lfTCAModel model, const char **details, const lfParameter ***params);
899 
915  static const char *GetVignettingModelDesc (
916  lfVignettingModel model, const char **details, const lfParameter ***params);
917 
933  static const char *GetCropDesc (
934  lfCropMode mode, const char **details, const lfParameter ***params);
935 
947  static const char *GetLensTypeDesc (lfLensType type, const char **details);
948 
956  bool InterpolateDistortion (float focal, lfLensCalibDistortion &res) const;
957 
965  bool InterpolateTCA (float focal, lfLensCalibTCA &res) const;
966 
980  float focal, float aperture, float distance, lfLensCalibVignetting &res) const;
981 
989  bool InterpolateCrop (float focal, lfLensCalibCrop &res) const;
990 
998  bool InterpolateFov (float focal, lfLensCalibFov &res) const;
999 #endif
1000 };
1001 
1002 C_TYPEDEF (struct, lfLens)
1003 
1004 
1012 
1022 
1032 LF_EXPORT void lf_lens_copy (lfLens *dest, const lfLens *source);
1033 
1036 
1039 
1042  enum lfDistortionModel model, const char **details, const lfParameter ***params);
1043 
1046  enum lfTCAModel model, const char **details, const lfParameter ***params);
1047 
1050  enum lfVignettingModel model, const char **details, const lfParameter ***params);
1051 
1054  enum lfCropMode mode, const char **details, const lfParameter ***params);
1055 
1058  enum lfLensType type, const char **details);
1059 
1062  lfLensCalibDistortion *res);
1063 
1066 
1068 LF_EXPORT cbool lf_lens_interpolate_vignetting (const lfLens *lens, float focal, float aperture,
1069  float distance, lfLensCalibVignetting *res);
1070 
1073  lfLensCalibCrop *res);
1074 
1076 LF_EXPORT cbool lf_lens_interpolate_fov (const lfLens *lens, float focal,
1077  lfLensCalibFov *res);
1078 
1081 
1084 
1087 
1090 
1093 
1096 
1099 
1102 
1105 
1108 
1111 /*----------------------------------------------------------------------------*/
1112 
1122 enum
1123 {
1129  LF_SEARCH_LOOSE = 1
1130 };
1131 
1155 {
1158 
1159 #ifdef __cplusplus
1163  static lfDatabase *Create ();
1164 
1168  void Destroy ();
1169 
1179 
1191  lfError Load (const char *filename);
1192 
1206  lfError Load (const char *errcontext, const char *data, size_t data_size);
1207 
1215  lfError Save (const char *filename) const;
1216 
1230  lfError Save (const char *filename,
1231  const lfMount *const *mounts,
1232  const lfCamera *const *cameras,
1233  const lfLens *const *lenses) const;
1234 
1247  static char *Save (const lfMount *const *mounts,
1248  const lfCamera *const *cameras,
1249  const lfLens *const *lenses);
1250 
1274  const lfCamera **FindCameras (const char *maker, const char *model) const;
1275 
1295  const lfCamera **FindCamerasExt (const char *maker, const char *model,
1296  int sflags = 0) const;
1297 
1305  const lfCamera *const *GetCameras () const;
1306 
1343  const lfLens **FindLenses (const lfCamera *camera, const char *maker,
1344  const char *model, int sflags = 0) const;
1345 
1363  const lfLens **FindLenses (const lfLens *lens, int sflags = 0) const;
1364 
1372  const lfLens *const *GetLenses () const;
1373 
1381  const lfMount *FindMount (const char *mount) const;
1382 
1390  const char *MountName (const char *mount) const;
1391 
1399  const lfMount *const *GetMounts () const;
1400 
1401 protected:
1402  /* Prevent user from creating and destroying such objects */
1403  lfDatabase () {}
1404  ~lfDatabase () {}
1405 #endif
1406 };
1407 
1408 C_TYPEDEF (struct, lfDatabase)
1409 
1410 
1420 
1430 
1433 
1435 LF_EXPORT lfError lf_db_load_file (lfDatabase *db, const char *filename);
1436 
1438 LF_EXPORT lfError lf_db_load_data (lfDatabase *db, const char *errcontext,
1439  const char *data, size_t data_size);
1440 
1442 LF_EXPORT lfError lf_db_save_all (const lfDatabase *db, const char *filename);
1443 
1445 LF_EXPORT lfError lf_db_save_file (const lfDatabase *db, const char *filename,
1446  const lfMount *const *mounts,
1447  const lfCamera *const *cameras,
1448  const lfLens *const *lenses);
1449 
1451 LF_EXPORT char *lf_db_save (const lfMount *const *mounts,
1452  const lfCamera *const *cameras,
1453  const lfLens *const *lenses);
1454 
1457  const lfDatabase *db, const char *maker, const char *model);
1458 
1461  const lfDatabase *db, const char *maker, const char *model, int sflags);
1462 
1465 
1468  const lfDatabase *db, const lfCamera *camera, const char *maker,
1469  const char *lens, int sflags);
1470 
1473  const lfDatabase *db, const lfLens *lens, int sflags);
1474 
1476 LF_EXPORT const lfLens *const *lf_db_get_lenses (const lfDatabase *db);
1477 
1479 LF_EXPORT const lfMount *lf_db_find_mount (const lfDatabase *db, const char *mount);
1480 
1482 LF_EXPORT const char *lf_db_mount_name (const lfDatabase *db, const char *mount);
1483 
1485 LF_EXPORT const lfMount *const *lf_db_get_mounts (const lfDatabase *db);
1486 
1489 /*----------------------------------------------------------------------------*/
1490 
1499 enum
1500 {
1502  LF_MODIFY_TCA = 0x00000001,
1504  LF_MODIFY_VIGNETTING = 0x00000002,
1506  LF_MODIFY_CCI = 0x00000004,
1508  LF_MODIFY_DISTORTION = 0x00000008,
1510  LF_MODIFY_GEOMETRY = 0x00000010,
1512  LF_MODIFY_SCALE = 0x00000020,
1514  LF_MODIFY_ALL = ~0
1515 };
1516 
1519 {
1529  LF_PF_F64
1530 };
1531 
1532 C_TYPEDEF (enum, lfPixelFormat)
1533 
1534 
1536 {
1558  LF_CR_BLUE
1559 };
1560 
1561 C_TYPEDEF (enum, lfComponentRole)
1562 
1563 
1564 #define LF_CR_1(a) (LF_CR_ ## a)
1566 #define LF_CR_2(a,b) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4))
1568 #define LF_CR_3(a,b,c) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1569  ((LF_CR_ ## c) << 8))
1571 #define LF_CR_4(a,b,c,d) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1572  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12))
1574 #define LF_CR_5(a,b,c,d,e) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1575  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
1576  ((LF_CR_ ## e) << 16))
1578 #define LF_CR_6(a,b,c,d,e,f) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1579  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
1580  ((LF_CR_ ## e) << 16) | ((LF_CR_ ## f) << 20))
1582 #define LF_CR_7(a,b,c,d,e,f,g) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1583  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
1584  ((LF_CR_ ## e) << 16) | ((LF_CR_ ## f) << 20) | \
1585  ((LF_CR_ ## g) << 24))
1587 #define LF_CR_8(a,b,c,d,e,f,g,h) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1588  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
1589  ((LF_CR_ ## e) << 16) | ((LF_CR_ ## f) << 20) | \
1590  ((LF_CR_ ## g) << 24) | ((LF_CR_ ## h) << 28))
1591 
1606 typedef void (*lfSubpixelCoordFunc) (void *data, float *iocoord, int count);
1607 
1631 typedef void (*lfModifyColorFunc) (void *data, float x, float y,
1632  void *pixels, int comp_role, int count);
1633 
1645 typedef void (*lfModifyCoordFunc) (void *data, float *iocoord, int count);
1646 
1707 {
1708 #ifdef __cplusplus
1729  static lfModifier *Create (const lfLens *lens, float crop, int width, int height);
1730 
1772  const lfLens *lens, lfPixelFormat format, float focal, float aperture,
1773  float distance, float scale, lfLensType targeom, int flags, bool reverse);
1774 
1779  void Destroy ();
1780 
1797  void AddCoordCallback (lfModifyCoordFunc callback, int priority,
1798  void *data, size_t data_size);
1799 
1817  void AddSubpixelCallback (lfSubpixelCoordFunc callback, int priority,
1818  void *data, size_t data_size);
1819 
1836  void AddColorCallback (lfModifyColorFunc callback, int priority,
1837  void *data, size_t data_size);
1838 
1852  bool AddSubpixelCallbackTCA (lfLensCalibTCA &model, bool reverse = false);
1853 
1869  bool reverse = false);
1870 
1885  bool AddColorCallbackCCI (const lfLens *lens, lfPixelFormat format,
1886  bool reverse = false);
1887 
1900  bool AddCoordCallbackDistortion (lfLensCalibDistortion &model, bool reverse = false);
1901 
1914  bool AddCoordCallbackGeometry (lfLensType from, lfLensType to, float focal);
1915 
1931  bool AddCoordCallbackScale (float scale, bool reverse = false);
1932 
1945  float GetAutoScale (bool reverse);
1946 
1975  bool ApplySubpixelDistortion (float xu, float yu, int width, int height,
1976  float *res) const;
1977 
2006  bool ApplyColorModification (void *pixels, float x, float y, int width, int height,
2007  int comp_role, int row_stride) const;
2008 
2035  bool ApplyGeometryDistortion (float xu, float yu, int width, int height,
2036  float *res) const;
2037 
2065  bool ApplySubpixelGeometryDistortion (float xu, float yu, int width, int height,
2066  float *res) const;
2067 
2068 protected:
2069  /* Prevent user from creating and destroying such objects */
2070  lfModifier () {}
2071  ~lfModifier () {}
2072 #elif defined _MSC_VER
2073  /* Sucks, like always */
2074  void *dummy;
2075 #endif
2076 };
2077 
2078 C_TYPEDEF (struct, lfModifier)
2079 
2080 
2082  const lfLens *lens, float crop, int width, int height);
2083 
2086 
2089  lfModifier *modifier, const lfLens *lens, lfPixelFormat format,
2090  float focal, float aperture, float distance, float scale,
2091  lfLensType targeom, int flags, cbool reverse);
2092 
2095  lfModifier *modifier, lfModifyCoordFunc callback, int priority,
2096  void *data, size_t data_size);
2097 
2100  lfModifier *modifier, lfSubpixelCoordFunc callback, int priority,
2101  void *data, size_t data_size);
2102 
2105  lfModifier *modifier, lfModifyColorFunc callback, int priority,
2106  void *data, size_t data_size);
2107 
2110  lfModifier *modifier, lfLensCalibTCA *model, cbool reverse);
2111 
2114  lfModifier *modifier, lfLensCalibVignetting *model,
2115  lfPixelFormat format, cbool reverse);
2116 
2119  lfModifier *modifier, const lfLens *lens,
2120  lfPixelFormat format, cbool reverse);
2121 
2124  lfModifier *modifier, lfLensCalibDistortion *model, cbool reverse);
2125 
2128  lfModifier *modifier, lfLensType from, lfLensType to, float focal);
2129 
2132  lfModifier *modifier, float scale, cbool reverse);
2133 
2136  lfModifier *modifier, cbool reverse);
2137 
2140  lfModifier *modifier, float xu, float yu, int width, int height, float *res);
2141 
2144  lfModifier *modifier, void *pixels, float x, float y, int width, int height,
2145  int comp_role, int row_stride);
2146 
2149  lfModifier *modifier, float xu, float yu, int width, int height, float *res);
2150 
2153  lfModifier *modifier, float xu, float yu, int width, int height, float *res);
2154 
2157 #undef cbool
2158 
2159 #ifdef __cplusplus
2160 }
2161 #endif
2162 
2163 #endif /* __LENSFUN_H__ */
lfMLstr lf_mlstr_dup(const lfMLstr str)
Create a complete copy of a multi-language string.
char * lfMLstr
The storage of "multi-language" strings is simple yet flexible, handy and effective.
Definition: lensfun.h:90
void lf_free(void *data)
The basics of memory allocation: never free objects allocated by the library yourselves,...
const char * lf_mlstr_get(const lfMLstr str)
Get a string corresponding to current locale from a multi-language string.
#define LF_EXPORT
This macro expands to an appropiate symbol visibility declaration.
Definition: lensfun.h:60
#define cbool
C-compatible bool type; don't bother to define Yet Another Boolean Type.
Definition: lensfun.h:80
lfMLstr lf_mlstr_add(lfMLstr str, const char *lang, const char *trstr)
Add a new translated string to a multi-language string.
lfError
liblensdb error codes: negative codes are -errno, positive are here
Definition: lensfun.h:94
@ LF_NO_ERROR
No error occured.
Definition: lensfun.h:96
@ LF_WRONG_FORMAT
Wrong XML data format.
Definition: lensfun.h:98
void lf_camera_copy(lfCamera *dest, const lfCamera *source)
Copy the data from one lfCamera structure into another.
cbool lf_camera_check(lfCamera *camera)
lfCamera * lf_camera_new()
Create a new camera object.
void lf_camera_destroy(lfCamera *camera)
Destroy a lfCamera object.
void(* lfSubpixelCoordFunc)(void *data, float *iocoord, int count)
A callback function which modifies the separate coordinates for all color components for every pixel ...
Definition: lensfun.h:1606
cbool lf_modifier_apply_subpixel_distortion(lfModifier *modifier, float xu, float yu, int width, int height, float *res)
void lf_modifier_add_coord_callback(lfModifier *modifier, lfModifyCoordFunc callback, int priority, void *data, size_t data_size)
void lf_modifier_destroy(lfModifier *modifier)
cbool lf_modifier_add_coord_callback_scale(lfModifier *modifier, float scale, cbool reverse)
cbool lf_modifier_apply_color_modification(lfModifier *modifier, void *pixels, float x, float y, int width, int height, int comp_role, int row_stride)
void lf_modifier_add_subpixel_callback(lfModifier *modifier, lfSubpixelCoordFunc callback, int priority, void *data, size_t data_size)
cbool lf_modifier_add_color_callback_vignetting(lfModifier *modifier, lfLensCalibVignetting *model, lfPixelFormat format, cbool reverse)
float lf_modifier_get_auto_scale(lfModifier *modifier, cbool reverse)
cbool lf_modifier_add_color_callback_CCI(lfModifier *modifier, const lfLens *lens, lfPixelFormat format, cbool reverse)
void(* lfModifyCoordFunc)(void *data, float *iocoord, int count)
A callback function which modifies the coordinates of a strip of pixels.
Definition: lensfun.h:1645
lfModifier * lf_modifier_new(const lfLens *lens, float crop, int width, int height)
cbool lf_modifier_apply_geometry_distortion(lfModifier *modifier, float xu, float yu, int width, int height, float *res)
void lf_modifier_add_color_callback(lfModifier *modifier, lfModifyColorFunc callback, int priority, void *data, size_t data_size)
cbool lf_modifier_apply_subpixel_geometry_distortion(lfModifier *modifier, float xu, float yu, int width, int height, float *res)
cbool lf_modifier_add_coord_callback_distortion(lfModifier *modifier, lfLensCalibDistortion *model, cbool reverse)
int lf_modifier_initialize(lfModifier *modifier, const lfLens *lens, lfPixelFormat format, float focal, float aperture, float distance, float scale, lfLensType targeom, int flags, cbool reverse)
cbool lf_modifier_add_subpixel_callback_TCA(lfModifier *modifier, lfLensCalibTCA *model, cbool reverse)
void(* lfModifyColorFunc)(void *data, float x, float y, void *pixels, int comp_role, int count)
A callback function which modifies the colors of a strip of pixels This kind of callbacks are used in...
Definition: lensfun.h:1631
cbool lf_modifier_add_coord_callback_geometry(lfModifier *modifier, lfLensType from, lfLensType to, float focal)
lfComponentRole
These constants define the role of every pixel component, four bits each.
Definition: lensfun.h:1536
lfPixelFormat
A list of pixel formats supported by internal colour callbacks.
Definition: lensfun.h:1519
@ LF_MODIFY_TCA
Correct (or apply) lens transversal chromatic aberrations.
Definition: lensfun.h:1502
@ LF_MODIFY_CCI
Correct (or apply) lens color contribution index.
Definition: lensfun.h:1506
@ LF_MODIFY_VIGNETTING
Correct (or apply) lens vignetting.
Definition: lensfun.h:1504
@ LF_MODIFY_GEOMETRY
Convert image geometry.
Definition: lensfun.h:1510
@ LF_MODIFY_DISTORTION
Correct (or apply) lens distortion.
Definition: lensfun.h:1508
@ LF_MODIFY_SCALE
Additional resize of image.
Definition: lensfun.h:1512
@ LF_MODIFY_ALL
Apply all possible corrections.
Definition: lensfun.h:1514
@ LF_CR_NEXT
This value tells that what follows applies to next pixel.
Definition: lensfun.h:1548
@ LF_CR_END
This marks the end of the role list.
Definition: lensfun.h:1541
@ LF_CR_INTENSITY
This is the pixel intensity (grayscale)
Definition: lensfun.h:1552
@ LF_CR_RED
This is the Red pixel component.
Definition: lensfun.h:1554
@ LF_CR_UNKNOWN
This component has an unknown/doesn't matter role.
Definition: lensfun.h:1550
@ LF_CR_GREEN
This is the Green pixel component.
Definition: lensfun.h:1556
@ LF_CR_BLUE
This is the Blue pixel component.
Definition: lensfun.h:1558
@ LF_PF_U16
Unsigned 16-bit R,G,B.
Definition: lensfun.h:1523
@ LF_PF_F64
64-bit floating-point R,G,B
Definition: lensfun.h:1529
@ LF_PF_U8
Unsigned 8-bit R,G,B.
Definition: lensfun.h:1521
@ LF_PF_U32
Unsigned 32-bit R,G,B.
Definition: lensfun.h:1525
@ LF_PF_F32
32-bit floating-point R,G,B
Definition: lensfun.h:1527
const lfCamera ** lf_db_find_cameras(const lfDatabase *db, const char *maker, const char *model)
const lfLens *const * lf_db_get_lenses(const lfDatabase *db)
const lfLens ** lf_db_find_lenses_hd(const lfDatabase *db, const lfCamera *camera, const char *maker, const char *lens, int sflags)
lfError lf_db_load_data(lfDatabase *db, const char *errcontext, const char *data, size_t data_size)
lfError lf_db_load(lfDatabase *db)
const lfMount *const * lf_db_get_mounts(const lfDatabase *db)
lfError lf_db_save_all(const lfDatabase *db, const char *filename)
lfError lf_db_save_file(const lfDatabase *db, const char *filename, const lfMount *const *mounts, const lfCamera *const *cameras, const lfLens *const *lenses)
const lfCamera *const * lf_db_get_cameras(const lfDatabase *db)
const lfLens ** lf_db_find_lenses(const lfDatabase *db, const lfLens *lens, int sflags)
const char * lf_db_mount_name(const lfDatabase *db, const char *mount)
const lfMount * lf_db_find_mount(const lfDatabase *db, const char *mount)
const lfCamera ** lf_db_find_cameras_ext(const lfDatabase *db, const char *maker, const char *model, int sflags)
lfError lf_db_load_file(lfDatabase *db, const char *filename)
char * lf_db_save(const lfMount *const *mounts, const lfCamera *const *cameras, const lfLens *const *lenses)
void lf_db_destroy(lfDatabase *db)
Destroy the database object.
lfDatabase * lf_db_new(void)
Create a new empty database object.
@ LF_SEARCH_LOOSE
This flag selects a looser search algorithm resulting in more results (still sorted by score).
Definition: lensfun.h:1129
cbool lf_lens_interpolate_vignetting(const lfLens *lens, float focal, float aperture, float distance, lfLensCalibVignetting *res)
void lf_lens_add_calib_crop(lfLens *lens, const lfLensCalibCrop *cc)
lfTCAModel
The lensdb library supports several models for lens lateral chromatic aberrations (also called transv...
Definition: lensfun.h:465
void lf_lens_add_calib_vignetting(lfLens *lens, const lfLensCalibVignetting *vc)
cbool lf_lens_check(lfLens *lens)
cbool lf_lens_remove_calib_crop(lfLens *lens, int idx)
cbool lf_lens_interpolate_crop(const lfLens *lens, float focal, lfLensCalibCrop *res)
void lf_lens_add_calib_fov(lfLens *lens, const lfLensCalibFov *cf)
void lf_lens_add_calib_distortion(lfLens *lens, const lfLensCalibDistortion *dc)
void lf_lens_destroy(lfLens *lens)
Destroy a lfLens object.
cbool lf_lens_remove_calib_vignetting(lfLens *lens, int idx)
lfVignettingModel
The lensdb library supports several models for lens vignetting correction.
Definition: lensfun.h:517
cbool lf_lens_remove_calib_tca(lfLens *lens, int idx)
const char * lf_get_crop_desc(enum lfCropMode mode, const char **details, const lfParameter ***params)
void lf_lens_guess_parameters(lfLens *lens)
cbool lf_lens_interpolate_distortion(const lfLens *lens, float focal, lfLensCalibDistortion *res)
cbool lf_lens_interpolate_tca(const lfLens *lens, float focal, lfLensCalibTCA *res)
const char * lf_get_lens_type_desc(enum lfLensType type, const char **details)
lfCropMode
Different crop modes.
Definition: lensfun.h:558
lfLens * lf_lens_new()
Create a new lens object.
const char * lf_get_tca_model_desc(enum lfTCAModel model, const char **details, const lfParameter ***params)
lfDistortionModel
The lensdb library implements several lens distortion models.
Definition: lensfun.h:409
cbool lf_lens_remove_calib_fov(lfLens *lens, int idx)
void lf_lens_copy(lfLens *dest, const lfLens *source)
Copy the data from one lfLens structure into another.
lfLensType
Lens type.
Definition: lensfun.h:630
const char * lf_get_vignetting_model_desc(enum lfVignettingModel model, const char **details, const lfParameter ***params)
cbool lf_lens_interpolate_fov(const lfLens *lens, float focal, lfLensCalibFov *res)
void lf_lens_add_calib_tca(lfLens *lens, const lfLensCalibTCA *tcac)
const char * lf_get_distortion_model_desc(enum lfDistortionModel model, const char **details, const lfParameter ***params)
cbool lf_lens_remove_calib_distortion(lfLens *lens, int idx)
@ LF_TCA_MODEL_NONE
No TCA correction data is known.
Definition: lensfun.h:467
@ LF_TCA_MODEL_LINEAR
Linear lateral chromatic aberrations model: Cd(R) = Cs(R) * kr Cd(B) = Cs(B) * kb Ref: http://cipa....
Definition: lensfun.h:474
@ LF_TCA_MODEL_POLY3
Third order polynomial: Cd(R) = Cs(R)^3 * br + Cs(R)^2 * cr + Cs(R) * vr Cd(B) = Cs(B)^3 * bb + Cs(B)...
Definition: lensfun.h:482
@ LF_VIGNETTING_MODEL_PA
Pablo D'Angelo vignetting model (which is a more general variant of the cos^4 law): Cd = Cs * (1 + k1...
Definition: lensfun.h:526
@ LF_VIGNETTING_MODEL_NONE
No vignetting correction data is known.
Definition: lensfun.h:519
@ LF_CROP_RECTANGLE
use a rectangular crop
Definition: lensfun.h:562
@ LF_CROP_CIRCLE
use a circular crop, e.g.
Definition: lensfun.h:564
@ LF_NO_CROP
no crop at all
Definition: lensfun.h:560
@ LF_DIST_MODEL_POLY5
5th order polynomial model: Ru = Rd * (1 + k1 * Rd^2 + k2 * Rd^4)
Definition: lensfun.h:422
@ LF_DIST_MODEL_NONE
Distortion parameters are unknown.
Definition: lensfun.h:411
@ LF_DIST_MODEL_FOV1
Field-of-view lens model: Ru = tg (Rd * omega) / (2 * tg (omega/2)) Ref: ftp://ftp-sop....
Definition: lensfun.h:428
@ LF_DIST_MODEL_PTLENS
PTLens rectilinear: Ru = Rd * (a * Rd^3 + b * Rd^2 + c * Rd + 1 - a - b - c)
Definition: lensfun.h:433
@ LF_DIST_MODEL_POLY3
3rd order polynomial model: Ru = Rd * (1 - k1 + k1 * Rd^2) Ref: http://www.imatest....
Definition: lensfun.h:417
@ LF_FISHEYE
Fisheye lens Ref: http://wiki.panotools.org/Fisheye_Projection.
Definition: lensfun.h:639
@ LF_FISHEYE_EQUISOLID
equisolid fisheye
Definition: lensfun.h:652
@ LF_FISHEYE_THOBY
fisheye Thoby (for Nikkor 10.5)
Definition: lensfun.h:654
@ LF_UNKNOWN
Unknown lens type.
Definition: lensfun.h:632
@ LF_FISHEYE_ORTHOGRAPHIC
orthographic fisheye
Definition: lensfun.h:648
@ LF_EQUIRECTANGULAR
Equirectangular (not that there are such lenses, but useful to convert images TO this type,...
Definition: lensfun.h:646
@ LF_RECTILINEAR
A rectilinear lens - 99% of all lenses are of this type.
Definition: lensfun.h:634
@ LF_FISHEYE_STEREOGRAPHIC
stereographic fisheye
Definition: lensfun.h:650
@ LF_PANORAMIC
Panoramic (cylindrical)
Definition: lensfun.h:641
lfMount * lf_mount_new()
Create a new mount object.
void lf_mount_destroy(lfMount *mount)
Destroy a lfMount object.
void lf_mount_copy(lfMount *dest, const lfMount *source)
Copy the data from one lfMount structure into another.
cbool lf_mount_check(lfMount *mount)
#define C_TYPEDEF(t, c)
Helper macro to make C/C++ work similarly.
Definition: lensfun.h:29
Camera data.
Definition: lensfun.h:273
lfMLstr Model
Model name (ex: "Rolleiflex SL35") – same as in EXIF.
Definition: lensfun.h:277
lfMLstr Variant
Camera variant.
Definition: lensfun.h:279
~lfCamera()
Destroy a camera object.
int Score
Camera matching score, used while searching: not actually a camera parameter.
Definition: lensfun.h:285
lfMLstr Maker
Camera maker (ex: "Rollei") – same as in EXIF.
Definition: lensfun.h:275
void SetVariant(const char *val, const char *lang=NULL)
Add a string to camera variant.
lfCamera(const lfCamera &other)
Copy constructor.
lfCamera()
Initialize a new camera object.
void SetMaker(const char *val, const char *lang=NULL)
Add a string to camera maker.
char * Mount
Camera mount type (ex: "QBM")
Definition: lensfun.h:281
void SetMount(const char *val)
Set the value for camera Mount.
void SetModel(const char *val, const char *lang=NULL)
Add a string to camera model.
float CropFactor
Camera crop factor (ex: 1.0).
Definition: lensfun.h:283
A lens database object.
Definition: lensfun.h:1155
lfError Save(const char *filename) const
Save the whole database to a file.
const lfMount * FindMount(const char *mount) const
Return the lfMount structure given the (basic) mount name.
void Destroy()
Destroy the database object and free all loaded data.
const lfCamera ** FindCameras(const char *maker, const char *model) const
Find a set of cameras that fit given criteria.
const lfLens *const * GetLenses() const
Retrieve a full list of lenses.
static lfDatabase * Create()
Create a new empty database object.
const lfLens ** FindLenses(const lfCamera *camera, const char *maker, const char *model, int sflags=0) const
Parse a human-friendly lens description (ex: "smc PENTAX-F 35-105mm F4-5.6" or "SIGMA AF 28-300 F3....
char * HomeDataDir
Home lens database directory (something like "~/.local/share/lensfun")
Definition: lensfun.h:1157
const lfMount *const * GetMounts() const
Retrieve a full list of mounts.
const lfLens ** FindLenses(const lfLens *lens, int sflags=0) const
Find a set of lenses that fit certain criteria.
lfError Load(const char *filename)
Load just a specific XML file.
static char * Save(const lfMount *const *mounts, const lfCamera *const *cameras, const lfLens *const *lenses)
Save a set of camera and lens descriptions into a memory array.
const char * MountName(const char *mount) const
Get the name of a mount in current locale.
lfError Save(const char *filename, const lfMount *const *mounts, const lfCamera *const *cameras, const lfLens *const *lenses) const
Save a set of camera and lens descriptions to a file.
const lfCamera ** FindCamerasExt(const char *maker, const char *model, int sflags=0) const
This function is somewhat similar to FindCameras(), but uses a different search algorithm.
lfError Load(const char *errcontext, const char *data, size_t data_size)
Load a set of camera/lenses from a memory array.
lfError Load()
Load the whole lens database.
const lfCamera *const * GetCameras() const
Retrieve a full list of cameras.
Struct to save image crop, which can depend on the focal length.
Definition: lensfun.h:573
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:575
Lens distortion calibration data.
Definition: lensfun.h:444
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:448
Struct to save calibrated field of view, which can depends on the focal length.
Definition: lensfun.h:595
float FieldOfView
Field of view for given images.
Definition: lensfun.h:604
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:597
Laterlal chromatic aberrations calibration data.
Definition: lensfun.h:494
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:498
Lens vignetting calibration data.
Definition: lensfun.h:539
float Distance
Distance to subject (important only for vignetting)
Definition: lensfun.h:547
float Aperture
Aperture at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:545
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:543
Lens data.
Definition: lensfun.h:670
bool InterpolateFov(float focal, lfLensCalibFov &res) const
Interpolate lens fov data for given focal length.
char ** Mounts
Available mounts (NULL-terminated list) (ex: { "QBM", NULL })
Definition: lensfun.h:684
bool RemoveCalibCrop(int idx)
Remove a lens crop entry from the lens crop structure.
static const char * GetVignettingModelDesc(lfVignettingModel model, const char **details, const lfParameter ***params)
Get the human-readable vignetting model name and the descriptions of the parameters required by this ...
lfLensCalibTCA ** CalibTCA
Lens TCA calibration data, NULL-terminated (unsorted)
Definition: lensfun.h:710
lfMLstr Model
Lens model (ex: "Zoom-Rolleinar")
Definition: lensfun.h:674
void GuessParameters()
This method fills some fields if they are missing but can be derived from other fields.
bool Check()
Check if a lens object is valid.
lfLensCalibFov ** CalibFov
Field of view calibration data, NULL-terminated (unsorted)
Definition: lensfun.h:716
void AddMount(const char *val)
Add a new mount type to this lens.
int Score
Lens matching score, used while searching: not actually a lens parameter.
Definition: lensfun.h:718
lfMLstr Maker
Lens maker (ex: "Rollei")
Definition: lensfun.h:672
bool InterpolateDistortion(float focal, lfLensCalibDistortion &res) const
Interpolate lens geometry distortion data for given focal length.
float CropFactor
Crop factor at which calibration measurements were taken.
Definition: lensfun.h:704
float CenterY
The vertical shift of all lens distortions.
Definition: lensfun.h:696
lfLens(const lfLens &other)
Copy constructor.
bool InterpolateVignetting(float focal, float aperture, float distance, lfLensCalibVignetting &res) const
Interpolate lens vignetting model parameters for given focal length, aperture and subject distance.
bool RemoveCalibFov(int idx)
Remove a field of view entry from the lens fov structure.
float BlueCCI
Blue component of lens CCI.
Definition: lensfun.h:702
void AddCalibDistortion(const lfLensCalibDistortion *dc)
Add a new distortion calibration structure to the pool.
bool RemoveCalibVignetting(int idx)
Remove a calibration entry from the vignetting calibration data.
void SetModel(const char *val, const char *lang=NULL)
Add a string to camera model.
void SetMaker(const char *val, const char *lang=NULL)
Add a string to camera maker.
void AddCalibVignetting(const lfLensCalibVignetting *vc)
Add a new vignetting calibration structure to the pool.
float MinFocal
Minimum focal length, mm (ex: 35).
Definition: lensfun.h:676
bool InterpolateCrop(float focal, lfLensCalibCrop &res) const
Interpolate lens crop data for given focal length.
lfLens()
Create a new lens object, initializing all fields to default values.
float MaxFocal
Maximum focal length, mm (ex: 105).
Definition: lensfun.h:678
static const char * GetCropDesc(lfCropMode mode, const char **details, const lfParameter ***params)
Get the human-readable crop name and the descriptions of the parameters required by this model.
lfLensCalibCrop ** CalibCrop
Crop data, NULL-terminated (unsorted)
Definition: lensfun.h:714
float MinAperture
Aperture at minimum focal length (ex: 3.5).
Definition: lensfun.h:680
void AddCalibCrop(const lfLensCalibCrop *cc)
Add a new lens crop structure to the pool.
static const char * GetDistortionModelDesc(lfDistortionModel model, const char **details, const lfParameter ***params)
Get the human-readable distortion model name and the descriptions of the parameters required by this ...
lfLensCalibDistortion ** CalibDistortion
Lens distortion calibration data, NULL-terminated (unsorted)
Definition: lensfun.h:708
void AddCalibTCA(const lfLensCalibTCA *tcac)
Add a new transversal chromatic aberration calibration structure to the pool.
bool InterpolateTCA(float focal, lfLensCalibTCA &res) const
Interpolate lens TCA calibration data for given focal length.
float MaxAperture
Aperture at maximum focal length (ex: 4.3).
Definition: lensfun.h:682
float CenterX
The horizontal shift of all lens distortions.
Definition: lensfun.h:694
void AddCalibFov(const lfLensCalibFov *cf)
Add a new lens fov structure to the pool.
lfLensCalibVignetting ** CalibVignetting
Lens vignetting calibration data, NULL-terminated (unsorted)
Definition: lensfun.h:712
bool RemoveCalibTCA(int idx)
Remove a calibration entry from the TCA calibration data.
float RedCCI
Lens colour contribution index (ISO/CCI, ISO 6728:1983).
Definition: lensfun.h:698
~lfLens()
Destroy this and all associated objects.
lfLensType Type
Lens type.
Definition: lensfun.h:706
float GreenCCI
Green component of lens CCI.
Definition: lensfun.h:700
static const char * GetLensTypeDesc(lfLensType type, const char **details)
Get the human-readable lens type name and a short description of this lens type.
static const char * GetTCAModelDesc(lfTCAModel model, const char **details, const lfParameter ***params)
Get the human-readable transversal chromatic aberrations model name and the descriptions of the param...
bool RemoveCalibDistortion(int idx)
Remove a calibration entry from the distortion calibration data.
A modifier object contains optimized data required to rectify a image.
Definition: lensfun.h:1707
void Destroy()
Destroy the modifier object.
int Initialize(const lfLens *lens, lfPixelFormat format, float focal, float aperture, float distance, float scale, lfLensType targeom, int flags, bool reverse)
Initialize the process of correcting aberrations in a image.
bool AddCoordCallbackScale(float scale, bool reverse=false)
Add the stock image scaling callback into the chain.
void AddColorCallback(lfModifyColorFunc callback, int priority, void *data, size_t data_size)
Add a user-defined callback to the color modification chain.
bool AddCoordCallbackGeometry(lfLensType from, lfLensType to, float focal)
Add the stock lens geometry rectification callback into the chain.
void AddSubpixelCallback(lfSubpixelCoordFunc callback, int priority, void *data, size_t data_size)
Add a user-defined callback to the subpixel coordinate rectification chain.
bool ApplySubpixelGeometryDistortion(float xu, float yu, int width, int height, float *res) const
Apply stage 1 & 3 in one step.
bool ApplyColorModification(void *pixels, float x, float y, int width, int height, int comp_role, int row_stride) const
Image correction step 2: fix image colors.
bool AddCoordCallbackDistortion(lfLensCalibDistortion &model, bool reverse=false)
Add the stock lens distortion correcting callback into the chain.
bool ApplyGeometryDistortion(float xu, float yu, int width, int height, float *res) const
Image correction step 3: apply the transforms on a block of pixel coordinates.
bool ApplySubpixelDistortion(float xu, float yu, int width, int height, float *res) const
Image correction stage 1: apply subpixel distortions.
static lfModifier * Create(const lfLens *lens, float crop, int width, int height)
Create a empty image modifier object.
bool AddSubpixelCallbackTCA(lfLensCalibTCA &model, bool reverse=false)
Add the stock TCA correcting callback into the chain.
bool AddColorCallbackVignetting(lfLensCalibVignetting &model, lfPixelFormat format, bool reverse=false)
Add the stock lens vignetting correcting callback into the chain.
void AddCoordCallback(lfModifyCoordFunc callback, int priority, void *data, size_t data_size)
Add a user-defined callback to the coordinate correction chain.
bool AddColorCallbackCCI(const lfLens *lens, lfPixelFormat format, bool reverse=false)
Add the stock CCI correcting callback into the chain.
float GetAutoScale(bool reverse)
Compute the automatic scale factor for the image.
This structure contains everything specific to a camera mount.
Definition: lensfun.h:167
void AddCompat(const char *val)
Add a mount name to the list of compatible mounts.
bool Check()
Check if a mount object is valid.
lfMount()
Initialize a new mount object.
lfMLstr Name
Camera mount name.
Definition: lensfun.h:169
void SetName(const char *val, const char *lang=NULL)
Add a string to mount name.
char ** Compat
A list of compatible mounts.
Definition: lensfun.h:171
~lfMount()
Destroy a mount object.
This structure describes a single parameter for some lens model.
Definition: lensfun.h:613
const char * Name
Parameter name (something like 'k', 'k3', 'omega' etc.
Definition: lensfun.h:615
float Max
Maximal value that has sense.
Definition: lensfun.h:619
float Min
Minimal value that has sense.
Definition: lensfun.h:617
float Default
Default value for the parameter.
Definition: lensfun.h:621