<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.15"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>lensfun: tfun.cpp</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <script type="text/x-mathjax-config"> MathJax.Hub.Config({ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); MathJax.Hub.Config({ messageStyle: "none" }); </script><script type="text/javascript" async="async" src="http://lensfun.sourceforge.net/mathjax/MathJax.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">lensfun  <span id="projectnumber">0.3.2.0</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.15 --> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></div> </div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">tfun.cpp</div> </div> </div><!--header--> <div class="contents"> <p>This example shows how to do basic database lookups.</p> <div class="fragment"><div class="line"><span class="comment">/*</span></div><div class="line"><span class="comment"> Test for database search functions.</span></div><div class="line"><span class="comment">*/</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include "<a class="code" href="lensfun_8h.html">lensfun.h</a>"</span></div><div class="line"><span class="preprocessor">#include <glib.h></span></div><div class="line"><span class="preprocessor">#include <getopt.h></span></div><div class="line"><span class="preprocessor">#include <locale.h></span></div><div class="line"><span class="preprocessor">#include <stdio.h></span></div><div class="line"><span class="preprocessor">#include <stdlib.h></span></div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> DisplayVersion ()</div><div class="line">{</div><div class="line"> g_print (<span class="stringliteral">"Lensfun version %d.%d.%d: test database search routines\n"</span>,</div><div class="line"> <a name="a0"></a><a class="code" href="group__Auxiliary.html#ga87f344eef72d0022dc6127a2dbb8e315">LF_VERSION_MAJOR</a>, <a name="a1"></a><a class="code" href="group__Auxiliary.html#gae5ffedbf31cb567fea19f22f3b832736">LF_VERSION_MINOR</a>, <a name="a2"></a><a class="code" href="group__Auxiliary.html#ga68545712fa14d528824de0a504a65fb0">LF_VERSION_MICRO</a>);</div><div class="line"> g_print (<span class="stringliteral">"Copyright (C) 2007 Andrew Zabolotny\n\n"</span>);</div><div class="line"> g_print (<span class="stringliteral">"For distribution rules and conditions of use see the file\n"</span>);</div><div class="line"> g_print (<span class="stringliteral">"COPYING which is part of the distribution.\n"</span>);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> DisplayUsage ()</div><div class="line">{</div><div class="line"> DisplayVersion ();</div><div class="line"> g_print (<span class="stringliteral">"\nIf no options are given, some standard tests will be run.\n"</span>); </div><div class="line"> g_print (<span class="stringliteral">"Command-line options:\n\n"</span>);</div><div class="line"> g_print (<span class="stringliteral">" -L# --lens=# Use calibration data for this lens\n"</span>);</div><div class="line"> g_print (<span class="stringliteral">" -m# --max=# Limit the amount results\n"</span>);</div><div class="line"> g_print (<span class="stringliteral">" -f --fuzzy More fuzzy search algorithm\n"</span>);</div><div class="line"> g_print (<span class="stringliteral">" -V --version Display program version and exit\n"</span>);</div><div class="line"> g_print (<span class="stringliteral">" -h --help Display this help text\n"</span>);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> PrintMount (<span class="keyword">const</span> <a name="_a3"></a><a class="code" href="structlfMount.html">lfMount</a> *mount)</div><div class="line">{</div><div class="line"> g_print (<span class="stringliteral">"Mount: %s\n"</span>, <a name="a4"></a><a class="code" href="group__Auxiliary.html#ga8cfd1f7b20aa190b3ac4556301fdf299">lf_mlstr_get</a> (mount-><a name="a5"></a><a class="code" href="structlfMount.html#aa955804e43d50a7c669f11a1e75b8c35">Name</a>));</div><div class="line"> <span class="keywordflow">if</span> (mount-><a name="a6"></a><a class="code" href="structlfMount.html#ac75b5ff5639ea88097083e72613ebefb">Compat</a>)</div><div class="line"> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; mount-><a class="code" href="structlfMount.html#ac75b5ff5639ea88097083e72613ebefb">Compat</a> [j]; j++)</div><div class="line"> g_print (<span class="stringliteral">"\tCompat: %s\n"</span>, mount-><a class="code" href="structlfMount.html#ac75b5ff5639ea88097083e72613ebefb">Compat</a> [j]);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> PrintCamera (<span class="keyword">const</span> <a name="_a7"></a><a class="code" href="structlfCamera.html">lfCamera</a> *camera, <span class="keyword">const</span> <a name="_a8"></a><a class="code" href="structlfDatabase.html">lfDatabase</a> *ldb)</div><div class="line">{</div><div class="line"> g_print (<span class="stringliteral">"Camera: %s / %s %s%s%s\n"</span>,</div><div class="line"> <a class="code" href="group__Auxiliary.html#ga8cfd1f7b20aa190b3ac4556301fdf299">lf_mlstr_get</a> (camera-><a name="a9"></a><a class="code" href="structlfCamera.html#a455e1b0dfb1a4dbeb8d5e8e4ee00ff61">Maker</a>),</div><div class="line"> <a class="code" href="group__Auxiliary.html#ga8cfd1f7b20aa190b3ac4556301fdf299">lf_mlstr_get</a> (camera-><a name="a10"></a><a class="code" href="structlfCamera.html#a24aab9e53248a0cbab26971c31ea49d8">Model</a>),</div><div class="line"> camera-><a name="a11"></a><a class="code" href="structlfCamera.html#a2f07b6cdaabe6b67cfe3ca7878fd14f5">Variant</a> ? <span class="stringliteral">"("</span> : <span class="stringliteral">""</span>,</div><div class="line"> camera-><a class="code" href="structlfCamera.html#a2f07b6cdaabe6b67cfe3ca7878fd14f5">Variant</a> ? <a class="code" href="group__Auxiliary.html#ga8cfd1f7b20aa190b3ac4556301fdf299">lf_mlstr_get</a> (camera-><a class="code" href="structlfCamera.html#a2f07b6cdaabe6b67cfe3ca7878fd14f5">Variant</a>) : <span class="stringliteral">""</span>,</div><div class="line"> camera-><a class="code" href="structlfCamera.html#a2f07b6cdaabe6b67cfe3ca7878fd14f5">Variant</a> ? <span class="stringliteral">")"</span> : <span class="stringliteral">""</span>);</div><div class="line"> g_print (<span class="stringliteral">"\tMount: %s\n"</span>, <a name="a12"></a><a class="code" href="group__Database.html#gab42f6e09d5a9d16d59329e6230a1240a">lf_db_mount_name</a> (ldb, camera-><a name="a13"></a><a class="code" href="structlfCamera.html#ab6936c3b98d3eeaaf600d6b60a146989">Mount</a>));</div><div class="line"> g_print (<span class="stringliteral">"\tCrop factor: %g\n"</span>, camera-><a name="a14"></a><a class="code" href="structlfCamera.html#af48074e34b4444b32bfe50f626aa3c21">CropFactor</a>);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> PrintLens (<span class="keyword">const</span> <a name="_a15"></a><a class="code" href="structlfLens.html">lfLens</a> *lens, <span class="keyword">const</span> <a class="code" href="structlfDatabase.html">lfDatabase</a> *ldb)</div><div class="line">{</div><div class="line"> g_print (<span class="stringliteral">"Lens: %s / %s\n"</span>,</div><div class="line"> <a class="code" href="group__Auxiliary.html#ga8cfd1f7b20aa190b3ac4556301fdf299">lf_mlstr_get</a> (lens-><a name="a16"></a><a class="code" href="structlfLens.html#a269a228f2c09b1cec56aea8403dfaa83">Maker</a>),</div><div class="line"> <a class="code" href="group__Auxiliary.html#ga8cfd1f7b20aa190b3ac4556301fdf299">lf_mlstr_get</a> (lens-><a name="a17"></a><a class="code" href="structlfLens.html#a071ad3a45712b2cdbf9eedf8996aa298">Model</a>));</div><div class="line"> g_print (<span class="stringliteral">"\tCrop factor: %g\n"</span>, lens-><a name="a18"></a><a class="code" href="structlfLens.html#a2f9b563c3cd56c635761b7d4109ca7b3">CropFactor</a>);</div><div class="line"> g_print (<span class="stringliteral">"\tAspect ratio: %g\n"</span>, lens-><a name="a19"></a><a class="code" href="structlfLens.html#aa286ba449ce2128dedbbf52004ddc7a7">AspectRatio</a>);</div><div class="line"> g_print (<span class="stringliteral">"\tFocal: %g-%g\n"</span>, lens-><a name="a20"></a><a class="code" href="structlfLens.html#a6928a9fed201b940e8a8f0205a6663c1">MinFocal</a>, lens-><a name="a21"></a><a class="code" href="structlfLens.html#a804c70dc2b2016530ddbb8eda15b891c">MaxFocal</a>);</div><div class="line"> g_print (<span class="stringliteral">"\tAperture: %g-%g\n"</span>, lens-><a name="a22"></a><a class="code" href="structlfLens.html#a8cac58535976392db8542b8a3c76f6c0">MinAperture</a>, lens-><a name="a23"></a><a class="code" href="structlfLens.html#ab1668df848b653e4abcf81ad73fdb204">MaxAperture</a>);</div><div class="line"> g_print (<span class="stringliteral">"\tCenter: %g,%g\n"</span>, lens-><a name="a24"></a><a class="code" href="structlfLens.html#ab4c9227e83a649614a642b986e77c2e9">CenterX</a>, lens-><a name="a25"></a><a class="code" href="structlfLens.html#a304f08728f07b3a09fab20710eead37d">CenterY</a>);</div><div class="line"> <span class="keywordflow">if</span> (lens-><a name="a26"></a><a class="code" href="structlfLens.html#a0204591948b9b9a4b19d697780c36e83">Mounts</a>)</div><div class="line"> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; lens-><a class="code" href="structlfLens.html#a0204591948b9b9a4b19d697780c36e83">Mounts</a> [j]; j++)</div><div class="line"> g_print (<span class="stringliteral">"\tMount: %s\n"</span>, <a class="code" href="group__Database.html#gab42f6e09d5a9d16d59329e6230a1240a">lf_db_mount_name</a> (ldb, lens-><a class="code" href="structlfLens.html#a0204591948b9b9a4b19d697780c36e83">Mounts</a> [j]));</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> PrintCameras (<span class="keyword">const</span> <a class="code" href="structlfCamera.html">lfCamera</a> **cameras, <span class="keyword">const</span> <a class="code" href="structlfDatabase.html">lfDatabase</a> *ldb, <span class="keywordtype">int</span> maxEntries=-1)</div><div class="line">{</div><div class="line"> <span class="keywordflow">if</span> (cameras)</div><div class="line"> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; cameras [i]; i++)</div><div class="line"> {</div><div class="line"> g_print (<span class="stringliteral">"--- camera %d: ---\n"</span>, i + 1);</div><div class="line"> PrintCamera (cameras [i], ldb);</div><div class="line"> <span class="keywordflow">if</span> ((maxEntries > 0) && (i>=maxEntries-1))</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> g_print (<span class="stringliteral">"\t- failed\n"</span>);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> PrintLenses (<span class="keyword">const</span> <a class="code" href="structlfLens.html">lfLens</a> **lenses, <span class="keyword">const</span> <a class="code" href="structlfDatabase.html">lfDatabase</a> *ldb, <span class="keywordtype">int</span> maxEntries=-1)</div><div class="line">{</div><div class="line"> <span class="keywordflow">if</span> (lenses)</div><div class="line"> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; lenses [i]; i++)</div><div class="line"> {</div><div class="line"> g_print (<span class="stringliteral">"--- lens %d, score %d: ---\n"</span>, i + 1, lenses [i]->Score);</div><div class="line"> PrintLens (lenses [i], ldb);</div><div class="line"> <span class="keywordflow">if</span> ((maxEntries > 0) && (i>=maxEntries-1))</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> g_print (<span class="stringliteral">"\t- failed\n"</span>);</div><div class="line">}</div><div class="line"></div><div class="line"></div><div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div><div class="line">{</div><div class="line"></div><div class="line"> <span class="keyword">static</span> <span class="keyword">struct </span>option long_options[] =</div><div class="line"> {</div><div class="line"> {<span class="stringliteral">"lens"</span>, required_argument, NULL, <span class="charliteral">'L'</span>},</div><div class="line"> {<span class="stringliteral">"max"</span>, required_argument, NULL, <span class="charliteral">'m'</span>},</div><div class="line"> {<span class="stringliteral">"fuzzy"</span>, no_argument, NULL, <span class="charliteral">'f'</span>},</div><div class="line"> {<span class="stringliteral">"help"</span>, no_argument, NULL, <span class="charliteral">'h'</span>},</div><div class="line"> {<span class="stringliteral">"version"</span>, no_argument, NULL, <span class="charliteral">'V'</span>},</div><div class="line"> {0, 0, 0, 0}</div><div class="line"> };</div><div class="line"></div><div class="line"> <span class="keyword">static</span> <span class="keyword">struct</span></div><div class="line"> {</div><div class="line"> <span class="keywordtype">int</span> maxResults;</div><div class="line"> <span class="keywordtype">bool</span> fuzzySearch;</div><div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span> *Lens;</div><div class="line"> } opts =</div><div class="line"> {</div><div class="line"> -1,</div><div class="line"> 0,</div><div class="line"> NULL,</div><div class="line"> };</div><div class="line"> </div><div class="line"> setlocale (LC_ALL, <span class="stringliteral">""</span>);</div><div class="line"></div><div class="line"> <span class="keywordtype">int</span> c;</div><div class="line"> <span class="keywordflow">while</span> ((c = getopt_long (argc, argv, <span class="stringliteral">"L:m:fhV"</span>, long_options, NULL)) != EOF)</div><div class="line"> {</div><div class="line"> <span class="keywordflow">switch</span> (c)</div><div class="line"> {</div><div class="line"> <span class="keywordflow">case</span><span class="charliteral">'L'</span>:</div><div class="line"> opts.Lens = optarg;</div><div class="line"> <span class="keywordflow">break</span>; </div><div class="line"> <span class="keywordflow">case</span> <span class="charliteral">'m'</span>:</div><div class="line"> opts.maxResults = atoi(optarg);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">case</span> <span class="charliteral">'f'</span>:</div><div class="line"> opts.fuzzySearch = <a name="a27"></a><a class="code" href="group__Database.html#gga06fc87d81c62e9abb8790b6e5713c55ba12bb6d6f817a589b33a03a106d101f39">LF_SEARCH_LOOSE</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">case</span> <span class="charliteral">'h'</span>:</div><div class="line"> DisplayUsage();</div><div class="line"> <span class="keywordflow">return</span> 0;</div><div class="line"> <span class="keywordflow">case</span> <span class="charliteral">'V'</span>:</div><div class="line"> DisplayVersion ();</div><div class="line"> <span class="keywordflow">return</span> 0;</div><div class="line"> <span class="keywordflow">default</span>:</div><div class="line"> <span class="keywordflow">return</span> -1;</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"></div><div class="line"> <a class="code" href="structlfDatabase.html">lfDatabase</a> *ldb = <a name="a28"></a><a class="code" href="group__Database.html#gafe325d433f28864ccde87dba92e1ccdb">lf_db_new</a> ();</div><div class="line"> ldb-><a name="a29"></a><a class="code" href="structlfDatabase.html#ac688c19eb77c64aa6f2be002f8e31e72">Load</a> ();</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (opts.Lens == NULL)</div><div class="line"> {</div><div class="line"> g_print (<span class="stringliteral">"No lens name is given\n"</span>);</div><div class="line"> DisplayUsage();</div><div class="line"> ldb-><a name="a30"></a><a class="code" href="structlfDatabase.html#a128f2756e03a28e48f733dd0747e2dd8">Destroy</a> ();</div><div class="line"> <span class="keywordflow">return</span> -1;</div><div class="line"> }</div><div class="line"> g_print (<span class="stringliteral">">>> Looking for lens '%s' %d\n"</span>, opts.Lens, opts.fuzzySearch);</div><div class="line"> <span class="keyword">const</span> <a class="code" href="structlfLens.html">lfLens</a> **lenses = ldb-><a name="a31"></a><a class="code" href="structlfDatabase.html#a3cfbcf0233c39ec4cbdf89386f0ecb40">FindLenses</a> (NULL, NULL, opts.Lens, opts.fuzzySearch);</div><div class="line"> PrintLenses (lenses, ldb, opts.maxResults);</div><div class="line"> <a name="a32"></a><a class="code" href="group__Auxiliary.html#ga675c7ad6ae2c3b98e46a60f3deda317b">lf_free</a> (lenses);</div><div class="line"></div><div class="line"> ldb-><a class="code" href="structlfDatabase.html#a128f2756e03a28e48f733dd0747e2dd8">Destroy</a> ();</div><div class="line"> <span class="keywordflow">return</span> 0;</div><div class="line">}</div></div><!-- fragment --> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Thu Oct 3 2019 15:07:50 for lensfun by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.15 </small></address> </body> </html>