lensfun 0.3.1.0
lensfun.h
Go to the documentation of this file.
1/* -*- mode:c++ -*- */
2/*
3 LensFun - a library for maintaining a database of photographical lenses,
4 and providing the means to correct some of the typical lens distortions.
5 Copyright (C) 2007 by Andrew Zabolotny
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details.
16
17 You should have received a copy of the GNU Library General Public
18 License along with this library; if not, write to the Free
19 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20*/
21
22#ifndef __LENSFUN_H__
23#define __LENSFUN_H__
24
25#include <stddef.h>
26
27#ifdef __cplusplus
28extern "C" {
30# define C_TYPEDEF(t,c)
31#else
32# define C_TYPEDEF(t,c) typedef t c c;
33#endif
34
40/*----------------------------------------------------------------------------*/
41
49#define LF_VERSION_MAJOR 0
51#define LF_VERSION_MINOR 3
53#define LF_VERSION_MICRO 1
55#define LF_VERSION_BUGFIX 0
57#define LF_VERSION ((LF_VERSION_MAJOR << 24) | (LF_VERSION_MINOR << 16) | (LF_VERSION_MICRO << 8) | LF_VERSION_BUGFIX)
58
60#define LF_MAX_DATABASE_VERSION 1
61
62#if defined CONF_LENSFUN_STATIC
64# define LF_EXPORT
65#else
66# ifdef CONF_SYMBOL_VISIBILITY
67# if defined PLATFORM_WINDOWS
68# define LF_EXPORT __declspec(dllexport)
69# elif defined CONF_COMPILER_GCC || __clang__
70# define LF_EXPORT __attribute__((visibility("default")))
71# else
72# error "I don't know how to change symbol visibility for your compiler"
73# endif
74# else
75# if defined PLATFORM_WINDOWS || defined _MSC_VER
76# define LF_EXPORT __declspec(dllimport)
77# else
78# define LF_EXPORT
79# endif
80# endif
81#endif
82
83#ifndef CONF_LENSFUN_INTERNAL
85# ifdef __GNUC__
86# define DEPRECATED __attribute__((deprecated))
87# elif defined(_MSC_VER)
88# define DEPRECATED __declspec(deprecated)
89# else
90# pragma message("WARNING: You need to implement DEPRECATED for this compiler")
91# define DEPRECATED
92# endif
93#else
94# define DEPRECATED
95#endif
96
98#define cbool int
99
108typedef char *lfMLstr;
109
112{
118
119C_TYPEDEF (enum, lfError)
120
121
129LF_EXPORT void lf_free (void *data);
130
139LF_EXPORT const char *lf_mlstr_get (const lfMLstr str);
140
157LF_EXPORT lfMLstr lf_mlstr_add (lfMLstr str, const char *lang, const char *trstr);
158
168
171/*----------------------------------------------------------------------------*/
172
189{
197 char **Compat;
198
199#ifdef __cplusplus
204
208 lfMount &operator = (const lfMount &other);
209
214
225 void SetName (const char *val, const char *lang = NULL);
226
232 void AddCompat (const char *val);
233
239 bool Check ();
240#endif
241};
242
243C_TYPEDEF (struct, lfMount)
244
245
253
264
274LF_EXPORT void lf_mount_copy (lfMount *dest, const lfMount *source);
275
278
281/*----------------------------------------------------------------------------*/
282
301{
309 char *Mount;
313 int Score;
314
315#ifdef __cplusplus
320
324 lfCamera (const lfCamera &other);
325
330
334 lfCamera &operator = (const lfCamera &other);
335
346 void SetMaker (const char *val, const char *lang = NULL);
347
358 void SetModel (const char *val, const char *lang = NULL);
359
370 void SetVariant (const char *val, const char *lang = NULL);
371
377 void SetMount (const char *val);
378
384 bool Check ();
385#endif
386};
387
388C_TYPEDEF (struct, lfCamera)
389
390
398
409
419LF_EXPORT void lf_camera_copy (lfCamera *dest, const lfCamera *source);
420
423
426/*----------------------------------------------------------------------------*/
427
449{
477};
478
480
481
488{
492 float Focal;
494 float Terms [3];
495};
496
498
499
513{
528
542
543C_TYPEDEF (enum, lfTCAModel)
544
545
553{
557 float Focal;
559 float Terms [6];
560};
561
563
564
581{
595
597
598
606{
610 float Focal;
612 float Aperture;
614 float Distance;
616 float Terms [3];
617};
618
620
621
625{
633
635
636
640{
642 float Focal;
653 float Crop [4];
654};
655
657
658
666{
668 float Focal;
679};
680
682
683
688{
690 float Focal;
703};
704
706
707
711{
713 const char *Name;
715 float Min;
717 float Max;
719 float Default;
720};
721
722C_TYPEDEF (struct, lfParameter)
723
724
728{
769
770C_TYPEDEF (enum, lfLensType)
771
772
783{
789 float MinFocal;
791 float MaxFocal;
797 char **Mounts;
807 float CenterX;
809 float CenterY;
829 int Score;
830
831#ifdef __cplusplus
836
840 lfLens (const lfLens &other);
841
846
850 lfLens &operator = (const lfLens &other);
851
862 void SetMaker (const char *val, const char *lang = NULL);
863
874 void SetModel (const char *val, const char *lang = NULL);
875
883 void AddMount (const char *val);
884
894
900 bool RemoveCalibDistortion (int idx);
901
911 void AddCalibTCA (const lfLensCalibTCA *tcac);
912
918 bool RemoveCalibTCA (int idx);
919
929
935 bool RemoveCalibVignetting (int idx);
936
946
952 bool RemoveCalibCrop (int idx);
953
966
977
987
994 bool RemoveCalibRealFocal (int idx);
995
1005
1011 bool Check ();
1012
1028 static const char *GetDistortionModelDesc (
1029 lfDistortionModel model, const char **details, const lfParameter ***params);
1045 static const char *GetTCAModelDesc (
1046 lfTCAModel model, const char **details, const lfParameter ***params);
1047
1063 static const char *GetVignettingModelDesc (
1064 lfVignettingModel model, const char **details, const lfParameter ***params);
1065
1081 static const char *GetCropDesc (
1082 lfCropMode mode, const char **details, const lfParameter ***params);
1083
1095 static const char *GetLensTypeDesc (lfLensType type, const char **details);
1096
1104 bool InterpolateDistortion (float focal, lfLensCalibDistortion &res) const;
1105
1113 bool InterpolateTCA (float focal, lfLensCalibTCA &res) const;
1114
1129 float focal, float aperture, float distance, lfLensCalibVignetting &res) const;
1130
1138 bool InterpolateCrop (float focal, lfLensCalibCrop &res) const;
1139
1151 DEPRECATED bool InterpolateFov (float focal, lfLensCalibFov &res) const;
1152
1164 bool InterpolateRealFocal (float focal, lfLensCalibRealFocal &res) const;
1165#endif
1166};
1167
1168C_TYPEDEF (struct, lfLens)
1169
1170
1178
1189
1199LF_EXPORT void lf_lens_copy (lfLens *dest, const lfLens *source);
1200
1203
1206
1209 enum lfDistortionModel model, const char **details, const lfParameter ***params);
1210
1213 enum lfTCAModel model, const char **details, const lfParameter ***params);
1214
1217 enum lfVignettingModel model, const char **details, const lfParameter ***params);
1218
1221 enum lfCropMode mode, const char **details, const lfParameter ***params);
1222
1225 enum lfLensType type, const char **details);
1226
1230
1233
1235LF_EXPORT cbool lf_lens_interpolate_vignetting (const lfLens *lens, float focal, float aperture,
1236 float distance, lfLensCalibVignetting *res);
1237
1240 lfLensCalibCrop *res);
1241
1244 lfLensCalibFov *res);
1245
1249
1252
1255
1258
1261
1264
1267
1270
1273
1276
1279
1282
1285
1288/*----------------------------------------------------------------------------*/
1289
1299enum
1300{
1322
1346{
1352
1353#ifdef __cplusplus
1357 static lfDatabase *Create ();
1358
1362 void Destroy ();
1363
1374
1387 lfError Load (const char *filename);
1388
1403 lfError Load (const char *errcontext, const char *data, size_t data_size);
1404
1412 lfError Save (const char *filename) const;
1413
1427 lfError Save (const char *filename,
1428 const lfMount *const *mounts,
1429 const lfCamera *const *cameras,
1430 const lfLens *const *lenses) const;
1431
1444 static char *Save (const lfMount *const *mounts,
1445 const lfCamera *const *cameras,
1446 const lfLens *const *lenses);
1447
1472 const lfCamera **FindCameras (const char *maker, const char *model) const;
1473
1494 const lfCamera **FindCamerasExt (const char *maker, const char *model,
1495 int sflags = 0) const;
1496
1504 const lfCamera *const *GetCameras () const;
1505
1543 const lfLens **FindLenses (const lfCamera *camera, const char *maker,
1544 const char *model, int sflags = 0) const;
1545
1563 const lfLens **FindLenses (const lfLens *lens, int sflags = 0) const;
1564
1572 const lfLens *const *GetLenses () const;
1573
1581 const lfMount *FindMount (const char *mount) const;
1582
1590 const char *MountName (const char *mount) const;
1591
1599 const lfMount *const *GetMounts () const;
1600
1601protected:
1602 /* Prevent user from creating and destroying such objects */
1603 lfDatabase () {}
1604 ~lfDatabase () {}
1605#endif
1606};
1607
1608C_TYPEDEF (struct, lfDatabase)
1609
1610
1621
1632
1635
1637LF_EXPORT lfError lf_db_load_file (lfDatabase *db, const char *filename);
1638
1640LF_EXPORT lfError lf_db_load_data (lfDatabase *db, const char *errcontext,
1641 const char *data, size_t data_size);
1642
1644LF_EXPORT lfError lf_db_save_all (const lfDatabase *db, const char *filename);
1645
1647LF_EXPORT lfError lf_db_save_file (const lfDatabase *db, const char *filename,
1648 const lfMount *const *mounts,
1649 const lfCamera *const *cameras,
1650 const lfLens *const *lenses);
1651
1653LF_EXPORT char *lf_db_save (const lfMount *const *mounts,
1654 const lfCamera *const *cameras,
1655 const lfLens *const *lenses);
1656
1659 const lfDatabase *db, const char *maker, const char *model);
1660
1663 const lfDatabase *db, const char *maker, const char *model, int sflags);
1664
1667
1670 const lfDatabase *db, const lfCamera *camera, const char *maker,
1671 const char *lens, int sflags);
1672
1675 const lfDatabase *db, const lfLens *lens, int sflags);
1676
1679
1681LF_EXPORT const lfMount *lf_db_find_mount (const lfDatabase *db, const char *mount);
1682
1684LF_EXPORT const char *lf_db_mount_name (const lfDatabase *db, const char *mount);
1685
1688
1691/*----------------------------------------------------------------------------*/
1692
1701enum
1702{
1704 LF_MODIFY_TCA = 0x00000001,
1707 /* Value 0x00000004 is deprecated. */
1713 LF_MODIFY_SCALE = 0x00000020,
1715 LF_MODIFY_ALL = ~0
1717
1720{
1730 LF_PF_F64
1732
1734
1735
1739{
1763
1765
1766
1767#define LF_CR_1(a) (LF_CR_ ## a)
1769#define LF_CR_2(a,b) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4))
1771#define LF_CR_3(a,b,c) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1772 ((LF_CR_ ## c) << 8))
1774#define LF_CR_4(a,b,c,d) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1775 ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12))
1777#define LF_CR_5(a,b,c,d,e) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1778 ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
1779 ((LF_CR_ ## e) << 16))
1781#define LF_CR_6(a,b,c,d,e,f) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1782 ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
1783 ((LF_CR_ ## e) << 16) | ((LF_CR_ ## f) << 20))
1785#define LF_CR_7(a,b,c,d,e,f,g) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1786 ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
1787 ((LF_CR_ ## e) << 16) | ((LF_CR_ ## f) << 20) | \
1788 ((LF_CR_ ## g) << 24))
1790#define LF_CR_8(a,b,c,d,e,f,g,h) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
1791 ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
1792 ((LF_CR_ ## e) << 16) | ((LF_CR_ ## f) << 20) | \
1793 ((LF_CR_ ## g) << 24) | ((LF_CR_ ## h) << 28))
1794
1810typedef void (*lfSubpixelCoordFunc) (void *data, float *iocoord, int count);
1811
1836typedef void (*lfModifyColorFunc) (void *data, float x, float y,
1837 void *pixels, int comp_role, int count);
1838
1851typedef void (*lfModifyCoordFunc) (void *data, float *iocoord, int count);
1852
1933{
1934#ifdef __cplusplus
1958 static lfModifier *Create (const lfLens *lens, float crop, int width, int height);
1959
2006 const lfLens *lens, lfPixelFormat format, float focal, float aperture,
2007 float distance, float scale, lfLensType targeom, int flags, bool reverse);
2008
2014 void Destroy ();
2015
2032 void AddCoordCallback (lfModifyCoordFunc callback, int priority,
2033 void *data, size_t data_size);
2034
2052 void AddSubpixelCallback (lfSubpixelCoordFunc callback, int priority,
2053 void *data, size_t data_size);
2054
2071 void AddColorCallback (lfModifyColorFunc callback, int priority,
2072 void *data, size_t data_size);
2073
2088 bool AddSubpixelCallbackTCA (lfLensCalibTCA &model, bool reverse = false);
2089
2105 bool reverse = false);
2106
2120 bool AddCoordCallbackDistortion (lfLensCalibDistortion &model, bool reverse = false);
2121
2136 bool AddCoordCallbackGeometry (lfLensType from, lfLensType to, float focal);
2137
2154 bool AddCoordCallbackScale (float scale, bool reverse = false);
2155
2169 float GetAutoScale (bool reverse);
2170
2200 bool ApplyColorModification (void *pixels, float x, float y, int width, int height,
2201 int comp_role, int row_stride) const;
2202
2233 bool ApplyGeometryDistortion (float xu, float yu, int width, int height,
2234 float *res) const;
2235
2267 bool ApplySubpixelDistortion (float xu, float yu, int width, int height,
2268 float *res) const;
2269
2300 bool ApplySubpixelGeometryDistortion (float xu, float yu, int width, int height,
2301 float *res) const;
2302
2303private:
2334 float GetRealFocalLength (const lfLens *lens, float focal);
2335
2336protected:
2337 /* Prevent user from creating and destroying such objects */
2338 lfModifier () {}
2339 ~lfModifier () {}
2340#elif defined _MSC_VER
2341 /* Sucks, like always */
2342 void *dummy;
2343#endif
2344};
2345
2346C_TYPEDEF (struct, lfModifier)
2347
2348
2350 const lfLens *lens, float crop, int width, int height);
2351
2354
2357 lfModifier *modifier, const lfLens *lens, lfPixelFormat format,
2358 float focal, float aperture, float distance, float scale,
2359 lfLensType targeom, int flags, cbool reverse);
2360
2363 lfModifier *modifier, lfModifyCoordFunc callback, int priority,
2364 void *data, size_t data_size);
2365
2368 lfModifier *modifier, lfSubpixelCoordFunc callback, int priority,
2369 void *data, size_t data_size);
2370
2373 lfModifier *modifier, lfModifyColorFunc callback, int priority,
2374 void *data, size_t data_size);
2375
2378 lfModifier *modifier, lfLensCalibTCA *model, cbool reverse);
2379
2382 lfModifier *modifier, lfLensCalibVignetting *model,
2383 lfPixelFormat format, cbool reverse);
2384
2387 lfModifier *modifier, lfLensCalibDistortion *model, cbool reverse);
2388
2391 lfModifier *modifier, lfLensType from, lfLensType to, float focal);
2392
2395 lfModifier *modifier, float scale, cbool reverse);
2396
2399 lfModifier *modifier, cbool reverse);
2400
2403 lfModifier *modifier, float xu, float yu, int width, int height, float *res);
2404
2407 lfModifier *modifier, void *pixels, float x, float y, int width, int height,
2408 int comp_role, int row_stride);
2409
2412 lfModifier *modifier, float xu, float yu, int width, int height, float *res);
2413
2416 lfModifier *modifier, float xu, float yu, int width, int height, float *res);
2417
2420#undef cbool
2421
2422#ifdef __cplusplus
2423}
2424#endif
2425
2426#endif /* __LENSFUN_H__ */
lfMLstr lf_mlstr_dup(const lfMLstr str)
Create a complete copy of a multi-language string.
char * lfMLstr
Definition: lensfun.h:108
void lf_free(void *data)
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:64
#define DEPRECATED
For marking deprecated functions, see http://stackoverflow.com/a/21265197.
Definition: lensfun.h:91
#define cbool
C-compatible bool type; don't bother to define Yet Another Boolean Type.
Definition: lensfun.h:98
lfMLstr lf_mlstr_add(lfMLstr str, const char *lang, const char *trstr)
Add a new translated string to a multi-language string.
lfError
Definition: lensfun.h:112
@ LF_NO_ERROR
Definition: lensfun.h:114
@ LF_WRONG_FORMAT
Definition: lensfun.h:116
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:1810
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)
void(* lfModifyCoordFunc)(void *data, float *iocoord, int count)
A callback function which modifies the coordinates of a strip of pixels.
Definition: lensfun.h:1851
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)
lfModifier * lf_modifier_new(const lfLens *lens, float crop, int width, int height)
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.
Definition: lensfun.h:1836
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. "pixel" refers here to a se...
Definition: lensfun.h:1739
lfPixelFormat
A list of pixel formats supported by internal colour callbacks.
Definition: lensfun.h:1720
@ LF_MODIFY_TCA
Definition: lensfun.h:1704
@ LF_MODIFY_VIGNETTING
Definition: lensfun.h:1706
@ LF_MODIFY_GEOMETRY
Definition: lensfun.h:1711
@ LF_MODIFY_DISTORTION
Definition: lensfun.h:1709
@ LF_MODIFY_SCALE
Definition: lensfun.h:1713
@ LF_MODIFY_ALL
Definition: lensfun.h:1715
@ LF_CR_NEXT
Definition: lensfun.h:1751
@ LF_CR_END
Definition: lensfun.h:1744
@ LF_CR_INTENSITY
Definition: lensfun.h:1755
@ LF_CR_RED
Definition: lensfun.h:1757
@ LF_CR_UNKNOWN
Definition: lensfun.h:1753
@ LF_CR_GREEN
Definition: lensfun.h:1759
@ LF_CR_BLUE
Definition: lensfun.h:1761
@ LF_PF_U16
Definition: lensfun.h:1724
@ LF_PF_F64
Definition: lensfun.h:1730
@ LF_PF_U8
Definition: lensfun.h:1722
@ LF_PF_U32
Definition: lensfun.h:1726
@ LF_PF_F32
Definition: lensfun.h:1728
const lfCamera ** lf_db_find_cameras_ext(const lfDatabase *db, const char *maker, const char *model, int sflags)
char * lf_db_save(const lfMount *const *mounts, const lfCamera *const *cameras, const lfLens *const *lenses)
const char * lf_db_mount_name(const lfDatabase *db, const char *mount)
const lfMount * lf_db_find_mount(const lfDatabase *db, const char *mount)
lfError lf_db_load_data(lfDatabase *db, const char *errcontext, const char *data, size_t data_size)
lfError lf_db_load(lfDatabase *db)
const lfLens ** lf_db_find_lenses(const lfDatabase *db, const lfLens *lens, int sflags)
const lfLens ** lf_db_find_lenses_hd(const lfDatabase *db, const lfCamera *camera, const char *maker, const char *lens, int sflags)
lfError lf_db_save_all(const lfDatabase *db, const char *filename)
const lfMount *const * lf_db_get_mounts(const lfDatabase *db)
const lfCamera *const * lf_db_get_cameras(const lfDatabase *db)
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 ** lf_db_find_cameras(const lfDatabase *db, const char *maker, const char *model)
lfDatabase * lf_db_new(void)
Create a new empty database object.
const lfLens *const * lf_db_get_lenses(const lfDatabase *db)
lfError lf_db_load_file(lfDatabase *db, const char *filename)
void lf_db_destroy(lfDatabase *db)
Destroy the database object.
@ LF_SEARCH_LOOSE
This flag selects a looser search algorithm resulting in more results (still sorted by score).
Definition: lensfun.h:1308
@ LF_SEARCH_SORT_AND_UNIQUIFY
This flag makes LensFun to sort the results by focal length, and remove all double lens names.
Definition: lensfun.h:1320
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 lensfun library supports several models for lens lateral chromatic aberrations (also called trans...
Definition: lensfun.h:513
cbool lf_lens_remove_calib_real_focal(lfLens *lens, int idx)
void lf_lens_add_calib_vignetting(lfLens *lens, const lfLensCalibVignetting *vc)
cbool lf_lens_check(lfLens *lens)
DEPRECATED cbool lf_lens_remove_calib_fov(lfLens *lens, int idx)
cbool lf_lens_remove_calib_crop(lfLens *lens, int idx)
cbool lf_lens_interpolate_crop(const lfLens *lens, float focal, lfLensCalibCrop *res)
DEPRECATED 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)
const char * lf_get_distortion_model_desc(enum lfDistortionModel model, const char **details, const lfParameter ***params)
lfVignettingModel
The lensfun library supports several models for lens vignetting correction.
Definition: lensfun.h:581
cbool lf_lens_remove_calib_tca(lfLens *lens, int idx)
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)
lfCropMode
Different crop modes.
Definition: lensfun.h:625
DEPRECATED cbool lf_lens_interpolate_fov(const lfLens *lens, float focal, lfLensCalibFov *res)
lfLens * lf_lens_new()
Create a new lens object.
lfDistortionModel
The lensfun library implements several lens distortion models. This enum lists them.
Definition: lensfun.h:449
const char * lf_get_crop_desc(enum lfCropMode mode, const char **details, const lfParameter ***params)
void lf_lens_copy(lfLens *dest, const lfLens *source)
Copy the data from one lfLens structure into another.
lfLensType
Lens type. See Change of projection for further information.
Definition: lensfun.h:728
cbool lf_lens_interpolate_real_focal(const lfLens *lens, float focal, lfLensCalibRealFocal *res)
const char * lf_get_vignetting_model_desc(enum lfVignettingModel model, const char **details, const lfParameter ***params)
void lf_lens_add_calib_tca(lfLens *lens, const lfLensCalibTCA *tcac)
const char * lf_get_lens_type_desc(enum lfLensType type, const char **details)
const char * lf_get_tca_model_desc(enum lfTCAModel model, const char **details, const lfParameter ***params)
void lf_lens_add_calib_real_focal(lfLens *lens, const lfLensCalibRealFocal *cf)
cbool lf_lens_remove_calib_distortion(lfLens *lens, int idx)
@ LF_TCA_MODEL_NONE
No TCA correction data is known.
Definition: lensfun.h:515
@ LF_TCA_MODEL_LINEAR
Linear lateral chromatic aberrations model.
Definition: lensfun.h:527
@ LF_TCA_MODEL_POLY3
Third order polynomial.
Definition: lensfun.h:540
@ LF_VIGNETTING_MODEL_PA
Pablo D'Angelo vignetting model (which is a more general variant of the law).
Definition: lensfun.h:593
@ LF_VIGNETTING_MODEL_NONE
No vignetting correction data is known.
Definition: lensfun.h:583
@ LF_CROP_RECTANGLE
use a rectangular crop
Definition: lensfun.h:629
@ LF_CROP_CIRCLE
use a circular crop, e.g. for circular fisheye images
Definition: lensfun.h:631
@ LF_NO_CROP
no crop at all
Definition: lensfun.h:627
@ LF_DIST_MODEL_POLY5
5th order polynomial model.
Definition: lensfun.h:468
@ LF_DIST_MODEL_NONE
Distortion parameters are unknown.
Definition: lensfun.h:451
@ LF_DIST_MODEL_PTLENS
PTLens model, which is also used by Hugin.
Definition: lensfun.h:476
@ LF_DIST_MODEL_POLY3
3rd order polynomial model, which is a subset of the PTLens model.
Definition: lensfun.h:459
@ LF_FISHEYE
Equidistant fisheye.
Definition: lensfun.h:741
@ LF_FISHEYE_EQUISOLID
Equisolid fisheye.
Definition: lensfun.h:761
@ LF_FISHEYE_THOBY
Fisheye as measured by Thoby (for Nikkor 10.5).
Definition: lensfun.h:767
@ LF_UNKNOWN
Unknown lens type.
Definition: lensfun.h:730
@ LF_FISHEYE_ORTHOGRAPHIC
Orthographic fisheye.
Definition: lensfun.h:757
@ LF_EQUIRECTANGULAR
Equirectangular.
Definition: lensfun.h:755
@ LF_RECTILINEAR
Rectilinear lens.
Definition: lensfun.h:735
@ LF_FISHEYE_STEREOGRAPHIC
Stereographic fisheye.
Definition: lensfun.h:759
@ LF_PANORAMIC
Panoramic (cylindrical)
Definition: lensfun.h:748
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)
Definition: lensfun.h:30
Camera data. Unknown fields are set to NULL.
Definition: lensfun.h:301
lfMLstr Model
Model name (ex: "Rolleiflex SL35") – same as in EXIF.
Definition: lensfun.h:305
lfMLstr Variant
Camera variant. Some cameras use same EXIF id for different models.
Definition: lensfun.h:307
~lfCamera()
Destroy a camera object. All allocated fields are freed.
int Score
Camera matching score, used while searching: not actually a camera parameter.
Definition: lensfun.h:313
bool Check()
Check if a camera object is valid.
lfMLstr Maker
Camera maker (ex: "Rollei") – same as in EXIF.
Definition: lensfun.h:303
void SetVariant(const char *val, const char *lang=NULL)
Add a string to camera variant.
lfCamera(const lfCamera &other)
lfCamera()
Initialize a new camera object. All fields are set to 0.
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:309
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). Must be defined.
Definition: lensfun.h:311
A lens database object.
Definition: lensfun.h:1346
const lfLens *const * GetLenses() const
Retrieve a full list of lenses.
lfError Save(const char *filename) const
Save the whole database to a file.
void Destroy()
Destroy the database object and free all loaded data.
const lfCamera ** FindCamerasExt(const char *maker, const char *model, int sflags=0) const
Searches all translations of camera maker and model.
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:1348
const lfLens ** FindLenses(const lfLens *lens, int sflags=0) const
Find a set of lenses that fit certain criteria.
const lfMount *const * GetMounts() const
Retrieve a full list of mounts.
lfError Load(const char *filename)
Load just a specific XML file.
char * UserUpdatesDir
Home lens database directory for automatic updates (something like "~/.local/share/lensfun/updates")
Definition: lensfun.h:1351
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 lfMount * FindMount(const char *mount) const
Return the lfMount structure given the (basic) mount name.
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.
static lfDatabase * Create()
Create a new empty database object.
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 char * MountName(const char *mount) const
Get the name of a mount in current locale.
const lfCamera ** FindCameras(const char *maker, const char *model) const
Find a set of cameras that fit given criteria.
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:640
enum lfCropMode CropMode
crop mode which should be applied to image to get rid of black borders
Definition: lensfun.h:644
float Focal
Focal length in mm at which this calibration data was taken.
Definition: lensfun.h:642
Lens distortion calibration data.
Definition: lensfun.h:488
enum lfDistortionModel Model
The type of distortion model used.
Definition: lensfun.h:490
float Focal
Focal length in mm at which this calibration data was taken.
Definition: lensfun.h:492
Struct to save calibrated field of view, which can depends on the focal length (DEPRECATED)
Definition: lensfun.h:666
float FieldOfView
Field of view for given images.
Definition: lensfun.h:678
float Focal
Definition: lensfun.h:668
Struct to save real focal length, which can depends on the (nominal) focal length.
Definition: lensfun.h:688
float RealFocal
Real focal length.
Definition: lensfun.h:702
float Focal
Definition: lensfun.h:690
Laterlal chromatic aberrations calibration data.
Definition: lensfun.h:553
float Focal
Focal length in mm at which this calibration data was taken.
Definition: lensfun.h:557
enum lfTCAModel Model
The lateral chromatic aberration model used.
Definition: lensfun.h:555
Lens vignetting calibration data.
Definition: lensfun.h:606
float Distance
Focus distance in meters.
Definition: lensfun.h:614
float Aperture
Aperture (f-number) at which this calibration data was taken.
Definition: lensfun.h:612
enum lfVignettingModel Model
The lens vignetting model used.
Definition: lensfun.h:608
float Focal
Focal length in mm at which this calibration data was taken.
Definition: lensfun.h:610
Lens data. Unknown fields are set to NULL or 0.
Definition: lensfun.h:783
char ** Mounts
Definition: lensfun.h:797
bool RemoveCalibCrop(int idx)
Remove a lens crop entry from the lens crop structure.
lfLensCalibTCA ** CalibTCA
Definition: lensfun.h:819
lfMLstr Model
Definition: lensfun.h:787
static const char * GetLensTypeDesc(lfLensType type, const char **details)
Get the human-readable lens type name and a short description of this lens type.
DEPRECATED bool RemoveCalibFov(int idx)
Remove a field of view entry from the lens fov structure.
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
Definition: lensfun.h:825
bool InterpolateRealFocal(float focal, lfLensCalibRealFocal &res) const
Interpolate lens real focal length data for given focal length.
void AddMount(const char *val)
Add a new mount type to this lens.
int Score
Definition: lensfun.h:829
lfMLstr Maker
Definition: lensfun.h:785
bool InterpolateDistortion(float focal, lfLensCalibDistortion &res) const
Interpolate lens geometry distortion data for given focal length.
float CropFactor
Definition: lensfun.h:811
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 ...
float CenterY
Definition: lensfun.h:809
lfLens(const lfLens &other)
lfLensCalibRealFocal ** CalibRealFocal
Definition: lensfun.h:827
bool InterpolateVignetting(float focal, float aperture, float distance, lfLensCalibVignetting &res) const
Interpolate lens vignetting model parameters for given focal length, aperture, and focus distance.
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.
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.
DEPRECATED void AddCalibFov(const lfLensCalibFov *cf)
Add a new lens fov structure to the pool.
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
Definition: lensfun.h:789
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
Definition: lensfun.h:791
lfLensCalibCrop ** CalibCrop
Definition: lensfun.h:823
float MinAperture
Definition: lensfun.h:793
void AddCalibCrop(const lfLensCalibCrop *cc)
Add a new lens crop structure to the pool.
lfLensCalibDistortion ** CalibDistortion
Definition: lensfun.h:817
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...
float AspectRatio
Definition: lensfun.h:813
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
Definition: lensfun.h:795
float CenterX
Definition: lensfun.h:807
lfLensCalibVignetting ** CalibVignetting
Definition: lensfun.h:821
bool RemoveCalibTCA(int idx)
Remove a calibration entry from the TCA calibration data.
~lfLens()
Destroy this and all associated objects.
DEPRECATED bool InterpolateFov(float focal, lfLensCalibFov &res) const
Interpolate lens fov data for given focal length.
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 ...
lfLensType Type
Definition: lensfun.h:815
bool RemoveCalibRealFocal(int idx)
Remove a real focal length entry from the lens real focal length structure.
void AddCalibRealFocal(const lfLensCalibRealFocal *cf)
Add a new lens real focal length structure to the pool.
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:1933
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 2 & 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 1: fix image colors.
static lfModifier * Create(const lfLens *lens, float crop, int width, int height)
Create a empty image modifier object.
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 2: apply the transforms on a block of pixel coordinates.
bool ApplySubpixelDistortion(float xu, float yu, int width, int height, float *res) const
Image correction step 3: apply subpixel distortions.
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. The vignetting correction callback ...
void AddCoordCallback(lfModifyCoordFunc callback, int priority, void *data, size_t data_size)
Add a user-defined callback to the coordinate correction 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:189
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. All fields are set to 0.
lfMLstr Name
Camera mount name.
Definition: lensfun.h:195
void SetName(const char *val, const char *lang=NULL)
Add a string to mount name.
char ** Compat
Definition: lensfun.h:197
~lfMount()
Destroy a mount object. All allocated fields are freed.
This structure describes a single parameter for some lens model.
Definition: lensfun.h:711
const char * Name
Parameter name (something like 'k', 'k3', 'omega' etc.)
Definition: lensfun.h:713
float Max
Maximal value that has sense.
Definition: lensfun.h:717
float Min
Minimal value that has sense.
Definition: lensfun.h:715
float Default
Default value for the parameter.
Definition: lensfun.h:719