lfDatabase Struct Reference
[Database functions]

A lens database object. More...

#include <lensfun.h>

List of all members.

Public Member Functions

void Destroy ()
 Destroy the database object and free all loaded data.
lfError Load ()
 Load the whole lens database.
lfError Load (const char *filename)
 Load just a specific XML file.
lfError Load (const char *errcontext, const char *data, size_t data_size)
 Load a set of camera/lenses from a memory array.
lfError Save (const char *filename) const
 Save the whole database to a file.
lfError Save (const char *filename, const lfMount *const *mounts, const lfCamera *const *cameras, const lfLens *const *lenses) const
 Save a set of camera and lens descriptions to a file.
const lfCamera ** FindCameras (const char *maker, const char *model) const
 Find a set of cameras that fit given criteria.
const lfCamera ** FindCamerasExt (const char *maker, const char *model, int sflags=0) const
 This function is somewhat similar to FindCameras(), but uses a different search algorithm.
const lfCamera *const * GetCameras () const
 Retrieve a full list of cameras.
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.5-5.6 DL IF") and return a list of lfLens'es which are matching this description.
const lfLens ** FindLenses (const lfLens *lens, int sflags=0) const
 Find a set of lenses that fit certain criteria.
const lfLens *const * GetLenses () const
 Retrieve a full list of lenses.
const lfMountFindMount (const char *mount) const
 Return the lfMount structure given the (basic) mount name.
const char * MountName (const char *mount) const
 Get the name of a mount in current locale.
const lfMount *const * GetMounts () const
 Retrieve a full list of mounts.

Static Public Member Functions

static lfDatabaseCreate ()
 Create a new empty database object.
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.

Public Attributes

char * HomeDataDir
 Home lens database directory (something like "~/.local/share/lensfun").


Detailed Description

A lens database object.

This object contains a list of mounts, cameras and lenses through which you can search. The objects are loaded from XML files located in (default configuration):

/usr/share/lensfun/
/usr/local/share/lensfun/
~/.local/share/lensfun/

Objects loaded later override objects loaded earlier. Thus, if user modifies a object you must save it to its home directory (see lfDatabase::HomeDataDir), where it will override any definitions from the system-wide database.

You cannot create and destroy objects of this type directly; instead use the lf_db_new() / lf_db_destroy() functions or the lfDatabase::Create() / lfDatabase::Destroy() methods.

Examples:

example.c, tfun.cpp, and tmod.cpp.


Member Function Documentation

lfError lfDatabase::Load (  ) 

Load the whole lens database.

This calls lf_load_file() for all XML files found in usual places (first /usr/share/lensdb/ then ~/.lensdb/).

Returns:
LF_NO_ERROR or a error code.
Examples:
tfun.cpp, and tmod.cpp.

lfError lfDatabase::Load ( const char *  filename  ) 

Load just a specific XML file.

If the loaded file contains the specification of a camera/lens that's already in memory, it overrides that data.

Parameters:
filename The name of a XML file to load. Note that lensdb does not support the full XML specification as it uses the glib's simple XML parser, so advanced XML features are not available.
Returns:
LF_NO_ERROR or a error code.

lfError lfDatabase::Load ( const char *  errcontext,
const char *  data,
size_t  data_size 
)

Load a set of camera/lenses from a memory array.

This is the lowest-level loading function.

Parameters:
errcontext The error context to be displayed in error messages (usually this is the name of the file to which data belongs).
data The XML data.
data_size XML data size in bytes.
Returns:
LF_NO_ERROR or a error code.

lfError lfDatabase::Save ( const char *  filename  )  const

Save the whole database to a file.

Parameters:
filename The file name to write the XML stream into.
Returns:
LF_NO_ERROR or a error code.
Examples:
tfun.cpp.

lfError lfDatabase::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.

Parameters:
filename The file name to write the XML stream into.
mounts A list of mounts to be written to the file. Can be NULL.
cameras A list of cameras to be written to the file. Can be NULL.
lenses A list of lenses to be written to the file. Can be NULL.
Returns:
LF_NO_ERROR or a error code.

static char* lfDatabase::Save ( const lfMount *const *  mounts,
const lfCamera *const *  cameras,
const lfLens *const *  lenses 
) [static]

Save a set of camera and lens descriptions into a memory array.

Parameters:
mounts A list of mounts to be written to the file. Can be NULL.
cameras A list of cameras to be written to the file. Can be NULL.
lenses A list of lenses to be written to the file. Can be NULL.
Returns:
A pointer to an allocated string with the output. Free it with lf_free().

const lfCamera** lfDatabase::FindCameras ( const char *  maker,
const char *  model 
) const

Find a set of cameras that fit given criteria.

The maker and model must be given (if possible) exactly as they are spelled in database, except that the library will compare case-insensitively and will compress spaces. This means that the database must contain camera maker/lens *exactly* how it is given in EXIF data, but you may add human-friendly translations of them using the multi-language string feature (including a translation to "en" to avoid displaying EXIF tags in user interface - they are often upper-case which looks ugly).

Parameters:
maker Camera maker (either from EXIF tags or from some other source). The string is expected to be pure ASCII, since EXIF data does not allow 8-bit data to be used.
model Camera model (either from EXIF tags or from some other source). The string is expected to be pure ASCII, since EXIF data does not allow 8-bit data to be used.
Returns:
A NULL-terminated list of cameras matching the search criteria or NULL if none. Release return value with lf_free() (only the list of pointers, not the camera objects!).
Examples:
tfun.cpp.

const lfCamera** lfDatabase::FindCamerasExt ( const char *  maker,
const char *  model,
int  sflags = 0 
) const

This function is somewhat similar to FindCameras(), but uses a different search algorithm.

It will search all translations of camera maker and model, thus you may search for a user-entered camera even in a language different from English.

This is a lot slower than FindCameras().

Parameters:
maker Camera maker. This can be any UTF-8 string.
model Camera model. This can be any UTF-8 string.
sflags Additional flags influencing the search algorithm. This is a combination of LF_SEARCH_XXX flags.
Returns:
A NULL-terminated list of cameras matching the search criteria or NULL if none. Release return value with lf_free() (only the list of pointers, not the camera objects!).

const lfCamera* const* lfDatabase::GetCameras (  )  const

Retrieve a full list of cameras.

Returns:
An NULL-terminated list containing all cameras loaded until now. The list is valid only until the lens database is modified. The returned pointer does not have to be freed.

const lfLens** lfDatabase::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.5-5.6 DL IF") and return a list of lfLens'es which are matching this description.

Multiple lenses may be returned if multiple lenses match (perhaps due to non-unique lens description provided, e.g. "Pentax SMC").

The matching algorithm works as follows: first the user description is tried to be interpreted according to several well-known lens naming schemes, so additional data like focal and aperture ranges are extracted if they are present. After that word matching is done; a lens matches the description ONLY IF it contains all the words found in the description (including buzzwords e.g. IF IZ AL LD DI USM SDM etc). Order of the words does not matter. An additional check is done on the focal/aperture ranges, they must exactly match if they are specified.

Parameters:
camera The camera (can be NULL if camera is unknown, or just certain fields in structure can be NULL). The algorithm will look for a lens with crop factor not less than of given camera, since the mathematical models of the lens can be incorrect for sensor sizes larger than the one used for calibration. Also camera mount is taken into account, the lenses with incompatible mounts will be filtered out.
maker Lens maker or NULL if not known.
model A human description of the lens model(-s).
sflags Additional flags influencing the search algorithm. This is a combination of LF_SEARCH_XXX flags.
Returns:
A list of lenses parsed from user description or NULL. Release memory with lf_free(). The list is ordered in the most-likely to least-likely order, e.g. the first returned value is the most likely match.
Examples:
tfun.cpp, and tmod.cpp.

const lfLens** lfDatabase::FindLenses ( const lfLens lens,
int  sflags = 0 
) const

Find a set of lenses that fit certain criteria.

Parameters:
lens The approximative lense. Uncertain fields may be NULL. The "CropFactor" field defines the minimal value for crop factor; no lenses with crop factor less than that will be returned. The Mounts field will be scanned for allowed mounts, if NULL any mounts are considered compatible.
sflags Additional flags influencing the search algorithm. This is a combination of LF_SEARCH_XXX flags.
Returns:
A NULL-terminated list of lenses matching the search criteria or NULL if none. Release memory with lf_free(). The list is ordered in the most-likely to least-likely order, e.g. the first returned value is the most likely match.

const lfLens* const* lfDatabase::GetLenses (  )  const

Retrieve a full list of lenses.

Returns:
An NULL-terminated list containing all lenses loaded until now. The list is valid only until the lens database is modified. The returned pointer does not have to be freed.

const lfMount* lfDatabase::FindMount ( const char *  mount  )  const

Return the lfMount structure given the (basic) mount name.

Parameters:
mount The basic mount name.
Returns:
A pointer to lfMount structure or NULL.
Examples:
tfun.cpp.

const char* lfDatabase::MountName ( const char *  mount  )  const

Get the name of a mount in current locale.

Parameters:
mount The basic mount name.
Returns:
The name of the mount in current locale (UTF-8 string).

const lfMount* const* lfDatabase::GetMounts (  )  const

Retrieve a full list of mounts.

Returns:
An array containing all mounts loaded until now. The list is valid only until the mount database is modified. The returned pointer does not have to be freed.


The documentation for this struct was generated from the following file:
Generated on Tue Aug 10 16:15:56 2010 for lensfun by  doxygen 1.5.4