Sophie

Sophie

distrib > Mageia > 7 > i586 > media > core-updates > by-pkgid > 9b2eec216777f0c505d4f747f9ee0e8f > files > 62

lensfun-0.3.2-8.1.mga7.i586.rpm

<!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: lenstool.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
   &#160;<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&amp;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">lenstool.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<p>Library testbed. This program can access most library functionality.</p>
<div class="fragment"><div class="line"><span class="comment">/*</span></div><div class="line"><span class="comment">    Test for library image modificator object.</span></div><div class="line"><span class="comment">*/</span></div><div class="line"></div><div class="line"></div><div class="line"><span class="preprocessor">#include &lt;glib.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;locale.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;getopt.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;time.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;ctype.h&gt;</span></div><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="lensfun_8h.html">lensfun.h</a>&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;image.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;auxfun.h&quot;</span></div><div class="line"></div><div class="line"><span class="comment">/* Define this to apply stage 1 &amp; 3 corrections in one step,</span></div><div class="line"><span class="comment">   see main comment to the lfModifier class */</span></div><div class="line"><span class="preprocessor">#define COMBINE_13</span></div><div class="line"></div><div class="line"><span class="preprocessor">#if defined(_MSC_VER)</span></div><div class="line"><span class="preprocessor">#define strcasecmp _stricmp</span></div><div class="line"><span class="preprocessor">#define snprintf _snprintf</span></div><div class="line"><span class="preprocessor">#define strtof (float)strtod</span></div><div class="line"><span class="preprocessor">#endif </span></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="keyword">const</span> <span class="keywordtype">char</span> *Program;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *Input;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *Output;</div><div class="line">    <span class="keywordtype">int</span> ModifyFlags;</div><div class="line">    <span class="keywordtype">bool</span> Inverse;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *Lens;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *Camera;</div><div class="line">    <span class="keywordtype">float</span> Scale;</div><div class="line">    <span class="keywordtype">float</span> Crop;</div><div class="line">    <span class="keywordtype">float</span> Focal;</div><div class="line">    <span class="keywordtype">float</span> Aperture;</div><div class="line">    <span class="keywordtype">float</span> Distance;</div><div class="line">    Image::InterpolationMethod Interpolation;</div><div class="line">    <a class="code" href="group__Lens.html#gac853bb55ada6a58f12a68f6a1974f764">lfLensType</a> TargetGeom;</div><div class="line">    <span class="keywordtype">bool</span> Verbose;</div><div class="line">} opts =</div><div class="line">{</div><div class="line">    NULL,</div><div class="line">    NULL,</div><div class="line">    <span class="stringliteral">&quot;output.png&quot;</span>,</div><div class="line">    0,</div><div class="line">    <span class="keyword">false</span>,</div><div class="line">    NULL,</div><div class="line">    NULL,</div><div class="line">    1.0f,</div><div class="line">    0,</div><div class="line">    0,</div><div class="line">    0,</div><div class="line">    1.0f,</div><div class="line">    Image::I_LANCZOS,</div><div class="line">    <a name="a0"></a><a class="code" href="group__Lens.html#ggac853bb55ada6a58f12a68f6a1974f764a896c9ca88c7fe141ea77a4b343ba54ff">LF_RECTILINEAR</a>,</div><div class="line">    <span class="keyword">false</span></div><div class="line">};</div><div class="line"></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">&quot;Lenstool reference implementation for Lensfun version %d.%d.%d\n&quot;</span>,</div><div class="line">        <a name="a1"></a><a class="code" href="group__Auxiliary.html#ga87f344eef72d0022dc6127a2dbb8e315">LF_VERSION_MAJOR</a>, <a name="a2"></a><a class="code" href="group__Auxiliary.html#gae5ffedbf31cb567fea19f22f3b832736">LF_VERSION_MINOR</a>, <a name="a3"></a><a class="code" href="group__Auxiliary.html#ga68545712fa14d528824de0a504a65fb0">LF_VERSION_MICRO</a>);</div><div class="line">    g_print (<span class="stringliteral">&quot;Copyright (C) 2007 Andrew Zabolotny\n\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;For distribution rules and conditions of use see the file\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;COPYING which is part of the distribution.\n&quot;</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">&quot;\nCommand-line options:\n\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -d    --distortion Apply lens distortion\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -g#   --geometry=# Convert image geometry to given (one of:\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;                     rectilinear,fisheye,panoramic,equirectangular,\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;                     orthographic, stereographic, equisolid, thoby)\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -t    --tca        Apply lens chromatic aberrations\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -v    --vignetting Apply lens vignetting\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -a    --all        Apply all possible corrections (tca, vign, dist)\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -i    --inverse    Inverse correction of the image (e.g. simulate\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;                     lens distortions instead of correcting them)\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -C#   --camera=#   Camera name\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -c#   --crop=#     Set camera crop factor in case the camera is not given\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -L#   --lens=#     Lens name to search for in the database\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -F#   --focal=#    Set focal length at which image has been taken\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -A#   --aperture=# Set aperture at which image has been taken\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -D#   --distance=# Set subject distance at which image has been taken\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -s#   --scale=#    Apply additional scale on the image\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -I#   --interpol=# Choose interpolation algorithm (n[earest], b[ilinear], l[anczos])\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -o#   --output=#   Set file name for output image\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;        --verbose    Verbose output\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;        --version    Display program version and exit\n&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;  -h    --help       Display this help text\n&quot;</span>);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">bool</span> ParseParameters(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</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">        {<span class="stringliteral">&quot;output&quot;</span>, required_argument, NULL, <span class="charliteral">&#39;o&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;distortion&quot;</span>, no_argument, NULL, <span class="charliteral">&#39;d&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;geometry&quot;</span>, optional_argument, NULL, <span class="charliteral">&#39;g&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;tca&quot;</span>, no_argument, NULL, <span class="charliteral">&#39;t&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;vignetting&quot;</span>, no_argument, NULL, <span class="charliteral">&#39;v&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;all&quot;</span>, no_argument, NULL, <span class="charliteral">&#39;a&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;inverse&quot;</span>, no_argument, NULL, <span class="charliteral">&#39;i&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;scale&quot;</span>, required_argument, NULL, <span class="charliteral">&#39;S&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;lens&quot;</span>, required_argument, NULL, <span class="charliteral">&#39;L&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;camera&quot;</span>, required_argument, NULL, <span class="charliteral">&#39;C&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;crop&quot;</span>, required_argument, NULL, <span class="charliteral">&#39;c&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;focal&quot;</span>, required_argument, NULL, <span class="charliteral">&#39;F&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;aperture&quot;</span>, required_argument, NULL, <span class="charliteral">&#39;A&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;distance&quot;</span>, required_argument, NULL, <span class="charliteral">&#39;D&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;interpol&quot;</span>, required_argument, NULL, <span class="charliteral">&#39;I&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;help&quot;</span>, no_argument, NULL, <span class="charliteral">&#39;h&#39;</span>},</div><div class="line">        {<span class="stringliteral">&quot;version&quot;</span>, no_argument, NULL, 4},</div><div class="line">        {<span class="stringliteral">&quot;verbose&quot;</span>, no_argument, NULL, 5},</div><div class="line">        {0, 0, 0, 0}</div><div class="line">    };</div><div class="line"></div><div class="line">    opts.Program = argv [0];</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">&quot;o:dg::tvaiS:L:C:c:F:A:D:I:h&quot;</span>, long_options, NULL)) != EOF) {</div><div class="line">        <span class="keywordflow">switch</span> (c) {</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;o&#39;</span>:</div><div class="line">                opts.Output = optarg;</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;d&#39;</span>:</div><div class="line">                opts.ModifyFlags |= <a name="a4"></a><a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a7be69c9a6c86737de2ed4e5bff238086">LF_MODIFY_DISTORTION</a>;</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;g&#39;</span>:</div><div class="line">                opts.ModifyFlags |= <a name="a5"></a><a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a6fa0d1e43f6dbde8c395be838b89ad52">LF_MODIFY_GEOMETRY</a>;</div><div class="line">                <span class="keywordflow">if</span> (optarg) {</div><div class="line">                    <span class="keywordflow">if</span> (!strcasecmp (optarg, <span class="stringliteral">&quot;rectilinear&quot;</span>))</div><div class="line">                        opts.TargetGeom = <a class="code" href="group__Lens.html#ggac853bb55ada6a58f12a68f6a1974f764a896c9ca88c7fe141ea77a4b343ba54ff">LF_RECTILINEAR</a>;</div><div class="line">                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp (optarg, <span class="stringliteral">&quot;fisheye&quot;</span>))</div><div class="line">                        opts.TargetGeom = <a name="a6"></a><a class="code" href="group__Lens.html#ggac853bb55ada6a58f12a68f6a1974f764a29abd55274cc313ab6ce6f8120420bcb">LF_FISHEYE</a>;</div><div class="line">                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp (optarg, <span class="stringliteral">&quot;panoramic&quot;</span>))</div><div class="line">                        opts.TargetGeom = <a name="a7"></a><a class="code" href="group__Lens.html#ggac853bb55ada6a58f12a68f6a1974f764ae4c7779e02e8c3eab93a50df9785e4c8">LF_PANORAMIC</a>;</div><div class="line">                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp (optarg, <span class="stringliteral">&quot;equirectangular&quot;</span>))</div><div class="line">                        opts.TargetGeom = <a name="a8"></a><a class="code" href="group__Lens.html#ggac853bb55ada6a58f12a68f6a1974f764a6c605dede2a9afa068e314674832514c">LF_EQUIRECTANGULAR</a>;</div><div class="line">                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp (optarg, <span class="stringliteral">&quot;orthographic&quot;</span>))</div><div class="line">                        opts.TargetGeom = <a name="a9"></a><a class="code" href="group__Lens.html#ggac853bb55ada6a58f12a68f6a1974f764a5f2caa8d093345897664f71c501c4027">LF_FISHEYE_ORTHOGRAPHIC</a>;</div><div class="line">                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp (optarg, <span class="stringliteral">&quot;stereographic&quot;</span>))</div><div class="line">                        opts.TargetGeom = <a name="a10"></a><a class="code" href="group__Lens.html#ggac853bb55ada6a58f12a68f6a1974f764ab68a1366d1533790a71a5b624f5a9e94">LF_FISHEYE_STEREOGRAPHIC</a>;</div><div class="line">                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp (optarg, <span class="stringliteral">&quot;equisolid&quot;</span>))</div><div class="line">                        opts.TargetGeom = <a name="a11"></a><a class="code" href="group__Lens.html#ggac853bb55ada6a58f12a68f6a1974f764a302f26de47547b8eed83608c3f0e1e4b">LF_FISHEYE_EQUISOLID</a>;</div><div class="line">                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcasecmp (optarg, <span class="stringliteral">&quot;thoby&quot;</span>))</div><div class="line">                        opts.TargetGeom = <a name="a12"></a><a class="code" href="group__Lens.html#ggac853bb55ada6a58f12a68f6a1974f764a34abf74f5f675b1be30a931c3dfbcedb">LF_FISHEYE_THOBY</a>;</div><div class="line">                    <span class="keywordflow">else</span> {</div><div class="line">                        DisplayUsage();</div><div class="line">                        g_print (<span class="stringliteral">&quot;\nTarget lens geometry must be one of &#39;rectilinear&#39;, &#39;fisheye&#39;, &#39;panoramic&#39;, &#39;equirectangular&#39;\n&#39;orthographic&#39;, &#39;stereographic&#39;, &#39;equisolid&#39;, &#39;thoby&#39;\n&quot;</span>);</div><div class="line">                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line">                    }</div><div class="line">                }</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;t&#39;</span>:</div><div class="line">                opts.ModifyFlags |= <a name="a13"></a><a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a2d151b0e170f0caff31885677d787846">LF_MODIFY_TCA</a>;</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;v&#39;</span>:</div><div class="line">                opts.ModifyFlags |= <a name="a14"></a><a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a6aded8676e2e6da6abe62709d63ee1da">LF_MODIFY_VIGNETTING</a>;</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;a&#39;</span>:</div><div class="line">                opts.ModifyFlags |= <a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a6aded8676e2e6da6abe62709d63ee1da">LF_MODIFY_VIGNETTING</a>;</div><div class="line">                opts.ModifyFlags |= <a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a2d151b0e170f0caff31885677d787846">LF_MODIFY_TCA</a>;</div><div class="line">                opts.ModifyFlags |= <a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a7be69c9a6c86737de2ed4e5bff238086">LF_MODIFY_DISTORTION</a>;</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;i&#39;</span>:</div><div class="line">                opts.Inverse = <span class="keyword">true</span>;</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;S&#39;</span>:</div><div class="line">                opts.ModifyFlags |= <a name="a15"></a><a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7abf173cd4cb15a0c242bd32a5ff840982">LF_MODIFY_SCALE</a>;</div><div class="line">                opts.Scale = _atof (optarg);</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span><span class="charliteral">&#39;L&#39;</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">&#39;C&#39;</span>:</div><div class="line">                opts.Camera = optarg;</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;c&#39;</span>:</div><div class="line">                opts.Crop = _atof (optarg);</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;F&#39;</span>:</div><div class="line">                opts.Focal = _atof (optarg);</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;A&#39;</span>:</div><div class="line">                opts.Aperture = _atof (optarg);</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;D&#39;</span>:</div><div class="line">                opts.Distance = _atof (optarg);</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;I&#39;</span>:</div><div class="line">                <span class="keywordflow">if</span> (smartstreq (optarg, <span class="stringliteral">&quot;nearest&quot;</span>))</div><div class="line">                    opts.Interpolation = Image::I_NEAREST;</div><div class="line">                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (smartstreq (optarg, <span class="stringliteral">&quot;bilinear&quot;</span>))</div><div class="line">                    opts.Interpolation = Image::I_BILINEAR;</div><div class="line">                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (smartstreq (optarg, <span class="stringliteral">&quot;lanczos&quot;</span>))</div><div class="line">                    opts.Interpolation = Image::I_LANCZOS;</div><div class="line">                <span class="keywordflow">else</span> {</div><div class="line">                    DisplayUsage();</div><div class="line">                    g_print (<span class="stringliteral">&quot;\nUnknown interpolation method `%s&#39;\n&quot;</span>, optarg);</div><div class="line">                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line">                }</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">case</span> <span class="charliteral">&#39;h&#39;</span>:</div><div class="line">                DisplayUsage ();</div><div class="line">                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line">            <span class="keywordflow">case</span> 4:</div><div class="line">                DisplayVersion ();</div><div class="line">                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line">            <span class="keywordflow">case</span> 5:</div><div class="line">                opts.Verbose = <span class="keyword">true</span>;</div><div class="line">                <span class="keywordflow">break</span>;</div><div class="line">            <span class="keywordflow">default</span>:</div><div class="line">                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line">        }</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (optind &lt;= argc)</div><div class="line">        opts.Input = argv [optind];</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (!opts.Lens &amp;&amp; !opts.Camera) {</div><div class="line">        DisplayUsage();</div><div class="line">        g_print (<span class="stringliteral">&quot;\nAt least a lens or camera name is required to perform a database lookup!\n&quot;</span>);</div><div class="line">        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (!opts.Lens &amp;&amp; opts.Input) {</div><div class="line">        DisplayUsage();</div><div class="line">        g_print (<span class="stringliteral">&quot;\nNo lens information (-L) supplied to process specified input image!\n&quot;</span>);</div><div class="line">        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line">}</div><div class="line"></div><div class="line"></div><div class="line"><span class="keyword">static</span> Image *ApplyModifier (<span class="keywordtype">int</span> modflags, <span class="keywordtype">bool</span> reverse, Image *img,</div><div class="line">                             <span class="keyword">const</span> <a name="_a16"></a><a class="code" href="structlfModifier.html">lfModifier</a> *mod)</div><div class="line">{</div><div class="line">    <span class="comment">// Create a new image where we will copy the modified image</span></div><div class="line">    Image *newimg = <span class="keyword">new</span> Image ();</div><div class="line">    <span class="comment">// Output image always equals input image size, although</span></div><div class="line">    <span class="comment">// this is not a requirement of the library, it&#39;s just a</span></div><div class="line">    <span class="comment">// limitation of the testbed.</span></div><div class="line">    newimg-&gt;Resize (img-&gt;width, img-&gt;height);</div><div class="line"></div><div class="line"><span class="preprocessor">#ifdef COMBINE_13</span></div><div class="line">    <span class="keywordtype">int</span> lwidth = img-&gt;width * 2 * 3;</div><div class="line"><span class="preprocessor">#else</span></div><div class="line">    <span class="keywordtype">int</span> lwidth = img-&gt;width * 2;</div><div class="line">    <span class="keywordflow">if</span> (modflags &amp; <a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a2d151b0e170f0caff31885677d787846">LF_MODIFY_TCA</a>)</div><div class="line">        lwidth *= 3;</div><div class="line"><span class="preprocessor">#endif</span></div><div class="line">    <span class="keywordtype">float</span> *pos = <span class="keyword">new</span> <span class="keywordtype">float</span> [lwidth];</div><div class="line"></div><div class="line">    <span class="keywordtype">int</span> step_start = reverse ? 2 : 0;</div><div class="line">    <span class="keywordtype">int</span> step_delta = reverse ? -1 : +1;</div><div class="line">    <span class="keywordtype">int</span> step_finish = reverse ? -1 : 3;</div><div class="line"></div><div class="line">    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> step = step_start; step != step_finish; step += step_delta)</div><div class="line">    {</div><div class="line">        RGBpixel *dst = newimg-&gt;image;</div><div class="line">        <span class="keywordtype">char</span> *imgdata = (<span class="keywordtype">char</span> *)img-&gt;image;</div><div class="line">        <span class="keywordtype">bool</span> ok = <span class="keyword">true</span>;</div><div class="line"></div><div class="line">        img-&gt;InitInterpolation (opts.Interpolation);</div><div class="line"></div><div class="line">        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> y = 0; ok &amp;&amp; y &lt; img-&gt;height; y++)</div><div class="line">            <span class="keywordflow">switch</span> (step)</div><div class="line">            {</div><div class="line"><span class="preprocessor">#ifdef COMBINE_13</span></div><div class="line">                <span class="keywordflow">case</span> 0:</div><div class="line">                    ok = <span class="keyword">false</span>;</div><div class="line">                    <span class="keywordflow">break</span>;</div><div class="line"></div><div class="line">                <span class="keywordflow">case</span> 2:</div><div class="line">                    <span class="comment">/* TCA and geometry correction */</span></div><div class="line">                    ok = mod-&gt;<a name="a17"></a><a class="code" href="structlfModifier.html#a6726fa1203f35f0850ae18719a759d92">ApplySubpixelGeometryDistortion</a> (0.0, y, img-&gt;width, 1, pos);</div><div class="line"><span class="preprocessor">#else</span></div><div class="line">                <span class="keywordflow">case</span> 0:</div><div class="line">                    <span class="comment">/* TCA correction */</span></div><div class="line">                    ok = mod-&gt;<a name="a18"></a><a class="code" href="structlfModifier.html#aa08d14d032746c06603fb6410ad5ecd6">ApplySubpixelDistortion</a> (0.0, y, img-&gt;width, 1, pos);</div><div class="line"><span class="preprocessor">#endif</span></div><div class="line">                    <span class="keywordflow">if</span> (ok)</div><div class="line">                    {</div><div class="line">                        <span class="keywordtype">float</span> *src = pos;</div><div class="line">                        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> x = 0; x &lt; img-&gt;width; x++)</div><div class="line">                        {</div><div class="line">                            dst-&gt;red   = img-&gt;GetR (src [0], src [1]);</div><div class="line">                            dst-&gt;green = img-&gt;GetG (src [2], src [3]);</div><div class="line">                            dst-&gt;blue  = img-&gt;GetB (src [4], src [5]);</div><div class="line">                            src += 2 * 3;</div><div class="line">                            dst++;</div><div class="line">                        }</div><div class="line">                    }</div><div class="line">                    <span class="keywordflow">break</span>;</div><div class="line"></div><div class="line">                <span class="keywordflow">case</span> 1:</div><div class="line">                    <span class="comment">/* Colour correction: vignetting */</span></div><div class="line">                    ok = mod-&gt;<a name="a19"></a><a class="code" href="structlfModifier.html#a6ea5562a78c04946fc945237d318c669">ApplyColorModification</a> (imgdata, 0.0, y, img-&gt;width, 1,</div><div class="line">                        <a name="a20"></a><a class="code" href="group__Correction.html#gae3340956c99189894a5efbf2991d8039">LF_CR_4</a> (RED, GREEN, BLUE, UNKNOWN), 0);</div><div class="line">                    imgdata += img-&gt;width * 4;</div><div class="line">                    <span class="keywordflow">break</span>;</div><div class="line"></div><div class="line"><span class="preprocessor">#ifndef COMBINE_13</span></div><div class="line">                <span class="keywordflow">case</span> 2:</div><div class="line">                    <span class="comment">/* Distortion and geometry correction, scaling */</span></div><div class="line">                    ok = mod-&gt;<a name="a21"></a><a class="code" href="structlfModifier.html#a7739fa851629890b9daa04fef9979ab9">ApplyGeometryDistortion</a> (0.0, y, newimg-&gt;width, 1, pos);</div><div class="line">                    <span class="keywordflow">if</span> (ok)</div><div class="line">                    {</div><div class="line">                        <span class="keywordtype">float</span> *src = pos;</div><div class="line">                        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> x = 0; x &lt; img-&gt;width; x++)</div><div class="line">                        {</div><div class="line">                            img-&gt;Get (*dst, src [0], src [1]);</div><div class="line">                            src += 2;</div><div class="line">                            dst++;</div><div class="line">                        }</div><div class="line">                    }</div><div class="line">                    <span class="keywordflow">break</span>;</div><div class="line"><span class="preprocessor">#endif</span></div><div class="line">            }</div><div class="line">        <span class="comment">// After TCA and distortion steps switch img and newimg.</span></div><div class="line">        <span class="comment">// This is crucial since newimg is now the input image</span></div><div class="line">        <span class="comment">// to the next stage.</span></div><div class="line">        <span class="keywordflow">if</span> (ok &amp;&amp; (step == 0 || step == 2))</div><div class="line">        {</div><div class="line">            Image *tmp = newimg;</div><div class="line">            newimg = img;</div><div class="line">            img = tmp;</div><div class="line">        }</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="keyword">delete</span> [] pos;</div><div class="line">    <span class="keyword">delete</span> newimg;</div><div class="line">    <span class="keywordflow">return</span> img;</div><div class="line">}</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">    setlocale (LC_ALL, <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (!ParseParameters(argc, argv))</div><div class="line">        <span class="keywordflow">return</span> -1;</div><div class="line"></div><div class="line">    <span class="comment">// load database</span></div><div class="line">    <a name="_a22"></a><a class="code" href="structlfDatabase.html">lfDatabase</a> *ldb = <span class="keyword">new</span> <a class="code" href="structlfDatabase.html">lfDatabase</a> ();</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (ldb-&gt;<a name="a23"></a><a class="code" href="structlfDatabase.html#ac688c19eb77c64aa6f2be002f8e31e72">Load</a> () != <a name="a24"></a><a class="code" href="group__Auxiliary.html#ggaf84c98d42624e1181549de773ac49ad7a6419ef83b513591890978b83dd296765">LF_NO_ERROR</a>) {</div><div class="line">        <span class="keyword">delete</span> ldb;</div><div class="line">        g_print (<span class="stringliteral">&quot;\rERROR: Database could not be loaded\n&quot;</span>);</div><div class="line">        <span class="keywordflow">return</span> -1;</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="comment">// try to find camera in the database</span></div><div class="line">    <span class="keyword">const</span> <a name="_a25"></a><a class="code" href="structlfCamera.html">lfCamera</a> *cam = NULL;</div><div class="line">    <span class="keywordflow">if</span> (opts.Camera) {</div><div class="line">        <span class="keyword">const</span> <a class="code" href="structlfCamera.html">lfCamera</a> ** cameras = ldb-&gt;<a name="a26"></a><a class="code" href="structlfDatabase.html#aafba4d1ea4b18614892cd755d7e212c2">FindCamerasExt</a>(NULL, opts.Camera);</div><div class="line">        <span class="keywordflow">if</span> (cameras)</div><div class="line">            cam = cameras[0];</div><div class="line">        <span class="keywordflow">else</span></div><div class="line">            g_print (<span class="stringliteral">&quot;Cannot find a camera matching `%s&#39; in database\n&quot;</span>, opts.Camera);</div><div class="line">        <a name="a27"></a><a class="code" href="group__Auxiliary.html#ga675c7ad6ae2c3b98e46a60f3deda317b">lf_free</a> (cameras);</div><div class="line">     }</div><div class="line"></div><div class="line">    <span class="comment">// try to find a matching lens in the database</span></div><div class="line">    <span class="keyword">const</span> <a name="_a28"></a><a class="code" href="structlfLens.html">lfLens</a> *lens = NULL;</div><div class="line">    <span class="keywordflow">if</span> (opts.Lens) {</div><div class="line">        <span class="keyword">const</span> <a class="code" href="structlfLens.html">lfLens</a> **lenses = ldb-&gt;<a name="a29"></a><a class="code" href="structlfDatabase.html#a3cfbcf0233c39ec4cbdf89386f0ecb40">FindLenses</a> (cam, NULL, opts.Lens);</div><div class="line">        <span class="keywordflow">if</span> (lenses)</div><div class="line">            lens = lenses [0];</div><div class="line">        <span class="keywordflow">else</span></div><div class="line">            g_print (<span class="stringliteral">&quot;Cannot find a lens matching `%s&#39; in database\n&quot;</span>, opts.Lens);</div><div class="line">        <a class="code" href="group__Auxiliary.html#ga675c7ad6ae2c3b98e46a60f3deda317b">lf_free</a> (lenses);</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="comment">// print camera and lens information if in verbose mode or if no input file is specified</span></div><div class="line">    <span class="keywordflow">if</span> (opts.Verbose || !opts.Input) {</div><div class="line">        <span class="keywordflow">if</span> (cam &amp;&amp; lens) {</div><div class="line">            g_print(<span class="stringliteral">&quot;Matching lens and camera combination found in the database:\n&quot;</span>);</div><div class="line">            PrintCamera(cam, ldb);</div><div class="line">            PrintLens(lens, ldb);</div><div class="line">        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!cam &amp;&amp; lens) {</div><div class="line">            g_print(<span class="stringliteral">&quot;Matching lens found in the database:\n&quot;</span>);</div><div class="line">            PrintLens(lens, ldb);</div><div class="line">        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!lens &amp;&amp; cam) {</div><div class="line">            g_print(<span class="stringliteral">&quot;Matching camera found in the database:\n&quot;</span>);</div><div class="line">            PrintCamera(cam, ldb);</div><div class="line">        }</div><div class="line">    } <span class="keywordflow">else</span> {</div><div class="line">        <span class="keywordflow">if</span> (cam &amp;&amp; lens) {</div><div class="line">            g_print(<span class="stringliteral">&quot;= Selecting %s / %s\n&quot;</span>, cam-&gt;<a name="a30"></a><a class="code" href="structlfCamera.html#a24aab9e53248a0cbab26971c31ea49d8">Model</a>, lens-&gt;<a name="a31"></a><a class="code" href="structlfLens.html#a071ad3a45712b2cdbf9eedf8996aa298">Model</a>);</div><div class="line">        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!cam &amp;&amp; lens) {</div><div class="line">            g_print(<span class="stringliteral">&quot;= Selecting %s\n&quot;</span>, lens-&gt;<a class="code" href="structlfLens.html#a071ad3a45712b2cdbf9eedf8996aa298">Model</a>);</div><div class="line">        }</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="comment">// nothing to process, so lets quit here</span></div><div class="line">    <span class="keywordflow">if</span> (!opts.Input) {</div><div class="line">        <span class="keyword">delete</span> ldb;</div><div class="line">        <span class="keywordflow">return</span> 0;</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="comment">// assume standard values if parameters are not specified</span></div><div class="line">    <span class="keywordflow">if</span> (cam)</div><div class="line">        opts.Crop = cam-&gt;<a name="a32"></a><a class="code" href="structlfCamera.html#af48074e34b4444b32bfe50f626aa3c21">CropFactor</a>;</div><div class="line">    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!opts.Crop)</div><div class="line">        opts.Crop = lens-&gt;<a name="a33"></a><a class="code" href="structlfLens.html#a2f9b563c3cd56c635761b7d4109ca7b3">CropFactor</a>;    </div><div class="line">    <span class="keywordflow">if</span> (!opts.Focal)</div><div class="line">        opts.Focal = lens-&gt;<a name="a34"></a><a class="code" href="structlfLens.html#a6928a9fed201b940e8a8f0205a6663c1">MinFocal</a>;</div><div class="line">    <span class="keywordflow">if</span> (!opts.Aperture)</div><div class="line">        opts.Aperture = lens-&gt;<a name="a35"></a><a class="code" href="structlfLens.html#a8cac58535976392db8542b8a3c76f6c0">MinAperture</a>;</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (opts.Verbose) {</div><div class="line">        g_print(<span class="stringliteral">&quot;\nProcessing parameters:\n&quot;</span></div><div class="line">                <span class="stringliteral">&quot;    |- Image crop factor: %g\n&quot;</span></div><div class="line">                <span class="stringliteral">&quot;    |- Focal length: %gmm\n&quot;</span></div><div class="line">                <span class="stringliteral">&quot;    |- Aperture: f/%g\n&quot;</span></div><div class="line">                <span class="stringliteral">&quot;    |- Distance: %gm\n\n&quot;</span>,</div><div class="line">                opts.Crop, opts.Focal, opts.Aperture, opts.Distance);</div><div class="line">    } <span class="keywordflow">else</span> {</div><div class="line">        g_print(<span class="stringliteral">&quot;= Processing parameters: Crop %g, Focal %gmm, Aperture f/%g, Distance: %gm\n&quot;</span>,</div><div class="line">                opts.Crop, opts.Focal, opts.Aperture, opts.Distance);</div><div class="line">    }</div><div class="line"></div><div class="line">    Image *img = <span class="keyword">new</span> Image ();</div><div class="line">    g_print (<span class="stringliteral">&quot;~ Loading `%s&#39; ... &quot;</span>, opts.Input);</div><div class="line">    <span class="keywordflow">if</span> (!img-&gt;Open (opts.Input)) {</div><div class="line">        g_print (<span class="stringliteral">&quot;\rERROR: failed to open file `%s&#39;\n&quot;</span>, opts.Input);</div><div class="line">        <span class="keyword">delete</span> img;</div><div class="line">        <span class="keyword">delete</span> ldb;</div><div class="line">        <span class="keywordflow">return</span> -1;</div><div class="line">    }</div><div class="line">    <span class="keywordflow">if</span> (!img-&gt;LoadPNG ()) {</div><div class="line">        g_print (<span class="stringliteral">&quot;\rERROR: failed to parse PNG data from file `%s&#39;\n&quot;</span>, opts.Input);</div><div class="line">        <span class="keyword">delete</span> img;</div><div class="line">        <span class="keyword">delete</span> ldb;</div><div class="line">        <span class="keywordflow">return</span> -1;</div><div class="line">    }</div><div class="line">    g_print (<span class="stringliteral">&quot;done.\n~ Image size [%ux%u].\n&quot;</span>, img-&gt;width, img-&gt;height);</div><div class="line"></div><div class="line">    <a class="code" href="structlfModifier.html">lfModifier</a> *mod = <span class="keyword">new</span> <a class="code" href="structlfModifier.html">lfModifier</a> (lens, opts.Crop, img-&gt;width, img-&gt;height);</div><div class="line">    <span class="keywordflow">if</span> (!mod) {</div><div class="line">        g_print (<span class="stringliteral">&quot;\rWarning: failed to create modifier\n&quot;</span>);</div><div class="line">        <span class="keyword">delete</span> img;</div><div class="line">        <span class="keyword">delete</span> ldb;</div><div class="line">        <span class="keywordflow">return</span> -1;</div><div class="line">    }</div><div class="line">    <span class="keywordtype">int</span> modflags = mod-&gt;<a name="a36"></a><a class="code" href="structlfModifier.html#a15fc45849ffb7f7f0f815025d4994ccd">Initialize</a> (</div><div class="line">        lens, <a name="a37"></a><a class="code" href="group__Correction.html#ggaff4770bc2656179dcfe2da40a25f8148a95ee1ddd11467921c63bedad9ab5f673">LF_PF_U8</a>, opts.Focal,</div><div class="line">        opts.Aperture, opts.Distance, opts.Scale, opts.TargetGeom,</div><div class="line">        opts.ModifyFlags, opts.Inverse);</div><div class="line"></div><div class="line">    g_print(<span class="stringliteral">&quot;~ Selected modifications: &quot;</span>);</div><div class="line">    <span class="keywordflow">if</span> (modflags &amp; <a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a2d151b0e170f0caff31885677d787846">LF_MODIFY_TCA</a>)</div><div class="line">        g_print (<span class="stringliteral">&quot;[tca]&quot;</span>);</div><div class="line">    <span class="keywordflow">if</span> (modflags &amp; <a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a6aded8676e2e6da6abe62709d63ee1da">LF_MODIFY_VIGNETTING</a>)</div><div class="line">        g_print (<span class="stringliteral">&quot;[vign]&quot;</span>);</div><div class="line">    <span class="keywordflow">if</span> (modflags &amp; <a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a7be69c9a6c86737de2ed4e5bff238086">LF_MODIFY_DISTORTION</a>)</div><div class="line">        g_print (<span class="stringliteral">&quot;[dist]&quot;</span>);</div><div class="line">    <span class="keywordflow">if</span> (modflags &amp; <a class="code" href="group__Correction.html#ggadf764cbdea00d65edcd07bb9953ad2b7a6fa0d1e43f6dbde8c395be838b89ad52">LF_MODIFY_GEOMETRY</a>)</div><div class="line">        g_print (<span class="stringliteral">&quot;[geom]&quot;</span>);</div><div class="line">    <span class="keywordflow">if</span> (opts.Scale != 1.0)</div><div class="line">        g_print (<span class="stringliteral">&quot;[scale]&quot;</span>);</div><div class="line">    <span class="keywordflow">if</span> (modflags==0)</div><div class="line">        g_print (<span class="stringliteral">&quot;[NOTHING]&quot;</span>);</div><div class="line">    g_print (<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"></div><div class="line">    g_print(<span class="stringliteral">&quot;~ Run processing chain... &quot;</span>);</div><div class="line"></div><div class="line">    clock_t st;</div><div class="line">    clock_t xt = clock ();</div><div class="line">    <span class="keywordflow">while</span> (xt == (st = clock ()))</div><div class="line">        ;</div><div class="line"></div><div class="line">    img = ApplyModifier (modflags, opts.Inverse, img, mod);</div><div class="line"></div><div class="line">    clock_t et = clock ();</div><div class="line">    g_print (<span class="stringliteral">&quot;done (%.3g secs)\n&quot;</span>, <span class="keywordtype">double</span> (et - st) / CLOCKS_PER_SEC);</div><div class="line"></div><div class="line">    <span class="keyword">delete</span> mod;</div><div class="line"></div><div class="line">    g_print (<span class="stringliteral">&quot;~ Save output as `%s&#39;...&quot;</span>, opts.Output);</div><div class="line">    <span class="keywordtype">bool</span> ok = img-&gt;SavePNG (opts.Output);</div><div class="line"></div><div class="line">    <span class="keyword">delete</span> img;</div><div class="line">    <span class="keyword">delete</span> ldb;</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (ok) {</div><div class="line">        g_print (<span class="stringliteral">&quot; done\n&quot;</span>);</div><div class="line">        <span class="keywordflow">return</span> 0;</div><div class="line">    } <span class="keywordflow">else</span> {</div><div class="line">        g_print (<span class="stringliteral">&quot; FAILED\n&quot;</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><!-- 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 &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.15
</small></address>
</body>
</html>