arm_compute v17.04
[platform/upstream/armcl.git] / documentation / fast__corners_8cl.xhtml
1 <!-- HTML header for doxygen 1.8.9.1-->
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml">
4 <head>
5 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
7 <meta name="generator" content="Doxygen 1.8.11"/>
8 <meta name="robots" content="NOINDEX, NOFOLLOW" /> <!-- Prevent indexing by search engines -->
9 <title>ARM Compute Library: src/core/CL/cl_kernels/fast_corners.cl File Reference</title>
10 <link href="tabs.css" rel="stylesheet" type="text/css"/>
11 <script type="text/javascript" src="jquery.js"></script>
12 <script type="text/javascript" src="dynsections.js"></script>
13 <link href="navtree.css" rel="stylesheet" type="text/css"/>
14 <script type="text/javascript" src="resize.js"></script>
15 <script type="text/javascript" src="navtreedata.js"></script>
16 <script type="text/javascript" src="navtree.js"></script>
17 <script type="text/javascript">
18   $(document).ready(initResizable);
19   $(window).load(resizeHeight);
20 </script>
21 <link href="search/search.css" rel="stylesheet" type="text/css"/>
22 <script type="text/javascript" src="search/searchdata.js"></script>
23 <script type="text/javascript" src="search/search.js"></script>
24 <script type="text/javascript">
25   $(document).ready(function() { init_search(); });
26 </script>
27 <script type="text/x-mathjax-config">
28   MathJax.Hub.Config({
29     extensions: ["tex2jax.js"],
30     jax: ["input/TeX","output/HTML-CSS"],
31 });
32 </script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
33 <link href="doxygen.css" rel="stylesheet" type="text/css" />
34 </head>
35 <body>
36 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
37 <div id="titlearea">
38 <table cellspacing="0" cellpadding="0">
39  <tbody>
40  <tr style="height: 56px;">
41   <td style="padding-left: 0.5em;">
42    <div id="projectname">ARM Compute Library
43    &#160;<span id="projectnumber">17.04</span>
44    </div>
45   </td>
46  </tr>
47  </tbody>
48 </table>
49 </div>
50 <!-- end header part -->
51 <!-- Generated by Doxygen 1.8.11 -->
52 <script type="text/javascript">
53 var searchBox = new SearchBox("searchBox", "search",false,'Search');
54 </script>
55   <div id="navrow1" class="tabs">
56     <ul class="tablist">
57       <li><a href="index.xhtml"><span>Main&#160;Page</span></a></li>
58       <li><a href="namespaces.xhtml"><span>Namespaces</span></a></li>
59       <li><a href="annotated.xhtml"><span>Data&#160;Structures</span></a></li>
60       <li class="current"><a href="files.xhtml"><span>Files</span></a></li>
61       <li>
62         <div id="MSearchBox" class="MSearchBoxInactive">
63         <span class="left">
64           <img id="MSearchSelect" src="search/mag_sel.png"
65                onmouseover="return searchBox.OnSearchSelectShow()"
66                onmouseout="return searchBox.OnSearchSelectHide()"
67                alt=""/>
68           <input type="text" id="MSearchField" value="Search" accesskey="S"
69                onfocus="searchBox.OnSearchFieldFocus(true)" 
70                onblur="searchBox.OnSearchFieldFocus(false)" 
71                onkeyup="searchBox.OnSearchFieldChange(event)"/>
72           </span><span class="right">
73             <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
74           </span>
75         </div>
76       </li>
77     </ul>
78   </div>
79   <div id="navrow2" class="tabs2">
80     <ul class="tablist">
81       <li><a href="files.xhtml"><span>File&#160;List</span></a></li>
82       <li><a href="globals.xhtml"><span>Globals</span></a></li>
83     </ul>
84   </div>
85 </div><!-- top -->
86 <div id="side-nav" class="ui-resizable side-nav-resizable">
87   <div id="nav-tree">
88     <div id="nav-tree-contents">
89       <div id="nav-sync" class="sync"></div>
90     </div>
91   </div>
92   <div id="splitbar" style="-moz-user-select:none;" 
93        class="ui-resizable-handle">
94   </div>
95 </div>
96 <script type="text/javascript">
97 $(document).ready(function(){initNavTree('fast__corners_8cl.xhtml','');});
98 </script>
99 <div id="doc-content">
100 <!-- window showing the filter options -->
101 <div id="MSearchSelectWindow"
102      onmouseover="return searchBox.OnSearchSelectShow()"
103      onmouseout="return searchBox.OnSearchSelectHide()"
104      onkeydown="return searchBox.OnSearchSelectKey(event)">
105 </div>
106
107 <!-- iframe showing the search results (closed by default) -->
108 <div id="MSearchResultsWindow">
109 <iframe src="javascript:void(0)" frameborder="0" 
110         name="MSearchResults" id="MSearchResults">
111 </iframe>
112 </div>
113
114 <div class="header">
115   <div class="summary">
116 <a href="#define-members">Macros</a> &#124;
117 <a href="#func-members">Functions</a> &#124;
118 <a href="#var-members">Variables</a>  </div>
119   <div class="headertitle">
120 <div class="title">fast_corners.cl File Reference</div>  </div>
121 </div><!--header-->
122 <div class="contents">
123 <div class="textblock"><code>#include &quot;<a class="el" href="helpers_8h_source.xhtml">helpers.h</a>&quot;</code><br />
124 <code>#include &quot;<a class="el" href="types_8h_source.xhtml">types.h</a>&quot;</code><br />
125 </div>
126 <p><a href="fast__corners_8cl_source.xhtml">Go to the source code of this file.</a></p>
127 <table class="memberdecls">
128 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
129 Macros</h2></td></tr>
130 <tr class="memitem:a9da9e257c05fa101dacfaaedd305f5bb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(ptr,  a,  stride,  dark,  bright,  dark_mask,  bright_mask)</td></tr>
131 <tr class="memdesc:a9da9e257c05fa101dacfaaedd305f5bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load a pixel and set the mask values.  <a href="#a9da9e257c05fa101dacfaaedd305f5bb">More...</a><br /></td></tr>
132 <tr class="separator:a9da9e257c05fa101dacfaaedd305f5bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
133 <tr class="memitem:a2e2df45f46c673a1a5a1c8f4eb06aa09"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a>(bright_mask,  dark_mask,  isCorner)</td></tr>
134 <tr class="memdesc:a2e2df45f46c673a1a5a1c8f4eb06aa09"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a pixel is a corner.  <a href="#a2e2df45f46c673a1a5a1c8f4eb06aa09">More...</a><br /></td></tr>
135 <tr class="separator:a2e2df45f46c673a1a5a1c8f4eb06aa09"><td class="memSeparator" colspan="2">&#160;</td></tr>
136 </table><table class="memberdecls">
137 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
138 Functions</h2></td></tr>
139 <tr class="memitem:aea4e2a64dfdec6a9ecf62f8cd518fc17"><td class="memItemLeft" align="right" valign="top">uchar&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#aea4e2a64dfdec6a9ecf62f8cd518fc17">compute_strength</a> (uchar candidate_pixel, __global unsigned char *ptr, unsigned int stride, unsigned char threshold)</td></tr>
140 <tr class="separator:aea4e2a64dfdec6a9ecf62f8cd518fc17"><td class="memSeparator" colspan="2">&#160;</td></tr>
141 <tr class="memitem:a33152baf05787bd17259b692bfba24af"><td class="memItemLeft" align="right" valign="top">__kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#a33152baf05787bd17259b692bfba24af">fast_corners</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_offset_first_element_in_bytes, __global uchar *output_ptr, uint output_stride_x, uint output_step_x, uint output_stride_y, uint output_step_y, uint output_offset_first_element_in_bytes, float threshold_value)</td></tr>
142 <tr class="memdesc:a33152baf05787bd17259b692bfba24af"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fast corners implementation.  <a href="#a33152baf05787bd17259b692bfba24af">More...</a><br /></td></tr>
143 <tr class="separator:a33152baf05787bd17259b692bfba24af"><td class="memSeparator" colspan="2">&#160;</td></tr>
144 <tr class="memitem:ad1e2ee5ba250337a4e1889423e11aa81"><td class="memItemLeft" align="right" valign="top">__kernel void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#ad1e2ee5ba250337a4e1889423e11aa81">copy_to_keypoint</a> (__global uchar *input_ptr, uint input_stride_x, uint input_step_x, uint input_stride_y, uint input_step_y, uint input_offset_first_element_in_bytes, uint max_num_points, uint <a class="el" href="helpers_8h.xhtml#a009469e4d9b8fce3b6d5e97d2077827d">offset</a>, __global uint *num_of_points, __global <a class="el" href="struct_keypoint.xhtml">Keypoint</a> *out)</td></tr>
145 <tr class="memdesc:ad1e2ee5ba250337a4e1889423e11aa81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy result to <a class="el" href="struct_keypoint.xhtml">Keypoint</a> buffer and count number of corners.  <a href="#ad1e2ee5ba250337a4e1889423e11aa81">More...</a><br /></td></tr>
146 <tr class="separator:ad1e2ee5ba250337a4e1889423e11aa81"><td class="memSeparator" colspan="2">&#160;</td></tr>
147 </table><table class="memberdecls">
148 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
149 Variables</h2></td></tr>
150 <tr class="memitem:a8d09117e1c8a726efc8d9ec9d9d8ed8a"><td class="memItemLeft" align="right" valign="top">constant int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="fast__corners_8cl.xhtml#a8d09117e1c8a726efc8d9ec9d9d8ed8a">offsets_s</a> [16][2]</td></tr>
151 <tr class="separator:a8d09117e1c8a726efc8d9ec9d9d8ed8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
152 </table>
153 <h2 class="groupheader">Macro Definition Documentation</h2>
154 <a class="anchor" id="a2e2df45f46c673a1a5a1c8f4eb06aa09"></a>
155 <div class="memitem">
156 <div class="memproto">
157       <table class="memname">
158         <tr>
159           <td class="memname">#define CHECK_CORNER</td>
160           <td>(</td>
161           <td class="paramtype">&#160;</td>
162           <td class="paramname">bright_mask, </td>
163         </tr>
164         <tr>
165           <td class="paramkey"></td>
166           <td></td>
167           <td class="paramtype">&#160;</td>
168           <td class="paramname">dark_mask, </td>
169         </tr>
170         <tr>
171           <td class="paramkey"></td>
172           <td></td>
173           <td class="paramtype">&#160;</td>
174           <td class="paramname">isCorner&#160;</td>
175         </tr>
176         <tr>
177           <td></td>
178           <td>)</td>
179           <td></td><td></td>
180         </tr>
181       </table>
182 </div><div class="memdoc">
183 <b>Value:</b><div class="fragment"><div class="line">{                                                     \</div><div class="line">        for(<span class="keywordtype">int</span> i = 0; i &lt; 16; i++)                       \</div><div class="line">        {                                                 \</div><div class="line">            isCorner |= ((bright_mask &amp; 0x1FF) == 0x1FF); \</div><div class="line">            isCorner |= ((dark_mask &amp; 0x1FF) == 0x1FF);   \</div><div class="line">            if(isCorner)                                  \</div><div class="line">            {                                             \</div><div class="line">                break;                                    \</div><div class="line">            }                                             \</div><div class="line">            bright_mask &gt;&gt;= 1;                            \</div><div class="line">            dark_mask &gt;&gt;= 1;                              \</div><div class="line">        }                                                 \</div><div class="line">    }</div></div><!-- fragment -->
184 <p>Checks if a pixel is a corner. </p>
185 <p>Pixel is considerred as a corner if the 9 continuous pixels in the Bresenham circle are bright or dark.</p>
186 <dl class="params"><dt>Parameters</dt><dd>
187   <table class="params">
188     <tr><td class="paramdir">[in]</td><td class="paramname">bright_mask</td><td>The mask recording postions of bright pixels </td></tr>
189     <tr><td class="paramdir">[in]</td><td class="paramname">dark_mask</td><td>The mask recording postions of dark pixels </td></tr>
190     <tr><td class="paramdir">[out]</td><td class="paramname">isCorner</td><td>Indicate whether candidate pixel is corner </td></tr>
191   </table>
192   </dd>
193 </dl>
194
195 <p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00082">82</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>
196
197 <p>Referenced by <a class="el" href="fast__corners_8cl_source.xhtml#l00098">compute_strength()</a>, and <a class="el" href="fast__corners_8cl_source.xhtml#l00155">fast_corners()</a>.</p>
198
199 </div>
200 </div>
201 <a class="anchor" id="a9da9e257c05fa101dacfaaedd305f5bb"></a>
202 <div class="memitem">
203 <div class="memproto">
204       <table class="memname">
205         <tr>
206           <td class="memname">#define LOAD_AND_SET_MASK</td>
207           <td>(</td>
208           <td class="paramtype">&#160;</td>
209           <td class="paramname">ptr, </td>
210         </tr>
211         <tr>
212           <td class="paramkey"></td>
213           <td></td>
214           <td class="paramtype">&#160;</td>
215           <td class="paramname">a, </td>
216         </tr>
217         <tr>
218           <td class="paramkey"></td>
219           <td></td>
220           <td class="paramtype">&#160;</td>
221           <td class="paramname">stride, </td>
222         </tr>
223         <tr>
224           <td class="paramkey"></td>
225           <td></td>
226           <td class="paramtype">&#160;</td>
227           <td class="paramname">dark, </td>
228         </tr>
229         <tr>
230           <td class="paramkey"></td>
231           <td></td>
232           <td class="paramtype">&#160;</td>
233           <td class="paramname">bright, </td>
234         </tr>
235         <tr>
236           <td class="paramkey"></td>
237           <td></td>
238           <td class="paramtype">&#160;</td>
239           <td class="paramname">dark_mask, </td>
240         </tr>
241         <tr>
242           <td class="paramkey"></td>
243           <td></td>
244           <td class="paramtype">&#160;</td>
245           <td class="paramname">bright_mask&#160;</td>
246         </tr>
247         <tr>
248           <td></td>
249           <td>)</td>
250           <td></td><td></td>
251         </tr>
252       </table>
253 </div><div class="memdoc">
254 <b>Value:</b><div class="fragment"><div class="line">{                                                                           \</div><div class="line">        unsigned <span class="keywordtype">char</span> pixel;                                                    \</div><div class="line">        pixel = *(ptr + (int)stride * <a class="code" href="fast__corners_8cl.xhtml#a8d09117e1c8a726efc8d9ec9d9d8ed8a">offsets_s</a>[a][1] + <a class="code" href="fast__corners_8cl.xhtml#a8d09117e1c8a726efc8d9ec9d9d8ed8a">offsets_s</a>[a][0]);       \</div><div class="line">        dark_mask |= (pixel &lt; dark) &lt;&lt; a;                                       \</div><div class="line">        bright_mask |= (pixel &gt; bright) &lt;&lt; a;                                   \</div><div class="line">    }</div><div class="ttc" id="fast__corners_8cl_xhtml_a8d09117e1c8a726efc8d9ec9d9d8ed8a"><div class="ttname"><a href="fast__corners_8cl.xhtml#a8d09117e1c8a726efc8d9ec9d9d8ed8a">offsets_s</a></div><div class="ttdeci">constant int offsets_s[16][2]</div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00037">fast_corners.cl:37</a></div></div>
255 </div><!-- fragment -->
256 <p>Load a pixel and set the mask values. </p>
257 <dl class="params"><dt>Parameters</dt><dd>
258   <table class="params">
259     <tr><td class="paramdir">[in]</td><td class="paramname">ptr</td><td>The pointer to the starting address of source image </td></tr>
260     <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>Index to indicate the position in the Bresenham circle </td></tr>
261     <tr><td class="paramdir">[in]</td><td class="paramname">stride</td><td>Stride of source image in x dimension </td></tr>
262     <tr><td class="paramdir">[in]</td><td class="paramname">dark</td><td>The left end of the threshold range </td></tr>
263     <tr><td class="paramdir">[in]</td><td class="paramname">bright</td><td>The right end of the threshold range </td></tr>
264     <tr><td class="paramdir">[out]</td><td class="paramname">dark_mask</td><td>The bit-set mask records dark pixels. Its bit is set as 1 if the corresponding pixel is dark </td></tr>
265     <tr><td class="paramdir">[out]</td><td class="paramname">bright_mask</td><td>The bit-set mask records bright pixels. Its bit is set as 1 if the corresponding pixel is bright </td></tr>
266   </table>
267   </dd>
268 </dl>
269
270 <p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00068">68</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>
271
272 <p>Referenced by <a class="el" href="fast__corners_8cl_source.xhtml#l00098">compute_strength()</a>, and <a class="el" href="fast__corners_8cl_source.xhtml#l00155">fast_corners()</a>.</p>
273
274 </div>
275 </div>
276 <h2 class="groupheader">Function Documentation</h2>
277 <a class="anchor" id="aea4e2a64dfdec6a9ecf62f8cd518fc17"></a>
278 <div class="memitem">
279 <div class="memproto">
280       <table class="memname">
281         <tr>
282           <td class="memname">uchar compute_strength </td>
283           <td>(</td>
284           <td class="paramtype">uchar&#160;</td>
285           <td class="paramname"><em>candidate_pixel</em>, </td>
286         </tr>
287         <tr>
288           <td class="paramkey"></td>
289           <td></td>
290           <td class="paramtype">__global unsigned char *&#160;</td>
291           <td class="paramname"><em>ptr</em>, </td>
292         </tr>
293         <tr>
294           <td class="paramkey"></td>
295           <td></td>
296           <td class="paramtype">unsigned int&#160;</td>
297           <td class="paramname"><em>stride</em>, </td>
298         </tr>
299         <tr>
300           <td class="paramkey"></td>
301           <td></td>
302           <td class="paramtype">unsigned char&#160;</td>
303           <td class="paramname"><em>threshold</em>&#160;</td>
304         </tr>
305         <tr>
306           <td></td>
307           <td>)</td>
308           <td></td><td></td>
309         </tr>
310       </table>
311 </div><div class="memdoc">
312
313 <p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00098">98</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>
314
315 <p>References <a class="el" href="fast__corners_8cl_source.xhtml#l00082">CHECK_CORNER</a>, and <a class="el" href="fast__corners_8cl_source.xhtml#l00068">LOAD_AND_SET_MASK</a>.</p>
316
317 <p>Referenced by <a class="el" href="fast__corners_8cl_source.xhtml#l00155">fast_corners()</a>.</p>
318 <div class="fragment"><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;{</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordtype">short</span> a = threshold;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordtype">short</span> b = 255;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">while</span>(b - a &gt; 1)</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    {</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        uchar        c           = convert_uchar_sat((a + b) / 2);</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bright_mask = 0;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dark_mask   = 0;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p_bright = add_sat(candidate_pixel, c);</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p_dark   = sub_sat(candidate_pixel, c);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <span class="keywordtype">bool</span> isCorner = 0;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="keywordflow">for</span>(uint i = 0; i &lt; 16; i++)</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        {</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;            <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(ptr, i, stride, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        }</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        bright_mask |= (bright_mask &lt;&lt; 16);</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        dark_mask |= (dark_mask &lt;&lt; 16);</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <a class="code" href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a>(bright_mask, dark_mask, isCorner);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        <span class="keywordflow">if</span>(isCorner)</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        {</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;            a = convert_short(c);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;        }</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        {</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;            b = convert_short(c);</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        }</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    }</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">return</span> a;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;}</div><div class="ttc" id="fast__corners_8cl_xhtml_a9da9e257c05fa101dacfaaedd305f5bb"><div class="ttname"><a href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a></div><div class="ttdeci">#define LOAD_AND_SET_MASK(ptr, a, stride, dark, bright, dark_mask, bright_mask)</div><div class="ttdoc">Load a pixel and set the mask values. </div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00068">fast_corners.cl:68</a></div></div>
319 <div class="ttc" id="fast__corners_8cl_xhtml_a2e2df45f46c673a1a5a1c8f4eb06aa09"><div class="ttname"><a href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a></div><div class="ttdeci">#define CHECK_CORNER(bright_mask, dark_mask, isCorner)</div><div class="ttdoc">Checks if a pixel is a corner. </div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00082">fast_corners.cl:82</a></div></div>
320 </div><!-- fragment -->
321 </div>
322 </div>
323 <a class="anchor" id="ad1e2ee5ba250337a4e1889423e11aa81"></a>
324 <div class="memitem">
325 <div class="memproto">
326       <table class="memname">
327         <tr>
328           <td class="memname">__kernel void copy_to_keypoint </td>
329           <td>(</td>
330           <td class="paramtype">__global uchar *&#160;</td>
331           <td class="paramname"><em>input_ptr</em>, </td>
332         </tr>
333         <tr>
334           <td class="paramkey"></td>
335           <td></td>
336           <td class="paramtype">uint&#160;</td>
337           <td class="paramname"><em>input_stride_x</em>, </td>
338         </tr>
339         <tr>
340           <td class="paramkey"></td>
341           <td></td>
342           <td class="paramtype">uint&#160;</td>
343           <td class="paramname"><em>input_step_x</em>, </td>
344         </tr>
345         <tr>
346           <td class="paramkey"></td>
347           <td></td>
348           <td class="paramtype">uint&#160;</td>
349           <td class="paramname"><em>input_stride_y</em>, </td>
350         </tr>
351         <tr>
352           <td class="paramkey"></td>
353           <td></td>
354           <td class="paramtype">uint&#160;</td>
355           <td class="paramname"><em>input_step_y</em>, </td>
356         </tr>
357         <tr>
358           <td class="paramkey"></td>
359           <td></td>
360           <td class="paramtype">uint&#160;</td>
361           <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
362         </tr>
363         <tr>
364           <td class="paramkey"></td>
365           <td></td>
366           <td class="paramtype">uint&#160;</td>
367           <td class="paramname"><em>max_num_points</em>, </td>
368         </tr>
369         <tr>
370           <td class="paramkey"></td>
371           <td></td>
372           <td class="paramtype">uint&#160;</td>
373           <td class="paramname"><em>offset</em>, </td>
374         </tr>
375         <tr>
376           <td class="paramkey"></td>
377           <td></td>
378           <td class="paramtype">__global uint *&#160;</td>
379           <td class="paramname"><em>num_of_points</em>, </td>
380         </tr>
381         <tr>
382           <td class="paramkey"></td>
383           <td></td>
384           <td class="paramtype">__global <a class="el" href="struct_keypoint.xhtml">Keypoint</a> *&#160;</td>
385           <td class="paramname"><em>out</em>&#160;</td>
386         </tr>
387         <tr>
388           <td></td>
389           <td>)</td>
390           <td></td><td></td>
391         </tr>
392       </table>
393 </div><div class="memdoc">
394
395 <p>Copy result to <a class="el" href="struct_keypoint.xhtml">Keypoint</a> buffer and count number of corners. </p>
396 <dl class="params"><dt>Parameters</dt><dd>
397   <table class="params">
398     <tr><td class="paramdir">[in]</td><td class="paramname">input_ptr</td><td>Pointer to the image with calculated strenghs. Supported data types: U8 </td></tr>
399     <tr><td class="paramdir">[in]</td><td class="paramname">input_stride_x</td><td>Stride of the first source image in X dimension (in bytes) </td></tr>
400     <tr><td class="paramdir">[in]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
401     <tr><td class="paramdir">[in]</td><td class="paramname">input_stride_y</td><td>Stride of the first source image in Y dimension (in bytes) </td></tr>
402     <tr><td class="paramdir">[in]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
403     <tr><td class="paramdir">[in]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the first source image </td></tr>
404     <tr><td class="paramdir">[in]</td><td class="paramname">max_num_points</td><td>The maximum number of keypoints the array can hold </td></tr>
405     <tr><td class="paramdir">[out]</td><td class="paramname">offset</td><td>The number of skipped pixels in x dimension </td></tr>
406     <tr><td class="paramdir">[out]</td><td class="paramname">num_of_points</td><td>Number of points found </td></tr>
407     <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>The keypoints found </td></tr>
408   </table>
409   </dd>
410 </dl>
411
412 <p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00231">231</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>
413
414 <p>References <a class="el" href="helpers_8h_source.xhtml#l00073">CONVERT_TO_IMAGE_STRUCT</a>, <a class="el" href="helpers_8h_source.xhtml#l00201">offset()</a>, and <a class="el" href="helpers_8h_source.xhtml#l00097">Image::ptr</a>.</p>
415 <div class="fragment"><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;{</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="preprocessor">#ifndef UPDATE_NUMBER</span></div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <span class="keywordflow">if</span>(*num_of_points &gt;= max_num_points)</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    {</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    }</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <a class="code" href="struct_image.xhtml">Image</a> in = <a class="code" href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a>(input);</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    uchar value = *in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    <span class="keywordflow">if</span>(value &gt; 0)</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    {</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        <span class="keywordtype">int</span> <span class="keywordtype">id</span> = atomic_inc(num_of_points);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        <span class="keywordflow">if</span>(<span class="keywordtype">id</span> &lt; max_num_points)</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        {</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            out[id].strength        = value;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;            out[id].x               = get_global_id(0) + <a class="code" href="helpers_8h.xhtml#a009469e4d9b8fce3b6d5e97d2077827d">offset</a>;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;            out[id].y               = get_global_id(1) + <a class="code" href="helpers_8h.xhtml#a009469e4d9b8fce3b6d5e97d2077827d">offset</a>;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;            out[id].tracking_status = 1;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        }</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    }</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;}</div><div class="ttc" id="helpers_8h_xhtml_a009469e4d9b8fce3b6d5e97d2077827d"><div class="ttname"><a href="helpers_8h.xhtml#a009469e4d9b8fce3b6d5e97d2077827d">offset</a></div><div class="ttdeci">__global uchar * offset(const Image *img, int x, int y)</div><div class="ttdoc">Get the pointer position of a Image. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00201">helpers.h:201</a></div></div>
416 <div class="ttc" id="helpers_8h_xhtml_aebe814363556c244be043b13e7969197"><div class="ttname"><a href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_IMAGE_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00073">helpers.h:73</a></div></div>
417 <div class="ttc" id="struct_image_xhtml"><div class="ttname"><a href="struct_image.xhtml">Image</a></div><div class="ttdoc">Structure to hold Image information. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00095">helpers.h:95</a></div></div>
418 <div class="ttc" id="struct_image_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">Image::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00097">helpers.h:97</a></div></div>
419 </div><!-- fragment -->
420 </div>
421 </div>
422 <a class="anchor" id="a33152baf05787bd17259b692bfba24af"></a>
423 <div class="memitem">
424 <div class="memproto">
425       <table class="memname">
426         <tr>
427           <td class="memname">__kernel void fast_corners </td>
428           <td>(</td>
429           <td class="paramtype">__global uchar *&#160;</td>
430           <td class="paramname"><em>input_ptr</em>, </td>
431         </tr>
432         <tr>
433           <td class="paramkey"></td>
434           <td></td>
435           <td class="paramtype">uint&#160;</td>
436           <td class="paramname"><em>input_stride_x</em>, </td>
437         </tr>
438         <tr>
439           <td class="paramkey"></td>
440           <td></td>
441           <td class="paramtype">uint&#160;</td>
442           <td class="paramname"><em>input_step_x</em>, </td>
443         </tr>
444         <tr>
445           <td class="paramkey"></td>
446           <td></td>
447           <td class="paramtype">uint&#160;</td>
448           <td class="paramname"><em>input_stride_y</em>, </td>
449         </tr>
450         <tr>
451           <td class="paramkey"></td>
452           <td></td>
453           <td class="paramtype">uint&#160;</td>
454           <td class="paramname"><em>input_step_y</em>, </td>
455         </tr>
456         <tr>
457           <td class="paramkey"></td>
458           <td></td>
459           <td class="paramtype">uint&#160;</td>
460           <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
461         </tr>
462         <tr>
463           <td class="paramkey"></td>
464           <td></td>
465           <td class="paramtype">__global uchar *&#160;</td>
466           <td class="paramname"><em>output_ptr</em>, </td>
467         </tr>
468         <tr>
469           <td class="paramkey"></td>
470           <td></td>
471           <td class="paramtype">uint&#160;</td>
472           <td class="paramname"><em>output_stride_x</em>, </td>
473         </tr>
474         <tr>
475           <td class="paramkey"></td>
476           <td></td>
477           <td class="paramtype">uint&#160;</td>
478           <td class="paramname"><em>output_step_x</em>, </td>
479         </tr>
480         <tr>
481           <td class="paramkey"></td>
482           <td></td>
483           <td class="paramtype">uint&#160;</td>
484           <td class="paramname"><em>output_stride_y</em>, </td>
485         </tr>
486         <tr>
487           <td class="paramkey"></td>
488           <td></td>
489           <td class="paramtype">uint&#160;</td>
490           <td class="paramname"><em>output_step_y</em>, </td>
491         </tr>
492         <tr>
493           <td class="paramkey"></td>
494           <td></td>
495           <td class="paramtype">uint&#160;</td>
496           <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
497         </tr>
498         <tr>
499           <td class="paramkey"></td>
500           <td></td>
501           <td class="paramtype">float&#160;</td>
502           <td class="paramname"><em>threshold_value</em>&#160;</td>
503         </tr>
504         <tr>
505           <td></td>
506           <td>)</td>
507           <td></td><td></td>
508         </tr>
509       </table>
510 </div><div class="memdoc">
511
512 <p>Fast corners implementation. </p>
513 <p>Calculates and returns the strength of each pixel.</p>
514 <p>The algorithm loops through the 16 pixels in the Bresenham circle and set low 16 bit of masks if corresponding pixel is bright or dark. It then copy the low 16 bit to the high 16 bit of the masks. Right shift the bit to check whether the 9 continuous bits from the LSB are set.</p>
515 <dl class="params"><dt>Parameters</dt><dd>
516   <table class="params">
517     <tr><td class="paramdir">[in]</td><td class="paramname">input_ptr</td><td>Pointer to the first source image. Supported data types: U8 </td></tr>
518     <tr><td class="paramdir">[in]</td><td class="paramname">input_stride_x</td><td>Stride of the first source image in X dimension (in bytes) </td></tr>
519     <tr><td class="paramdir">[in]</td><td class="paramname">input_step_x</td><td>input_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
520     <tr><td class="paramdir">[in]</td><td class="paramname">input_stride_y</td><td>Stride of the first source image in Y dimension (in bytes) </td></tr>
521     <tr><td class="paramdir">[in]</td><td class="paramname">input_step_y</td><td>input_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
522     <tr><td class="paramdir">[in]</td><td class="paramname">input_offset_first_element_in_bytes</td><td>The offset of the first element in the first source image </td></tr>
523     <tr><td class="paramdir">[out]</td><td class="paramname">output_ptr</td><td>Pointer to the first source image. Supported data types: U8 </td></tr>
524     <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_x</td><td>Stride of the first source image in X dimension (in bytes) </td></tr>
525     <tr><td class="paramdir">[in]</td><td class="paramname">output_step_x</td><td>output_stride_x * number of elements along X processed per workitem(in bytes) </td></tr>
526     <tr><td class="paramdir">[in]</td><td class="paramname">output_stride_y</td><td>Stride of the first source image in Y dimension (in bytes) </td></tr>
527     <tr><td class="paramdir">[in]</td><td class="paramname">output_step_y</td><td>output_stride_y * number of elements along Y processed per workitem(in bytes) </td></tr>
528     <tr><td class="paramdir">[in]</td><td class="paramname">output_offset_first_element_in_bytes</td><td>The offset of the first element in the first source image </td></tr>
529     <tr><td class="paramdir">[in]</td><td class="paramname">threshold_value</td><td>Threshold value. </td></tr>
530   </table>
531   </dd>
532 </dl>
533
534 <p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00155">155</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>
535
536 <p>References <a class="el" href="fast__corners_8cl_source.xhtml#l00082">CHECK_CORNER</a>, <a class="el" href="fast__corners_8cl_source.xhtml#l00098">compute_strength()</a>, <a class="el" href="helpers_8h_source.xhtml#l00073">CONVERT_TO_IMAGE_STRUCT</a>, <a class="el" href="fast__corners_8cl_source.xhtml#l00068">LOAD_AND_SET_MASK</a>, and <a class="el" href="helpers_8h_source.xhtml#l00097">Image::ptr</a>.</p>
537 <div class="fragment"><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;{</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <a class="code" href="struct_image.xhtml">Image</a> in  = <a class="code" href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a>(input);</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <a class="code" href="struct_image.xhtml">Image</a> out = <a class="code" href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a>(output);</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> threshold = (uchar)threshold_value;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bright_mask = 0;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dark_mask   = 0;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> isCorner = 0;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p        = *in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p_bright = add_sat(p, threshold);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> p_dark   = sub_sat(p, threshold);</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>, 0, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 4, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 8, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 12, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    if(((bright_mask | dark_mask) &amp; 0x1111) == 0)</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    {</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        *out.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> = 0;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    }</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>, 1, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 2, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 3, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 5, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 6, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 7, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 9, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 10, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 11, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 13, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 14, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a>(in.ptr, 15, input_stride_y, p_dark, p_bright, dark_mask, bright_mask)</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    bright_mask |= (bright_mask &lt;&lt; 16);</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    dark_mask |= (dark_mask &lt;&lt; 16);</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <a class="code" href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a>(bright_mask, dark_mask, isCorner)</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    if(!isCorner)</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    {</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        *out.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> = 0;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    }</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="preprocessor">#ifndef USE_MAXSUPPRESSION</span></div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    *out.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> = 1;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    *out.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a> = <a class="code" href="fast__corners_8cl.xhtml#aea4e2a64dfdec6a9ecf62f8cd518fc17">compute_strength</a>(p, in.<a class="code" href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>, input_stride_y, threshold);</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;}</div><div class="ttc" id="fast__corners_8cl_xhtml_aea4e2a64dfdec6a9ecf62f8cd518fc17"><div class="ttname"><a href="fast__corners_8cl.xhtml#aea4e2a64dfdec6a9ecf62f8cd518fc17">compute_strength</a></div><div class="ttdeci">uchar compute_strength(uchar candidate_pixel, __global unsigned char *ptr, unsigned int stride, unsigned char threshold)</div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00098">fast_corners.cl:98</a></div></div>
538 <div class="ttc" id="fast__corners_8cl_xhtml_a9da9e257c05fa101dacfaaedd305f5bb"><div class="ttname"><a href="fast__corners_8cl.xhtml#a9da9e257c05fa101dacfaaedd305f5bb">LOAD_AND_SET_MASK</a></div><div class="ttdeci">#define LOAD_AND_SET_MASK(ptr, a, stride, dark, bright, dark_mask, bright_mask)</div><div class="ttdoc">Load a pixel and set the mask values. </div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00068">fast_corners.cl:68</a></div></div>
539 <div class="ttc" id="helpers_8h_xhtml_aebe814363556c244be043b13e7969197"><div class="ttname"><a href="helpers_8h.xhtml#aebe814363556c244be043b13e7969197">CONVERT_TO_IMAGE_STRUCT</a></div><div class="ttdeci">#define CONVERT_TO_IMAGE_STRUCT(name)</div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00073">helpers.h:73</a></div></div>
540 <div class="ttc" id="fast__corners_8cl_xhtml_a2e2df45f46c673a1a5a1c8f4eb06aa09"><div class="ttname"><a href="fast__corners_8cl.xhtml#a2e2df45f46c673a1a5a1c8f4eb06aa09">CHECK_CORNER</a></div><div class="ttdeci">#define CHECK_CORNER(bright_mask, dark_mask, isCorner)</div><div class="ttdoc">Checks if a pixel is a corner. </div><div class="ttdef"><b>Definition:</b> <a href="fast__corners_8cl_source.xhtml#l00082">fast_corners.cl:82</a></div></div>
541 <div class="ttc" id="struct_image_xhtml"><div class="ttname"><a href="struct_image.xhtml">Image</a></div><div class="ttdoc">Structure to hold Image information. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00095">helpers.h:95</a></div></div>
542 <div class="ttc" id="struct_image_xhtml_acf52c23cbd7424606c10a606524e3e32"><div class="ttname"><a href="struct_image.xhtml#acf52c23cbd7424606c10a606524e3e32">Image::ptr</a></div><div class="ttdeci">__global uchar * ptr</div><div class="ttdoc">Pointer to the starting postion of the buffer. </div><div class="ttdef"><b>Definition:</b> <a href="helpers_8h_source.xhtml#l00097">helpers.h:97</a></div></div>
543 </div><!-- fragment -->
544 </div>
545 </div>
546 <h2 class="groupheader">Variable Documentation</h2>
547 <a class="anchor" id="a8d09117e1c8a726efc8d9ec9d9d8ed8a"></a>
548 <div class="memitem">
549 <div class="memproto">
550       <table class="memname">
551         <tr>
552           <td class="memname">constant int offsets_s[16][2]</td>
553         </tr>
554       </table>
555 </div><div class="memdoc">
556 <b>Initial value:</b><div class="fragment"><div class="line">=</div><div class="line">{</div><div class="line">    { 0, -3 },  </div><div class="line">    { 1, -3 },  </div><div class="line">    { 2, -2 },  </div><div class="line">    { 3, -1 },  </div><div class="line">    { 3, 0 },   </div><div class="line">    { 3, 1 },   </div><div class="line">    { 2, 2 },   </div><div class="line">    { 1, 3 },   </div><div class="line">    { 0, 3 },   </div><div class="line">    { -1, 3 },  </div><div class="line">    { -2, 2 },  </div><div class="line">    { -3, 1 },  </div><div class="line">    { -3, 0 },  </div><div class="line">    { -3, -1 }, </div><div class="line">    { -2, -2 }, </div><div class="line">    { -1, -3 }, </div><div class="line">}</div></div><!-- fragment -->
557 <p>Definition at line <a class="el" href="fast__corners_8cl_source.xhtml#l00037">37</a> of file <a class="el" href="fast__corners_8cl_source.xhtml">fast_corners.cl</a>.</p>
558
559 </div>
560 </div>
561 </div><!-- contents -->
562 </div><!-- doc-content -->
563 <!-- start footer part -->
564 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
565   <ul>
566     <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.xhtml">core</a></li><li class="navelem"><a class="el" href="dir_8c278f79c760e5c5fbd911f9870614c1.xhtml">CL</a></li><li class="navelem"><a class="el" href="dir_25885286e9dad4fa105b7b25a8031bbf.xhtml">cl_kernels</a></li><li class="navelem"><a class="el" href="fast__corners_8cl.xhtml">fast_corners.cl</a></li>
567     <li class="footer">Generated on Wed Apr 12 2017 14:26:05 for ARM Compute Library by
568     <a href="http://www.doxygen.org/index.html">
569     <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
570   </ul>
571 </div>
572 </body>
573 </html>