Home | History | Annotate | Download | only in opencl
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                           License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
     14 // Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
     15 // Third party copyrights are property of their respective owners.
     16 //
     17 // @Authors
     18 //    Shengen Yan,yanshengen (at) gmail.com
     19 //
     20 // Redistribution and use in source and binary forms, with or without modification,
     21 // are permitted provided that the following conditions are met:
     22 //
     23 //   * Redistribution's of source code must retain the above copyright notice,
     24 //     this list of conditions and the following disclaimer.
     25 //
     26 //   * Redistribution's in binary form must reproduce the above copyright notice,
     27 //     this list of conditions and the following disclaimer in the documentation
     28 //     and/or other materials provided with the distribution.
     29 //
     30 //   * The name of the copyright holders may not be used to endorse or promote products
     31 //     derived from this software without specific prior written permission.
     32 //
     33 // This software is provided by the copyright holders and contributors as is and
     34 // any express or implied warranties, including, but not limited to, the implied
     35 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     36 // In no event shall the Intel Corporation or contributors be liable for any direct,
     37 // indirect, incidental, special, exemplary, or consequential damages
     38 // (including, but not limited to, procurement of substitute goods or services;
     39 // loss of use, data, or profits; or business interruption) however caused
     40 // and on any theory of liability, whether in contract, strict liability,
     41 // or tort (including negligence or otherwise) arising in any way out of
     42 // the use of this software, even if advised of the possibility of such damage.
     43 //
     44 //M*/
     45 
     46 __kernel void preCornerDetect(__global const uchar * Dxptr, int dx_step, int dx_offset,
     47                               __global const uchar * Dyptr, int dy_step, int dy_offset,
     48                               __global const uchar * D2xptr, int d2x_step, int d2x_offset,
     49                               __global const uchar * D2yptr, int d2y_step, int d2y_offset,
     50                               __global const uchar * Dxyptr, int dxy_step, int dxy_offset,
     51                               __global uchar * dstptr, int dst_step, int dst_offset,
     52                               int dst_rows, int dst_cols, float factor)
     53 {
     54     int x = get_global_id(0);
     55     int y = get_global_id(1);
     56 
     57     if (x < dst_cols && y < dst_rows)
     58     {
     59         int dx_index = mad24(dx_step, y, (int)sizeof(float) * x + dx_offset);
     60         int dy_index = mad24(dy_step, y, (int)sizeof(float) * x + dy_offset);
     61         int d2x_index = mad24(d2x_step, y, (int)sizeof(float) * x + d2x_offset);
     62         int d2y_index = mad24(d2y_step, y, (int)sizeof(float) * x + d2y_offset);
     63         int dxy_index = mad24(dxy_step, y, (int)sizeof(float) * x + dxy_offset);
     64         int dst_index = mad24(dst_step, y, (int)sizeof(float) * x + dst_offset);
     65 
     66         float dx = *(__global const float *)(Dxptr + dx_index);
     67         float dy = *(__global const float *)(Dyptr + dy_index);
     68         float d2x = *(__global const float *)(D2xptr + d2x_index);
     69         float d2y = *(__global const float *)(D2yptr + d2y_index);
     70         float dxy = *(__global const float *)(Dxyptr + dxy_index);
     71         __global float * dst = (__global float *)(dstptr + dst_index);
     72 
     73         dst[0] = factor * (dx*dx*d2y + dy*dy*d2x - 2*dx*dy*dxy);
     74     }
     75 }
     76