lensfun 0.2.5.1

lensfun.h

Go to the documentation of this file.
00001 /*
00002     LensFun - a library for maintaining a database of photographical lenses,
00003     and providing the means to correct some of the typical lens distortions.
00004     Copyright (C) 2007 by Andrew Zabolotny
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public
00017     License along with this library; if not, write to the Free
00018     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00019 */
00020 
00021 #ifndef __LENSFUN_H__
00022 #define __LENSFUN_H__
00023 
00024 #include <stddef.h>
00025 
00026 #ifdef __cplusplus
00027 extern "C" {
00029 #  define C_TYPEDEF(t,c)
00030 #else
00031 #  define C_TYPEDEF(t,c) typedef t c c;
00032 #endif
00033 
00039 /*----------------------------------------------------------------------------*/
00040 
00047 
00048 #define LF_VERSION_MAJOR        0
00049 
00050 #define LF_VERSION_MINOR        2
00051 
00052 #define LF_VERSION_MICRO        5
00053 
00054 #define LF_VERSION_BUGFIX       1
00055 
00056 #define LF_VERSION      ((LF_VERSION_MAJOR << 24) | (LF_VERSION_MINOR << 16) | (LF_VERSION_MICRO << 8) | LF_VERSION_BUGFIX)
00057 
00058 #if defined CONF_LENSFUN_STATIC
00059 
00060 #   define LF_EXPORT
00061 #else
00062 #   ifdef CONF_SYMBOL_VISIBILITY
00063 #       if defined PLATFORM_WINDOWS
00064 #           define LF_EXPORT    __declspec(dllexport)
00065 #       elif defined CONF_COMPILER_GCC
00066 #           define LF_EXPORT    __attribute__((visibility("default")))
00067 #       else
00068 #           error "I don't know how to change symbol visibility for your compiler"
00069 #       endif
00070 #   else
00071 #       if defined PLATFORM_WINDOWS || defined _MSC_VER
00072 #           define LF_EXPORT    __declspec(dllimport)
00073 #       else
00074 #           define LF_EXPORT
00075 #       endif
00076 #   endif
00077 #endif
00078 
00080 #define cbool int
00081 
00090 typedef char *lfMLstr;
00091 
00093 enum lfError
00094 {
00096     LF_NO_ERROR = 0,
00098     LF_WRONG_FORMAT
00099 };
00100 
00101 C_TYPEDEF (enum, lfError)
00102 
00103 
00111 LF_EXPORT void lf_free (void *data);
00112 
00119 LF_EXPORT const char *lf_mlstr_get (const lfMLstr str);
00120 
00136 LF_EXPORT lfMLstr lf_mlstr_add (lfMLstr str, const char *lang, const char *trstr);
00137 
00145 LF_EXPORT lfMLstr lf_mlstr_dup (const lfMLstr str);
00146 
00149 /*----------------------------------------------------------------------------*/
00150 
00166 struct LF_EXPORT lfMount
00167 {
00169     lfMLstr Name;
00171     char **Compat;
00172 
00173 #ifdef __cplusplus
00174 
00177     lfMount ();
00178 
00182     lfMount &operator = (const lfMount &other);
00183 
00187     ~lfMount ();
00188 
00197     void SetName (const char *val, const char *lang = NULL);
00198 
00204     void AddCompat (const char *val);
00205 
00211     bool Check ();
00212 #endif
00213 };
00214 
00215 C_TYPEDEF (struct, lfMount)
00216 
00217 
00224 LF_EXPORT lfMount *lf_mount_new ();
00225 
00234 LF_EXPORT void lf_mount_destroy (lfMount *mount);
00235 
00245 LF_EXPORT void lf_mount_copy (lfMount *dest, const lfMount *source);
00246 
00248 LF_EXPORT cbool lf_mount_check (lfMount *mount);
00249 
00252 /*----------------------------------------------------------------------------*/
00253 
00272 struct LF_EXPORT lfCamera
00273 {
00275     lfMLstr Maker;
00277     lfMLstr Model;
00279     lfMLstr Variant;
00281     char *Mount;
00283     float CropFactor;
00285     int Score;
00286 
00287 #ifdef __cplusplus
00288 
00291     lfCamera ();
00292 
00296     lfCamera (const lfCamera &other);
00297 
00301     ~lfCamera ();
00302 
00306     lfCamera &operator = (const lfCamera &other);
00307 
00316     void SetMaker (const char *val, const char *lang = NULL);
00317 
00326     void SetModel (const char *val, const char *lang = NULL);
00327 
00336     void SetVariant (const char *val, const char *lang = NULL);
00337 
00343     void SetMount (const char *val);
00344 
00350     bool Check ();
00351 #endif
00352 };
00353 
00354 C_TYPEDEF (struct, lfCamera)
00355 
00356 
00363 LF_EXPORT lfCamera *lf_camera_new ();
00364 
00373 LF_EXPORT void lf_camera_destroy (lfCamera *camera);
00374 
00384 LF_EXPORT void lf_camera_copy (lfCamera *dest, const lfCamera *source);
00385 
00387 LF_EXPORT cbool lf_camera_check (lfCamera *camera);
00388 
00391 /*----------------------------------------------------------------------------*/
00392 
00408 enum lfDistortionModel
00409 {
00411     LF_DIST_MODEL_NONE,
00417     LF_DIST_MODEL_POLY3,
00422     LF_DIST_MODEL_POLY5,
00428     LF_DIST_MODEL_FOV1,
00433     LF_DIST_MODEL_PTLENS,
00434 };
00435 
00436 C_TYPEDEF (enum, lfDistortionModel)
00437 
00438 
00443 struct lfLensCalibDistortion
00444 {
00446     enum lfDistortionModel Model;
00448     float Focal;
00450     float Terms [3];
00451 };
00452 
00453 C_TYPEDEF (struct, lfLensCalibDistortion)
00454 
00455 
00464 enum lfTCAModel
00465 {
00467     LF_TCA_MODEL_NONE,
00474     LF_TCA_MODEL_LINEAR,
00475 
00482     LF_TCA_MODEL_POLY3
00483 };
00484 
00485 C_TYPEDEF (enum, lfTCAModel)
00486 
00487 
00493 struct lfLensCalibTCA
00494 {
00496     enum lfTCAModel Model;
00498     float Focal;
00500     float Terms [6];
00501 };
00502 
00503 C_TYPEDEF (struct, lfLensCalibTCA)
00504 
00505 
00516 enum lfVignettingModel
00517 {
00519     LF_VIGNETTING_MODEL_NONE,
00526     LF_VIGNETTING_MODEL_PA
00527 };
00528 
00529 C_TYPEDEF (enum, lfVignettingModel)
00530 
00531 
00538 struct lfLensCalibVignetting
00539 {
00541     enum lfVignettingModel Model;
00543     float Focal;
00545     float Aperture;
00547     float Distance;
00549     float Terms [3];
00550 };
00551 
00552 C_TYPEDEF (struct, lfLensCalibVignetting)
00553 
00554 
00557 struct lfParameter
00558 {
00560     const char *Name;
00562     float Min;
00564     float Max;
00566     float Default;
00567 };
00568 
00569 C_TYPEDEF (struct, lfParameter)
00570 
00571 
00574 enum lfLensType
00575 {
00577     LF_UNKNOWN,
00579     LF_RECTILINEAR,
00584     LF_FISHEYE,
00586     LF_PANORAMIC,
00591     LF_EQUIRECTANGULAR
00592 };
00593 
00594 C_TYPEDEF (enum, lfLensType)
00595 
00596 
00606 struct LF_EXPORT lfLens
00607 {
00609     lfMLstr Maker;
00611     lfMLstr Model;
00613     float MinFocal;
00615     float MaxFocal;
00617     float MinAperture;
00619     float MaxAperture;
00621     char **Mounts;
00631     float CenterX;
00633     float CenterY;
00635     float RedCCI;
00637     float GreenCCI;
00639     float BlueCCI;
00641     float CropFactor;
00643     lfLensType Type;
00645     lfLensCalibDistortion **CalibDistortion;
00647     lfLensCalibTCA **CalibTCA;
00649     lfLensCalibVignetting **CalibVignetting;
00651     int Score;
00652 
00653 #ifdef __cplusplus
00654 
00657     lfLens ();
00658 
00662     lfLens (const lfLens &other);
00663 
00667     ~lfLens ();
00668 
00672     lfLens &operator = (const lfLens &other);
00673 
00682     void SetMaker (const char *val, const char *lang = NULL);
00683 
00692     void SetModel (const char *val, const char *lang = NULL);
00693 
00700     void AddMount (const char *val);
00701 
00709     void AddCalibDistortion (const lfLensCalibDistortion *dc);
00710 
00716     bool RemoveCalibDistortion (int idx);
00717 
00725     void AddCalibTCA (const lfLensCalibTCA *tcac);
00726 
00732     bool RemoveCalibTCA (int idx);
00733 
00741     void AddCalibVignetting (const lfLensCalibVignetting *vc);
00742 
00748     bool RemoveCalibVignetting (int idx);
00749 
00757     void GuessParameters ();
00758 
00764     bool Check ();
00765 
00781     static const char *GetDistortionModelDesc (
00782         lfDistortionModel model, const char **details, const lfParameter ***params);
00798     static const char *GetTCAModelDesc (
00799         lfTCAModel model, const char **details, const lfParameter ***params);
00800 
00816     static const char *GetVignettingModelDesc (
00817         lfVignettingModel model, const char **details, const lfParameter ***params);
00818 
00830     static const char *GetLensTypeDesc (lfLensType type, const char **details);
00831 
00839     bool InterpolateDistortion (float focal, lfLensCalibDistortion &res) const;
00840 
00848     bool InterpolateTCA (float focal, lfLensCalibTCA &res) const;
00849 
00862     bool InterpolateVignetting (
00863         float focal, float aperture, float distance, lfLensCalibVignetting &res) const;
00864 #endif
00865 };
00866 
00867 C_TYPEDEF (struct, lfLens)
00868 
00869 
00876 LF_EXPORT lfLens *lf_lens_new ();
00877 
00886 LF_EXPORT void lf_lens_destroy (lfLens *lens);
00887 
00897 LF_EXPORT void lf_lens_copy (lfLens *dest, const lfLens *source);
00898 
00900 LF_EXPORT cbool lf_lens_check (lfLens *lens);
00901 
00903 LF_EXPORT void lf_lens_guess_parameters (lfLens *lens);
00904 
00906 LF_EXPORT const char *lf_get_distortion_model_desc (
00907     enum lfDistortionModel model, const char **details, const lfParameter ***params);
00908 
00910 LF_EXPORT const char *lf_get_tca_model_desc (
00911     enum lfTCAModel model, const char **details, const lfParameter ***params);
00912 
00914 LF_EXPORT const char *lf_get_vignetting_model_desc (
00915     enum lfVignettingModel model, const char **details, const lfParameter ***params);
00916 
00918 LF_EXPORT const char *lf_get_lens_type_desc (
00919     enum lfLensType type, const char **details);
00920 
00922 LF_EXPORT cbool lf_lens_interpolate_distortion (const lfLens *lens, float focal,
00923     lfLensCalibDistortion *res);
00924 
00926 LF_EXPORT cbool lf_lens_interpolate_tca (const lfLens *lens, float focal, lfLensCalibTCA *res);
00927 
00929 LF_EXPORT cbool lf_lens_interpolate_vignetting (const lfLens *lens, float focal, float aperture,
00930     float distance, lfLensCalibVignetting *res);
00931 
00933 LF_EXPORT void lf_lens_add_calib_distortion (lfLens *lens, const lfLensCalibDistortion *dc);
00934 
00936 LF_EXPORT cbool lf_lens_remove_calib_distortion (lfLens *lens, int idx);
00937 
00939 LF_EXPORT void lf_lens_add_calib_tca (lfLens *lens, const lfLensCalibTCA *tcac);
00940 
00942 LF_EXPORT cbool lf_lens_remove_calib_tca (lfLens *lens, int idx);
00943 
00945 LF_EXPORT void lf_lens_add_calib_vignetting (lfLens *lens, const lfLensCalibVignetting *vc);
00946 
00948 LF_EXPORT cbool lf_lens_remove_calib_vignetting (lfLens *lens, int idx);
00949 
00952 /*----------------------------------------------------------------------------*/
00953 
00963 enum
00964 {
00970     LF_SEARCH_LOOSE = 1
00971 };
00972 
00995 struct LF_EXPORT lfDatabase
00996 {
00998     char *HomeDataDir;
00999 
01000 #ifdef __cplusplus
01001 
01004     static lfDatabase *Create ();
01005 
01009     void Destroy ();
01010 
01019     lfError Load ();
01020 
01032     lfError Load (const char *filename);
01033 
01047     lfError Load (const char *errcontext, const char *data, size_t data_size);
01048 
01056     lfError Save (const char *filename) const;
01057 
01071     lfError Save (const char *filename,
01072                   const lfMount *const *mounts,
01073                   const lfCamera *const *cameras,
01074                   const lfLens *const *lenses) const;
01075 
01088     static char *Save (const lfMount *const *mounts,
01089                        const lfCamera *const *cameras,
01090                        const lfLens *const *lenses);
01091 
01115     const lfCamera **FindCameras (const char *maker, const char *model) const;
01116 
01136     const lfCamera **FindCamerasExt (const char *maker, const char *model,
01137                                      int sflags = 0) const;
01138 
01146     const lfCamera *const *GetCameras () const;
01147 
01184     const lfLens **FindLenses (const lfCamera *camera, const char *maker,
01185                                const char *model, int sflags = 0) const;
01186 
01204     const lfLens **FindLenses (const lfLens *lens, int sflags = 0) const;
01205 
01213     const lfLens *const *GetLenses () const;
01214 
01222     const lfMount *FindMount (const char *mount) const;
01223 
01231     const char *MountName (const char *mount) const;
01232 
01240     const lfMount *const *GetMounts () const;
01241 
01242 protected:
01243     /* Prevent user from creating and destroying such objects */
01244     lfDatabase () {}
01245     ~lfDatabase () {}
01246 #endif
01247 };
01248 
01249 C_TYPEDEF (struct, lfDatabase)
01250 
01251 
01260 LF_EXPORT lfDatabase *lf_db_new (void);
01261 
01270 LF_EXPORT void lf_db_destroy (lfDatabase *db);
01271 
01273 LF_EXPORT lfError lf_db_load (lfDatabase *db);
01274 
01276 LF_EXPORT lfError lf_db_load_file (lfDatabase *db, const char *filename);
01277 
01279 LF_EXPORT lfError lf_db_load_data (lfDatabase *db, const char *errcontext,
01280                                    const char *data, size_t data_size);
01281 
01283 LF_EXPORT lfError lf_db_save_all (const lfDatabase *db, const char *filename);
01284 
01286 LF_EXPORT lfError lf_db_save_file (const lfDatabase *db, const char *filename,
01287                                    const lfMount *const *mounts,
01288                                    const lfCamera *const *cameras,
01289                                    const lfLens *const *lenses);
01290 
01292 LF_EXPORT char *lf_db_save (const lfMount *const *mounts,
01293                             const lfCamera *const *cameras,
01294                             const lfLens *const *lenses);
01295 
01297 LF_EXPORT const lfCamera **lf_db_find_cameras (
01298     const lfDatabase *db, const char *maker, const char *model);
01299 
01301 LF_EXPORT const lfCamera **lf_db_find_cameras_ext (
01302     const lfDatabase *db, const char *maker, const char *model, int sflags);
01303 
01305 LF_EXPORT const lfCamera *const *lf_db_get_cameras (const lfDatabase *db);
01306 
01308 LF_EXPORT const lfLens **lf_db_find_lenses_hd (
01309     const lfDatabase *db, const lfCamera *camera, const char *maker,
01310     const char *lens, int sflags);
01311 
01313 LF_EXPORT const lfLens **lf_db_find_lenses (
01314     const lfDatabase *db, const lfLens *lens, int sflags);
01315 
01317 LF_EXPORT const lfLens *const *lf_db_get_lenses (const lfDatabase *db);
01318 
01320 LF_EXPORT const lfMount *lf_db_find_mount (const lfDatabase *db, const char *mount);
01321 
01323 LF_EXPORT const char *lf_db_mount_name (const lfDatabase *db, const char *mount);
01324 
01326 LF_EXPORT const lfMount *const *lf_db_get_mounts (const lfDatabase *db);
01327 
01330 /*----------------------------------------------------------------------------*/
01331 
01340 enum
01341 {
01343     LF_MODIFY_TCA        = 0x00000001,
01345     LF_MODIFY_VIGNETTING = 0x00000002,
01347     LF_MODIFY_CCI        = 0x00000004,
01349     LF_MODIFY_DISTORTION = 0x00000008,
01351     LF_MODIFY_GEOMETRY   = 0x00000010,
01353     LF_MODIFY_SCALE      = 0x00000020,
01355     LF_MODIFY_ALL        = ~0
01356 };
01357 
01359 enum lfPixelFormat
01360 {
01362     LF_PF_U8,
01364     LF_PF_U16,
01366     LF_PF_U32,
01368     LF_PF_F32,
01370     LF_PF_F64
01371 };
01372 
01373 C_TYPEDEF (enum, lfPixelFormat)
01374 
01375 
01376 enum lfComponentRole
01377 {
01382     LF_CR_END = 0,
01389     LF_CR_NEXT,
01391     LF_CR_UNKNOWN,
01393     LF_CR_INTENSITY,
01395     LF_CR_RED,
01397     LF_CR_GREEN,
01399     LF_CR_BLUE
01400 };
01401 
01402 C_TYPEDEF (enum, lfComponentRole)
01403 
01404 
01405 #define LF_CR_1(a)              (LF_CR_ ## a)
01406 
01407 #define LF_CR_2(a,b)            ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4))
01408 
01409 #define LF_CR_3(a,b,c)          ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
01410                                  ((LF_CR_ ## c) << 8))
01411 
01412 #define LF_CR_4(a,b,c,d)        ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
01413                                  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12))
01414 
01415 #define LF_CR_5(a,b,c,d,e)      ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
01416                                  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
01417                                  ((LF_CR_ ## e) << 16))
01418 
01419 #define LF_CR_6(a,b,c,d,e,f)    ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
01420                                  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
01421                                  ((LF_CR_ ## e) << 16) | ((LF_CR_ ## f) << 20))
01422 
01423 #define LF_CR_7(a,b,c,d,e,f,g)   ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
01424                                  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
01425                                  ((LF_CR_ ## e) << 16) | ((LF_CR_ ## f) << 20) | \
01426                                  ((LF_CR_ ## g) << 24))
01427 
01428 #define LF_CR_8(a,b,c,d,e,f,g,h) ((LF_CR_ ## a) | ((LF_CR_ ## b) << 4) | \
01429                                  ((LF_CR_ ## c) << 8) | ((LF_CR_ ## d) << 12) | \
01430                                  ((LF_CR_ ## e) << 16) | ((LF_CR_ ## f) << 20) | \
01431                                  ((LF_CR_ ## g) << 24) | ((LF_CR_ ## h) << 28))
01432 
01447 typedef void (*lfSubpixelCoordFunc) (void *data, float *iocoord, int count);
01448 
01472 typedef void (*lfModifyColorFunc) (void *data, float x, float y,
01473                                    void *pixels, int comp_role, int count);
01474 
01486 typedef void (*lfModifyCoordFunc) (void *data, float *iocoord, int count);
01487 
01547 struct LF_EXPORT lfModifier
01548 {
01549 #ifdef __cplusplus
01550 
01570     static lfModifier *Create (const lfLens *lens, float crop, int width, int height);
01571 
01612     int Initialize (
01613         const lfLens *lens, lfPixelFormat format, float focal, float aperture,
01614         float distance, float scale, lfLensType targeom, int flags, bool reverse);
01615 
01620     void Destroy ();
01621 
01638     void AddCoordCallback (lfModifyCoordFunc callback, int priority,
01639                            void *data, size_t data_size);
01640 
01658     void AddSubpixelCallback (lfSubpixelCoordFunc callback, int priority,
01659                               void *data, size_t data_size);
01660 
01677     void AddColorCallback (lfModifyColorFunc callback, int priority,
01678                            void *data, size_t data_size);
01679 
01693     bool AddSubpixelCallbackTCA (lfLensCalibTCA &model, bool reverse = false);
01694 
01709     bool AddColorCallbackVignetting (lfLensCalibVignetting &model, lfPixelFormat format,
01710                                      bool reverse = false);
01711 
01726     bool AddColorCallbackCCI (const lfLens *lens, lfPixelFormat format,
01727                               bool reverse = false);
01728 
01741     bool AddCoordCallbackDistortion (lfLensCalibDistortion &model, bool reverse = false);
01742 
01755     bool AddCoordCallbackGeometry (lfLensType from, lfLensType to, float focal);
01756 
01772     bool AddCoordCallbackScale (float scale, bool reverse = false);
01773 
01786     float GetAutoScale (bool reverse);
01787 
01816     bool ApplySubpixelDistortion (float xu, float yu, int width, int height,
01817                                   float *res) const;
01818 
01847     bool ApplyColorModification (void *pixels, float x, float y, int width, int height,
01848                                  int comp_role, int row_stride) const;
01849 
01876     bool ApplyGeometryDistortion (float xu, float yu, int width, int height,
01877                                   float *res) const;
01878 
01906     bool ApplySubpixelGeometryDistortion (float xu, float yu, int width, int height,
01907                                           float *res) const;
01908 
01909 protected:
01910     /* Prevent user from creating and destroying such objects */
01911     lfModifier () {}
01912     ~lfModifier () {}
01913 #elif defined _MSC_VER
01914     /* Sucks, like always */
01915     void *dummy;
01916 #endif
01917 };
01918 
01919 C_TYPEDEF (struct, lfModifier)
01920 
01921 
01922 LF_EXPORT lfModifier *lf_modifier_new (
01923     const lfLens *lens, float crop, int width, int height);
01924 
01926 LF_EXPORT void lf_modifier_destroy (lfModifier *modifier);
01927 
01929 LF_EXPORT int lf_modifier_initialize (
01930     lfModifier *modifier, const lfLens *lens, lfPixelFormat format,
01931     float focal, float aperture, float distance, float scale,
01932     lfLensType targeom, int flags, cbool reverse);
01933 
01935 LF_EXPORT void lf_modifier_add_coord_callback (
01936     lfModifier *modifier, lfModifyCoordFunc callback, int priority,
01937     void *data, size_t data_size);
01938 
01940 LF_EXPORT void lf_modifier_add_subpixel_callback (
01941     lfModifier *modifier, lfSubpixelCoordFunc callback, int priority,
01942     void *data, size_t data_size);
01943 
01945 LF_EXPORT void lf_modifier_add_color_callback (
01946     lfModifier *modifier, lfModifyColorFunc callback, int priority,
01947     void *data, size_t data_size);
01948 
01950 LF_EXPORT cbool lf_modifier_add_subpixel_callback_TCA (
01951     lfModifier *modifier, lfLensCalibTCA *model, cbool reverse);
01952 
01954 LF_EXPORT cbool lf_modifier_add_color_callback_vignetting (
01955     lfModifier *modifier, lfLensCalibVignetting *model,
01956     lfPixelFormat format, cbool reverse);
01957 
01959 LF_EXPORT cbool lf_modifier_add_color_callback_CCI (
01960     lfModifier *modifier, const lfLens *lens,
01961     lfPixelFormat format, cbool reverse);
01962 
01964 LF_EXPORT cbool lf_modifier_add_coord_callback_distortion (
01965     lfModifier *modifier, lfLensCalibDistortion *model, cbool reverse);
01966 
01968 LF_EXPORT cbool lf_modifier_add_coord_callback_geometry (
01969     lfModifier *modifier, lfLensType from, lfLensType to, float focal);
01970 
01972 LF_EXPORT cbool lf_modifier_add_coord_callback_scale (
01973     lfModifier *modifier, float scale, cbool reverse);
01974 
01976 LF_EXPORT float lf_modifier_get_auto_scale (
01977     lfModifier *modifier, cbool reverse);
01978 
01980 LF_EXPORT cbool lf_modifier_apply_subpixel_distortion (
01981     lfModifier *modifier, float xu, float yu, int width, int height, float *res);
01982 
01984 LF_EXPORT cbool lf_modifier_apply_color_modification (
01985     lfModifier *modifier, void *pixels, float x, float y, int width, int height,
01986     int comp_role, int row_stride);
01987 
01989 LF_EXPORT cbool lf_modifier_apply_geometry_distortion (
01990     lfModifier *modifier, float xu, float yu, int width, int height, float *res);
01991 
01993 LF_EXPORT cbool lf_modifier_apply_subpixel_geometry_distortion (
01994     lfModifier *modifier, float xu, float yu, int width, int height, float *res);
01995 
01998 #undef cbool
01999 
02000 #ifdef __cplusplus
02001 }
02002 #endif
02003 
02004 #endif /* __LENSFUN_H__ */