lensfun 0.3.95.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:68
const char * lf_mlstr_get(const lfMLstr str)
Get a string corresponding to current locale from a multi-language string.
#define LF_VERSION_MAJOR
Major library version number.
Definition lensfun.h:64
#define LF_VERSION_MINOR
Minor library version number.
Definition lensfun.h:66
DEPRECATED lfDatabase * lf_db_new(void)
Create a new empty database object.
const char * lf_db_mount_name(const lfDatabase *db, const char *mount)
@ LF_SEARCH_LOOSE
This flag selects a looser search algorithm resulting in more results (still sorted by score).
Definition lensfun.h:1690
Camera data. Unknown fields are set to NULL.
Definition lensfun.h:366
lfMLstr Model
Model name (ex: "Rolleiflex SL35") – same as in EXIF.
Definition lensfun.h:370
lfMLstr Variant
Camera variant. Some cameras use same EXIF id for different models.
Definition lensfun.h:372
lfMLstr Maker
Camera maker (ex: "Rollei") – same as in EXIF.
Definition lensfun.h:368
char * Mount
Camera mount type (ex: "QBM")
Definition lensfun.h:374
float CropFactor
Camera crop factor (ex: 1.0). Must be defined.
Definition lensfun.h:376
A lens database object.
Definition lensfun.h:1719
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:1047
lfMLstr Model
Definition lensfun.h:1051
DEPRECATED float AspectRatio
Definition lensfun.h:1079
lfMLstr Maker
Definition lensfun.h:1049
DEPRECATED float CropFactor
Definition lensfun.h:1077
DEPRECATED char ** Mounts
Definition lensfun.h:1061
float MinFocal
Definition lensfun.h:1053
DEPRECATED float CenterY
Definition lensfun.h:1075
float MaxFocal
Definition lensfun.h:1055
float MinAperture
Definition lensfun.h:1057
float MaxAperture
Definition lensfun.h:1059
DEPRECATED float CenterX
Definition lensfun.h:1073
This structure contains everything specific to a camera mount.
Definition lensfun.h:219
DEPRECATED char ** Compat
Definition lensfun.h:227
lfMLstr Name
Camera mount name.
Definition lensfun.h:225