lensfun 0.2.5.1
|
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__ */