lensfun  0.3.3.0
tfun.cpp

This example shows how to do basic database lookups.

/*
Test for database search functions.
*/
#include "lensfun.h"
#include <glib.h>
#include <getopt.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
static void DisplayVersion ()
{
g_print ("Lensfun version %d.%d.%d: test database search routines\n",
g_print ("Copyright (C) 2007 Andrew Zabolotny\n\n");
g_print ("For distribution rules and conditions of use see the file\n");
g_print ("COPYING which is part of the distribution.\n");
}
static void DisplayUsage ()
{
DisplayVersion ();
g_print ("\nIf no options are given, some standard tests will be run.\n");
g_print ("Command-line options:\n\n");
g_print (" -L# --lens=# Use calibration data for this lens\n");
g_print (" -m# --max=# Limit the amount results\n");
g_print (" -f --fuzzy More fuzzy search algorithm\n");
g_print (" -V --version Display program version and exit\n");
g_print (" -h --help Display this help text\n");
}
static void PrintMount (const lfMount *mount)
{
g_print ("Mount: %s\n", lf_mlstr_get (mount->Name));
if (mount->Compat)
for (int j = 0; mount->Compat [j]; j++)
g_print ("\tCompat: %s\n", mount->Compat [j]);
}
static void PrintCamera (const lfCamera *camera, const lfDatabase *ldb)
{
g_print ("Camera: %s / %s %s%s%s\n",
lf_mlstr_get (camera->Maker),
lf_mlstr_get (camera->Model),
camera->Variant ? "(" : "",
camera->Variant ? lf_mlstr_get (camera->Variant) : "",
camera->Variant ? ")" : "");
g_print ("\tMount: %s\n", lf_db_mount_name (ldb, camera->Mount));
g_print ("\tCrop factor: %g\n", camera->CropFactor);
}
static void PrintLens (const lfLens *lens, const lfDatabase *ldb)
{
g_print ("Lens: %s / %s\n",
lf_mlstr_get (lens->Model));
g_print ("\tCrop factor: %g\n", lens->CropFactor);
g_print ("\tAspect ratio: %g\n", lens->AspectRatio);
g_print ("\tFocal: %g-%g\n", lens->MinFocal, lens->MaxFocal);
g_print ("\tAperture: %g-%g\n", lens->MinAperture, lens->MaxAperture);
g_print ("\tCenter: %g,%g\n", lens->CenterX, lens->CenterY);
if (lens->Mounts)
for (int j = 0; lens->Mounts [j]; j++)
g_print ("\tMount: %s\n", lf_db_mount_name (ldb, lens->Mounts [j]));
}
static void PrintCameras (const lfCamera **cameras, const lfDatabase *ldb, int maxEntries=-1)
{
if (cameras)
for (int i = 0; cameras [i]; i++)
{
g_print ("--- camera %d: ---\n", i + 1);
PrintCamera (cameras [i], ldb);
if ((maxEntries > 0) && (i>=maxEntries-1))
break;
}
else
g_print ("\t- failed\n");
}
static void PrintLenses (const lfLens **lenses, const lfDatabase *ldb, int maxEntries=-1)
{
if (lenses)
for (int i = 0; lenses [i]; i++)
{
g_print ("--- lens %d, score %d: ---\n", i + 1, lenses [i]->Score);
PrintLens (lenses [i], ldb);
if ((maxEntries > 0) && (i>=maxEntries-1))
break;
}
else
g_print ("\t- failed\n");
}
int main (int argc, char **argv)
{
static struct option long_options[] =
{
{"lens", required_argument, NULL, 'L'},
{"max", required_argument, NULL, 'm'},
{"fuzzy", no_argument, NULL, 'f'},
{"help", no_argument, NULL, 'h'},
{"version", no_argument, NULL, 'V'},
{0, 0, 0, 0}
};
static struct
{
int maxResults;
bool fuzzySearch;
const char *Lens;
} opts =
{
-1,
0,
NULL,
};
setlocale (LC_ALL, "");
int c;
while ((c = getopt_long (argc, argv, "L:m:fhV", long_options, NULL)) != EOF)
{
switch (c)
{
case'L':
opts.Lens = optarg;
break;
case 'm':
opts.maxResults = atoi(optarg);
break;
case 'f':
opts.fuzzySearch = LF_SEARCH_LOOSE;
break;
case 'h':
DisplayUsage();
return 0;
case 'V':
DisplayVersion ();
return 0;
default:
return -1;
}
}
lfDatabase *ldb = lf_db_new ();
ldb->Load ();
if (opts.Lens == NULL)
{
g_print ("No lens name is given\n");
DisplayUsage();
ldb->Destroy ();
return -1;
}
g_print (">>> Looking for lens '%s' %d\n", opts.Lens, opts.fuzzySearch);
const lfLens **lenses = ldb->FindLenses (NULL, NULL, opts.Lens, opts.fuzzySearch);
PrintLenses (lenses, ldb, opts.maxResults);
lf_free (lenses);
ldb->Destroy ();
return 0;
}
void lf_free(void *data)
#define LF_VERSION_MICRO
Library micro version number.
Definition: lensfun.h:53
#define LF_VERSION_MAJOR
Major library version number.
Definition: lensfun.h:49
const char * lf_mlstr_get(const lfMLstr str)
Get a string corresponding to current locale from a multi-language string.
#define LF_VERSION_MINOR
Minor library version number.
Definition: lensfun.h:51
const char * lf_db_mount_name(const lfDatabase *db, const char *mount)
lfDatabase * lf_db_new(void)
Create a new empty database object.
@ LF_SEARCH_LOOSE
This flag selects a looser search algorithm resulting in more results (still sorted by score).
Definition: lensfun.h:1327
Camera data. Unknown fields are set to NULL.
Definition: lensfun.h:321
lfMLstr Model
Model name (ex: "Rolleiflex SL35") – same as in EXIF.
Definition: lensfun.h:325
lfMLstr Variant
Camera variant. Some cameras use same EXIF id for different models.
Definition: lensfun.h:327
lfMLstr Maker
Camera maker (ex: "Rollei") – same as in EXIF.
Definition: lensfun.h:323
char * Mount
Camera mount type (ex: "QBM")
Definition: lensfun.h:329
float CropFactor
Camera crop factor (ex: 1.0). Must be defined.
Definition: lensfun.h:331
A lens database object.
Definition: lensfun.h:1362
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....
DEPRECATED void Destroy()
Destroy the database object and free all loaded data.
lfError Load()
Find and load the lens database.
Lens data. Unknown fields are set to NULL or 0.
Definition: lensfun.h:802
char ** Mounts
Definition: lensfun.h:816
lfMLstr Model
Definition: lensfun.h:806
lfMLstr Maker
Definition: lensfun.h:804
float CropFactor
Definition: lensfun.h:830
float CenterY
Definition: lensfun.h:828
float MinFocal
Definition: lensfun.h:808
float MaxFocal
Definition: lensfun.h:810
float MinAperture
Definition: lensfun.h:812
float AspectRatio
Definition: lensfun.h:832
float MaxAperture
Definition: lensfun.h:814
float CenterX
Definition: lensfun.h:826
This structure contains everything specific to a camera mount.
Definition: lensfun.h:204
lfMLstr Name
Camera mount name.
Definition: lensfun.h:210
char ** Compat
Definition: lensfun.h:212