Blame docs/example/tfun.cpp

Packit Service 48484a
/*
Packit Service 48484a
    Test for database search functions.
Packit Service 48484a
*/
Packit Service 48484a
Packit Service 48484a
#include "lensfun.h"
Packit Service 48484a
#include <glib.h>
Packit Service 48484a
#include <getopt.h>
Packit Service 48484a
#include <locale.h>
Packit Service 48484a
#include <stdio.h>
Packit Service 48484a
#include <stdlib.h>
Packit Service 48484a
Packit Service 48484a
static void DisplayVersion ()
Packit Service 48484a
{
Packit Service 48484a
    g_print ("Lensfun version %d.%d.%d: test database search routines\n",
Packit Service 48484a
        LF_VERSION_MAJOR, LF_VERSION_MINOR, LF_VERSION_MICRO);
Packit Service 48484a
    g_print ("Copyright (C) 2007 Andrew Zabolotny\n\n");
Packit Service 48484a
    g_print ("For distribution rules and conditions of use see the file\n");
Packit Service 48484a
    g_print ("COPYING which is part of the distribution.\n");
Packit Service 48484a
}
Packit Service 48484a
Packit Service 48484a
static void DisplayUsage ()
Packit Service 48484a
{
Packit Service 48484a
    DisplayVersion ();
Packit Service 48484a
    g_print ("\nIf no options are given, some standard tests will be run.\n");    
Packit Service 48484a
    g_print ("Command-line options:\n\n");
Packit Service 48484a
    g_print ("  -L#   --lens=#     Use calibration data for this lens\n");
Packit Service 48484a
    g_print ("  -m#   --max=#      Limit the amount results\n");
Packit Service 48484a
    g_print ("  -f    --fuzzy      More fuzzy search algorithm\n");
Packit Service 48484a
    g_print ("  -V    --version    Display program version and exit\n");
Packit Service 48484a
    g_print ("  -h    --help       Display this help text\n");
Packit Service 48484a
}
Packit Service 48484a
Packit Service 48484a
static void PrintMount (const lfMount *mount)
Packit Service 48484a
{
Packit Service 48484a
    g_print ("Mount: %s\n", lf_mlstr_get (mount->Name));
Packit Service 48484a
    if (mount->Compat)
Packit Service 48484a
        for (int j = 0; mount->Compat [j]; j++)
Packit Service 48484a
            g_print ("\tCompat: %s\n", mount->Compat [j]);
Packit Service 48484a
}
Packit Service 48484a
Packit Service 48484a
static void PrintCamera (const lfCamera *camera, const lfDatabase *ldb)
Packit Service 48484a
{
Packit Service 48484a
    g_print ("Camera: %s / %s %s%s%s\n",
Packit Service 48484a
             lf_mlstr_get (camera->Maker),
Packit Service 48484a
             lf_mlstr_get (camera->Model),
Packit Service 48484a
             camera->Variant ? "(" : "",
Packit Service 48484a
             camera->Variant ? lf_mlstr_get (camera->Variant) : "",
Packit Service 48484a
             camera->Variant ? ")" : "");
Packit Service 48484a
    g_print ("\tMount: %s\n", lf_db_mount_name (ldb, camera->Mount));
Packit Service 48484a
    g_print ("\tCrop factor: %g\n", camera->CropFactor);
Packit Service 48484a
}
Packit Service 48484a
Packit Service 48484a
static void PrintLens (const lfLens *lens, const lfDatabase *ldb)
Packit Service 48484a
{
Packit Service 48484a
    g_print ("Lens: %s / %s\n",
Packit Service 48484a
             lf_mlstr_get (lens->Maker),
Packit Service 48484a
             lf_mlstr_get (lens->Model));
Packit Service 48484a
    g_print ("\tCrop factor: %g\n", lens->CropFactor);
Packit Service 48484a
    g_print ("\tAspect ratio: %g\n", lens->AspectRatio);
Packit Service 48484a
    g_print ("\tFocal: %g-%g\n", lens->MinFocal, lens->MaxFocal);
Packit Service 48484a
    g_print ("\tAperture: %g-%g\n", lens->MinAperture, lens->MaxAperture);
Packit Service 48484a
    g_print ("\tCenter: %g,%g\n", lens->CenterX, lens->CenterY);
Packit Service 48484a
    if (lens->Mounts)
Packit Service 48484a
        for (int j = 0; lens->Mounts [j]; j++)
Packit Service 48484a
            g_print ("\tMount: %s\n", lf_db_mount_name (ldb, lens->Mounts [j]));
Packit Service 48484a
}
Packit Service 48484a
Packit Service 48484a
static void PrintCameras (const lfCamera **cameras, const lfDatabase *ldb, int maxEntries=-1)
Packit Service 48484a
{
Packit Service 48484a
    if (cameras)
Packit Service 48484a
        for (int i = 0; cameras [i]; i++)
Packit Service 48484a
        {
Packit Service 48484a
            g_print ("--- camera %d: ---\n", i + 1);
Packit Service 48484a
            PrintCamera (cameras [i], ldb);
Packit Service 48484a
            if ((maxEntries > 0) && (i>=maxEntries-1))
Packit Service 48484a
                break;
Packit Service 48484a
        }
Packit Service 48484a
    else
Packit Service 48484a
        g_print ("\t- failed\n");
Packit Service 48484a
}
Packit Service 48484a
Packit Service 48484a
static void PrintLenses (const lfLens **lenses, const lfDatabase *ldb, int maxEntries=-1)
Packit Service 48484a
{
Packit Service 48484a
    if (lenses)
Packit Service 48484a
        for (int i = 0; lenses [i]; i++)
Packit Service 48484a
        {
Packit Service 48484a
            g_print ("--- lens %d, score %d: ---\n", i + 1, lenses [i]->Score);
Packit Service 48484a
            PrintLens (lenses [i], ldb);
Packit Service 48484a
            if ((maxEntries > 0) && (i>=maxEntries-1))
Packit Service 48484a
                break;
Packit Service 48484a
        }
Packit Service 48484a
    else
Packit Service 48484a
        g_print ("\t- failed\n");
Packit Service 48484a
}
Packit Service 48484a
Packit Service 48484a
Packit Service 48484a
int main (int argc, char **argv)
Packit Service 48484a
{
Packit Service 48484a
Packit Service 48484a
    static struct option long_options[] =
Packit Service 48484a
    {
Packit Service 48484a
        {"lens", required_argument, NULL, 'L'},
Packit Service 48484a
        {"max", required_argument, NULL, 'm'},
Packit Service 48484a
        {"fuzzy", no_argument, NULL, 'f'},
Packit Service 48484a
        {"help", no_argument, NULL, 'h'},
Packit Service 48484a
        {"version", no_argument, NULL, 'V'},
Packit Service 48484a
        {0, 0, 0, 0}
Packit Service 48484a
    };
Packit Service 48484a
Packit Service 48484a
    static struct
Packit Service 48484a
    {
Packit Service 48484a
        int         maxResults;
Packit Service 48484a
        bool        fuzzySearch;
Packit Service 48484a
        const char  *Lens;
Packit Service 48484a
    } opts =
Packit Service 48484a
    {
Packit Service 48484a
        -1,
Packit Service 48484a
        0,
Packit Service 48484a
        NULL,
Packit Service 48484a
    };
Packit Service 48484a
    
Packit Service 48484a
    setlocale (LC_ALL, "");
Packit Service 48484a
Packit Service 48484a
    int c;
Packit Service 48484a
    while ((c = getopt_long (argc, argv, "L:m:fhV", long_options, NULL)) != EOF)
Packit Service 48484a
    {
Packit Service 48484a
        switch (c)
Packit Service 48484a
        {
Packit Service 48484a
            case'L':
Packit Service 48484a
                opts.Lens = optarg;
Packit Service 48484a
                break;    
Packit Service 48484a
            case 'm':
Packit Service 48484a
                opts.maxResults = atoi(optarg);
Packit Service 48484a
                break;
Packit Service 48484a
            case 'f':
Packit Service 48484a
                opts.fuzzySearch = LF_SEARCH_LOOSE;
Packit Service 48484a
                break;
Packit Service 48484a
            case 'h':
Packit Service 48484a
                DisplayUsage();
Packit Service 48484a
                return 0;
Packit Service 48484a
            case 'V':
Packit Service 48484a
                DisplayVersion ();
Packit Service 48484a
                return 0;
Packit Service 48484a
            default:
Packit Service 48484a
                return -1;
Packit Service 48484a
        }
Packit Service 48484a
    }
Packit Service 48484a
Packit Service 48484a
Packit Service 48484a
    lfDatabase *ldb = lf_db_new ();
Packit Service 48484a
    ldb->Load ();
Packit Service 48484a
Packit Service 48484a
    if (opts.Lens == NULL)
Packit Service 48484a
    {
Packit Service 48484a
        g_print ("No lens name is given\n");
Packit Service 48484a
        DisplayUsage();
Packit Service 48484a
        ldb->Destroy ();
Packit Service 48484a
        return -1;
Packit Service 48484a
    }
Packit Service 48484a
    g_print (">>> Looking for lens '%s' %d\n", opts.Lens, opts.fuzzySearch);
Packit Service 48484a
    const lfLens **lenses = ldb->FindLenses (NULL, NULL, opts.Lens, opts.fuzzySearch);
Packit Service 48484a
    PrintLenses (lenses, ldb, opts.maxResults);
Packit Service 48484a
    lf_free (lenses);
Packit Service 48484a
Packit Service 48484a
    ldb->Destroy ();
Packit Service 48484a
    return 0;
Packit Service 48484a
}