29 # define C_TYPEDEF(t,c)
31 # define C_TYPEDEF(t,c) typedef t c c;
47 #define LF_VERSION_MAJOR 0
49 #define LF_VERSION_MINOR 2
51 #define LF_VERSION_MICRO 8
53 #define LF_VERSION_BUGFIX 0
55 #define LF_VERSION ((LF_VERSION_MAJOR << 24) | (LF_VERSION_MINOR << 16) | (LF_VERSION_MICRO << 8) | LF_VERSION_BUGFIX)
58 #if defined CONF_LENSFUN_STATIC
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")))
68 # error "I don't know how to change symbol visibility for your compiler"
71 # if defined PLATFORM_WINDOWS || defined _MSC_VER
72 # define LF_EXPORT __declspec(dllimport)
182 lfMount &operator = (
const lfMount &other);
197 void SetName (
const char *val,
const char *lang = NULL);
204 void AddCompat (
const char *val);
296 lfCamera (
const lfCamera &other);
306 lfCamera &operator = (
const lfCamera &other);
316 void SetMaker (
const char *val,
const char *lang = NULL);
326 void SetModel (
const char *val,
const char *lang = NULL);
336 void SetVariant (
const char *val,
const char *lang = NULL);
343 void SetMount (
const char *val);
729 lfLens (
const lfLens &other);
739 lfLens &operator = (
const lfLens &other);
749 void SetMaker (
const char *val,
const char *lang = NULL);
759 void SetModel (
const char *val,
const char *lang = NULL);
767 void AddMount (
const char *val);
783 bool RemoveCalibDistortion (
int idx);
799 bool RemoveCalibTCA (
int idx);
815 bool RemoveCalibVignetting (
int idx);
831 bool RemoveCalibCrop (
int idx);
847 bool RemoveCalibFov (
int idx);
856 void GuessParameters ();
880 static const char *GetDistortionModelDesc (
897 static const char *GetTCAModelDesc (
915 static const char *GetVignettingModelDesc (
933 static const char *GetCropDesc (
947 static const char *GetLensTypeDesc (
lfLensType type,
const char **details);
979 bool InterpolateVignetting (
1191 lfError Load (
const char *filename);
1206 lfError Load (
const char *errcontext,
const char *data,
size_t data_size);
1215 lfError Save (
const char *filename)
const;
1230 lfError Save (
const char *filename,
1233 const lfLens *
const *lenses)
const;
1247 static char *Save (
const lfMount *
const *mounts,
1249 const lfLens *
const *lenses);
1274 const lfCamera **FindCameras (
const char *maker,
const char *model)
const;
1295 const lfCamera **FindCamerasExt (
const char *maker,
const char *model,
1296 int sflags = 0)
const;
1305 const lfCamera *
const *GetCameras ()
const;
1343 const lfLens **FindLenses (
const lfCamera *camera,
const char *maker,
1344 const char *model,
int sflags = 0)
const;
1363 const lfLens **FindLenses (
const lfLens *lens,
int sflags = 0)
const;
1372 const lfLens *
const *GetLenses ()
const;
1381 const lfMount *FindMount (
const char *mount)
const;
1390 const char *MountName (
const char *mount)
const;
1399 const lfMount *
const *GetMounts ()
const;
1439 const
char *data,
size_t data_size);
1448 const
lfLens *const *lenses);
1453 const
lfLens *const *lenses);
1457 const
lfDatabase *db, const
char *maker, const
char *model);
1461 const
lfDatabase *db, const
char *maker, const
char *model,
int sflags);
1469 const
char *lens,
int sflags);
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))
1632 void *pixels,
int comp_role,
int count);
1729 static lfModifier *Create (
const lfLens *lens,
float crop,
int width,
int height);
1773 float distance,
float scale,
lfLensType targeom,
int flags,
bool reverse);
1798 void *data,
size_t data_size);
1818 void *data,
size_t data_size);
1837 void *data,
size_t data_size);
1852 bool AddSubpixelCallbackTCA (
lfLensCalibTCA &model,
bool reverse =
false);
1869 bool reverse =
false);
1886 bool reverse =
false);
1931 bool AddCoordCallbackScale (
float scale,
bool reverse =
false);
1945 float GetAutoScale (
bool reverse);
1975 bool ApplySubpixelDistortion (
float xu,
float yu,
int width,
int height,
2006 bool ApplyColorModification (
void *pixels,
float x,
float y,
int width,
int height,
2007 int comp_role,
int row_stride)
const;
2035 bool ApplyGeometryDistortion (
float xu,
float yu,
int width,
int height,
2065 bool ApplySubpixelGeometryDistortion (
float xu,
float yu,
int width,
int height,
2072 #elif defined _MSC_VER
2082 const
lfLens *lens,
float crop,
int width,
int height);
2090 float focal,
float aperture,
float distance,
float scale,
2096 void *data,
size_t data_size);
2101 void *data,
size_t data_size);
2106 void *data,
size_t data_size);
2140 lfModifier *modifier,
float xu,
float yu,
int width,
int height,
float *res);
2144 lfModifier *modifier,
void *pixels,
float x,
float y,
int width,
int height,
2145 int comp_role,
int row_stride);
2149 lfModifier *modifier,
float xu,
float yu,
int width,
int height,
float *res);
2153 lfModifier *modifier,
float xu,
float yu,
int width,
int height,
float *res);
float RedCCI
Lens colour contribution index (ISO/CCI, ISO 6728:1983).
Definition: lensfun.h:698
Panoramic (cylindrical)
Definition: lensfun.h:641
lfError lf_db_load_file(lfDatabase *db, const char *filename)
Field-of-view lens model: Ru = tg (Rd * omega) / (2 * tg (omega/2)) Ref: ftp://ftp-sop.inria.fr/chir/publis/devernay-faugeras:01.pdf.
Definition: lensfun.h:428
lfDistortionModel
The lensdb library implements several lens distortion models.
Definition: lensfun.h:408
float MinAperture
Aperture at minimum focal length (ex: 3.5).
Definition: lensfun.h:680
void(* lfModifyCoordFunc)(void *data, float *iocoord, int count)
A callback function which modifies the coordinates of a strip of pixels.
Definition: lensfun.h:1645
Unsigned 16-bit R,G,B.
Definition: lensfun.h:1523
This component has an unknown/doesn't matter role.
Definition: lensfun.h:1550
cbool lf_modifier_apply_subpixel_geometry_distortion(lfModifier *modifier, float xu, float yu, int width, int height, float *res)
void lf_lens_add_calib_tca(lfLens *lens, const lfLensCalibTCA *tcac)
const lfCamera ** lf_db_find_cameras(const lfDatabase *db, const char *maker, const char *model)
lfMLstr Maker
Lens maker (ex: "Rollei")
Definition: lensfun.h:672
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)
lfLensCalibDistortion ** CalibDistortion
Lens distortion calibration data, NULL-terminated (unsorted)
Definition: lensfun.h:708
float FieldOfView
Field of view for given images.
Definition: lensfun.h:604
A rectilinear lens - 99% of all lenses are of this type.
Definition: lensfun.h:634
Correct (or apply) lens distortion.
Definition: lensfun.h:1508
lfLensType Type
Lens type.
Definition: lensfun.h:706
char ** Compat
A list of compatible mounts.
Definition: lensfun.h:171
lfLensCalibVignetting ** CalibVignetting
Lens vignetting calibration data, NULL-terminated (unsorted)
Definition: lensfun.h:712
no crop at all
Definition: lensfun.h:560
64-bit floating-point R,G,B
Definition: lensfun.h:1529
Unsigned 8-bit R,G,B.
Definition: lensfun.h:1521
5th order polynomial model: Ru = Rd * (1 + k1 * Rd^2 + k2 * Rd^4)
Definition: lensfun.h:422
lfError
liblensdb error codes: negative codes are -errno, positive are here
Definition: lensfun.h:93
const char * lf_get_distortion_model_desc(enum lfDistortionModel model, const char **details, const lfParameter ***params)
void lf_lens_guess_parameters(lfLens *lens)
float CenterX
The horizontal shift of all lens distortions.
Definition: lensfun.h:694
float CropFactor
Crop factor at which calibration measurements were taken.
Definition: lensfun.h:704
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:543
Laterlal chromatic aberrations calibration data.
Definition: lensfun.h:493
Lens distortion calibration data.
Definition: lensfun.h:443
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
void lf_modifier_add_subpixel_callback(lfModifier *modifier, lfSubpixelCoordFunc callback, int priority, void *data, size_t data_size)
float BlueCCI
Blue component of lens CCI.
Definition: lensfun.h:702
cbool lf_modifier_add_color_callback_vignetting(lfModifier *modifier, lfLensCalibVignetting *model, lfPixelFormat format, cbool reverse)
void lf_modifier_add_coord_callback(lfModifier *modifier, lfModifyCoordFunc callback, int priority, void *data, size_t data_size)
void lf_lens_copy(lfLens *dest, const lfLens *source)
Copy the data from one lfLens structure into another.
void lf_mount_destroy(lfMount *mount)
Destroy a lfMount object.
cbool lf_lens_remove_calib_tca(lfLens *lens, int idx)
cbool lf_lens_remove_calib_vignetting(lfLens *lens, int idx)
Lens data.
Definition: lensfun.h:669
cbool lf_lens_interpolate_distortion(const lfLens *lens, float focal, lfLensCalibDistortion *res)
lfPixelFormat
A list of pixel formats supported by internal colour callbacks.
Definition: lensfun.h:1518
Additional resize of image.
Definition: lensfun.h:1512
lfVignettingModel
The lensdb library supports several models for lens vignetting correction.
Definition: lensfun.h:516
lfLensCalibTCA ** CalibTCA
Lens TCA calibration data, NULL-terminated (unsorted)
Definition: lensfun.h:710
float CenterY
The vertical shift of all lens distortions.
Definition: lensfun.h:696
float GreenCCI
Green component of lens CCI.
Definition: lensfun.h:700
cbool lf_modifier_add_coord_callback_scale(lfModifier *modifier, float scale, cbool reverse)
This structure contains everything specific to a camera mount.
Definition: lensfun.h:166
float MinFocal
Minimum focal length, mm (ex: 35).
Definition: lensfun.h:676
const char * lf_db_mount_name(const lfDatabase *db, const char *mount)
stereographic fisheye
Definition: lensfun.h:650
int Score
Lens matching score, used while searching: not actually a lens parameter.
Definition: lensfun.h:718
Linear lateral chromatic aberrations model: Cd(R) = Cs(R) * kr Cd(B) = Cs(B) * kb Ref: http://cipa...
Definition: lensfun.h:474
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
Convert image geometry.
Definition: lensfun.h:1510
use a circular crop, e.g.
Definition: lensfun.h:564
#define cbool
C-compatible bool type; don't bother to define Yet Another Boolean Type.
Definition: lensfun.h:80
lfMLstr Model
Lens model (ex: "Zoom-Rolleinar")
Definition: lensfun.h:674
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:575
cbool lf_modifier_apply_subpixel_distortion(lfModifier *modifier, float xu, float yu, int width, int height, float *res)
const lfLens ** lf_db_find_lenses_hd(const lfDatabase *db, const lfCamera *camera, const char *maker, const char *lens, int sflags)
int Score
Camera matching score, used while searching: not actually a camera parameter.
Definition: lensfun.h:285
void lf_free(void *data)
The basics of memory allocation: never free objects allocated by the library yourselves, instead use this function.
cbool lf_mount_check(lfMount *mount)
float lf_modifier_get_auto_scale(lfModifier *modifier, cbool reverse)
orthographic fisheye
Definition: lensfun.h:648
const lfCamera *const * lf_db_get_cameras(const lfDatabase *db)
lfModifier * lf_modifier_new(const lfLens *lens, float crop, int width, int height)
lfLensType
Lens type.
Definition: lensfun.h:629
Correct (or apply) lens vignetting.
Definition: lensfun.h:1504
cbool lf_lens_remove_calib_crop(lfLens *lens, int idx)
cbool lf_lens_interpolate_fov(const lfLens *lens, float focal, lfLensCalibFov *res)
PTLens rectilinear: Ru = Rd * (a * Rd^3 + b * Rd^2 + c * Rd + 1 - a - b - c)
Definition: lensfun.h:433
This is the pixel intensity (grayscale)
Definition: lensfun.h:1552
3rd order polynomial model: Ru = Rd * (1 - k1 + k1 * Rd^2) Ref: http://www.imatest.com/docs/distortion.html
Definition: lensfun.h:417
use a rectangular crop
Definition: lensfun.h:562
const char * lf_get_tca_model_desc(enum lfTCAModel model, const char **details, const lfParameter ***params)
cbool lf_modifier_add_subpixel_callback_TCA(lfModifier *modifier, lfLensCalibTCA *model, cbool reverse)
const lfMount * lf_db_find_mount(const lfDatabase *db, const char *mount)
#define C_TYPEDEF(t, c)
Helper macro to make C/C++ work similarly.
Definition: lensfun.h:29
equisolid fisheye
Definition: lensfun.h:652
fisheye Thoby (for Nikkor 10.5)
Definition: lensfun.h:654
const lfMount *const * lf_db_get_mounts(const lfDatabase *db)
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:498
cbool lf_lens_interpolate_crop(const lfLens *lens, float focal, lfLensCalibCrop *res)
This is the Red pixel component.
Definition: lensfun.h:1554
This is the Green pixel component.
Definition: lensfun.h:1556
#define LF_EXPORT
This macro expands to an appropiate symbol visibility declaration.
Definition: lensfun.h:60
void lf_camera_destroy(lfCamera *camera)
Destroy a lfCamera object.
lfLens * lf_lens_new()
Create a new lens object.
float Min
Minimal value that has sense.
Definition: lensfun.h:617
float Max
Maximal value that has sense.
Definition: lensfun.h:619
Unknown lens type.
Definition: lensfun.h:632
cbool lf_modifier_apply_color_modification(lfModifier *modifier, void *pixels, float x, float y, int width, int height, int comp_role, int row_stride)
const lfCamera ** lf_db_find_cameras_ext(const lfDatabase *db, const char *maker, const char *model, int sflags)
A modifier object contains optimized data required to rectify a image.
Definition: lensfun.h:1706
cbool lf_camera_check(lfCamera *camera)
This marks the end of the role list.
Definition: lensfun.h:1541
float CropFactor
Camera crop factor (ex: 1.0).
Definition: lensfun.h:283
const char * lf_mlstr_get(const lfMLstr str)
Get a string corresponding to current locale from a multi-language string.
void lf_camera_copy(lfCamera *dest, const lfCamera *source)
Copy the data from one lfCamera structure into another.
Wrong XML data format.
Definition: lensfun.h:98
This flag selects a looser search algorithm resulting in more results (still sorted by score)...
Definition: lensfun.h:1129
float Distance
Distance to subject (important only for vignetting)
Definition: lensfun.h:547
void lf_lens_add_calib_distortion(lfLens *lens, const lfLensCalibDistortion *dc)
cbool lf_lens_remove_calib_fov(lfLens *lens, int idx)
void lf_modifier_destroy(lfModifier *modifier)
float Aperture
Aperture at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:545
This is the Blue pixel component.
Definition: lensfun.h:1558
cbool lf_modifier_apply_geometry_distortion(lfModifier *modifier, float xu, float yu, int width, int height, float *res)
lfCamera * lf_camera_new()
Create a new camera object.
float MaxFocal
Maximum focal length, mm (ex: 105).
Definition: lensfun.h:678
Correct (or apply) lens transversal chromatic aberrations.
Definition: lensfun.h:1502
void lf_mount_copy(lfMount *dest, const lfMount *source)
Copy the data from one lfMount structure into another.
lfComponentRole
These constants define the role of every pixel component, four bits each.
Definition: lensfun.h:1535
const char * lf_get_lens_type_desc(enum lfLensType type, const char **details)
char ** Mounts
Available mounts (NULL-terminated list) (ex: { "QBM", NULL })
Definition: lensfun.h:684
Equirectangular (not that there are such lenses, but useful to convert images TO this type...
Definition: lensfun.h:646
Correct (or apply) lens color contribution index.
Definition: lensfun.h:1506
This value tells that what follows applies to next pixel.
Definition: lensfun.h:1548
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:448
float Focal
Focal length at which this calibration data was taken (0 - unspecified)
Definition: lensfun.h:597
cbool lf_lens_interpolate_tca(const lfLens *lens, float focal, lfLensCalibTCA *res)
void lf_lens_destroy(lfLens *lens)
Destroy a lfLens object.
Apply all possible corrections.
Definition: lensfun.h:1514
const lfLens ** lf_db_find_lenses(const lfDatabase *db, const lfLens *lens, int sflags)
void lf_db_destroy(lfDatabase *db)
Destroy the database object.
cbool lf_modifier_add_color_callback_CCI(lfModifier *modifier, const lfLens *lens, lfPixelFormat format, cbool reverse)
Fisheye lens Ref: http://wiki.panotools.org/Fisheye_Projection.
Definition: lensfun.h:639
lfError lf_db_load_data(lfDatabase *db, const char *errcontext, const char *data, size_t data_size)
cbool lf_modifier_add_coord_callback_geometry(lfModifier *modifier, lfLensType from, lfLensType to, float focal)
void lf_modifier_add_color_callback(lfModifier *modifier, lfModifyColorFunc callback, int priority, void *data, size_t data_size)
Unsigned 32-bit R,G,B.
Definition: lensfun.h:1525
No TCA correction data is known.
Definition: lensfun.h:467
lfMLstr Model
Model name (ex: "Rolleiflex SL35") – same as in EXIF.
Definition: lensfun.h:277
const char * lf_get_crop_desc(enum lfCropMode mode, const char **details, const lfParameter ***params)
lfLensCalibFov ** CalibFov
Field of view calibration data, NULL-terminated (unsorted)
Definition: lensfun.h:716
lfMLstr Maker
Camera maker (ex: "Rollei") – same as in EXIF.
Definition: lensfun.h:275
No error occured.
Definition: lensfun.h:96
lfDatabase * lf_db_new(void)
Create a new empty database object.
cbool lf_lens_check(lfLens *lens)
const char * lf_get_vignetting_model_desc(enum lfVignettingModel model, const char **details, const lfParameter ***params)
char * Mount
Camera mount type (ex: "QBM")
Definition: lensfun.h:281
char * lfMLstr
The storage of "multi-language" strings is simple yet flexible, handy and effective.
Definition: lensfun.h:90
A lens database object.
Definition: lensfun.h:1154
void lf_lens_add_calib_crop(lfLens *lens, const lfLensCalibCrop *cc)
const lfLens *const * lf_db_get_lenses(const lfDatabase *db)
Pablo D'Angelo vignetting model (which is a more general variant of the cos^4 law): Cd = Cs * (1 + k1...
Definition: lensfun.h:526
Distortion parameters are unknown.
Definition: lensfun.h:411
lfMLstr Name
Camera mount name.
Definition: lensfun.h:169
Lens vignetting calibration data.
Definition: lensfun.h:538
lfMLstr lf_mlstr_add(lfMLstr str, const char *lang, const char *trstr)
Add a new translated string to a multi-language string.
No vignetting correction data is known.
Definition: lensfun.h:519
void lf_lens_add_calib_vignetting(lfLens *lens, const lfLensCalibVignetting *vc)
lfError lf_db_save_all(const lfDatabase *db, const char *filename)
cbool lf_lens_interpolate_vignetting(const lfLens *lens, float focal, float aperture, float distance, lfLensCalibVignetting *res)
lfTCAModel
The lensdb library supports several models for lens lateral chromatic aberrations (also called transv...
Definition: lensfun.h:464
cbool lf_modifier_add_coord_callback_distortion(lfModifier *modifier, lfLensCalibDistortion *model, cbool reverse)
float Default
Default value for the parameter.
Definition: lensfun.h:621
lfMount * lf_mount_new()
Create a new mount object.
lfCropMode
Different crop modes.
Definition: lensfun.h:557
Struct to save calibrated field of view, which can depends on the focal length.
Definition: lensfun.h:594
lfLensCalibCrop ** CalibCrop
Crop data, NULL-terminated (unsorted)
Definition: lensfun.h:714
Camera data.
Definition: lensfun.h:272
char * lf_db_save(const lfMount *const *mounts, const lfCamera *const *cameras, const lfLens *const *lenses)
lfMLstr lf_mlstr_dup(const lfMLstr str)
Create a complete copy of a multi-language string.
lfMLstr Variant
Camera variant.
Definition: lensfun.h:279
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
Struct to save image crop, which can depend on the focal length.
Definition: lensfun.h:572
void lf_lens_add_calib_fov(lfLens *lens, const lfLensCalibFov *cf)
32-bit floating-point R,G,B
Definition: lensfun.h:1527
lfError lf_db_save_file(const lfDatabase *db, const char *filename, const lfMount *const *mounts, const lfCamera *const *cameras, const lfLens *const *lenses)
const char * Name
Parameter name (something like 'k', 'k3', 'omega' etc.
Definition: lensfun.h:615
This structure describes a single parameter for some lens model.
Definition: lensfun.h:612
lfError lf_db_load(lfDatabase *db)
cbool lf_lens_remove_calib_distortion(lfLens *lens, int idx)
char * HomeDataDir
Home lens database directory (something like "~/.local/share/lensfun")
Definition: lensfun.h:1157
float MaxAperture
Aperture at maximum focal length (ex: 4.3).
Definition: lensfun.h:682