allocate canny variables from stack
[processor-sdk/gst-plugin-dsp66.git] / src / kernels / oclconv / oclconv.cpp
index 00ef898646608cb49cec7c263b2b39a19f0c829f..05f884c1e44bedd9fcaf7b7bd3adb46f24dfa4ca 100644 (file)
@@ -1,30 +1,37 @@
-/******************************************************************************
- * Copyright (c) 2013-2014, Texas Instruments Incorporated - http://www.ti.com/
- *   All rights reserved.
+/*
+ * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
  *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions are met:
- *       * Redistributions of source code must retain the above copyright
- *         notice, this list of conditions and the following disclaimer.
- *       * Redistributions in binary form must reproduce the above copyright
- *         notice, this list of conditions and the following disclaimer in the
- *         documentation and/or other materials provided with the distribution.
- *       * Neither the name of Texas Instruments Incorporated nor the
- *         names of its contributors may be used to endorse or promote products
- *         derived from this software without specific prior written permission.
  *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- *   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- *   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- *   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- *   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- *   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- *   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- *   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- *   THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *    Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ *    Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the  
+ *    distribution.
+ *
+ *    Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
 #define __CL_ENABLE_EXCEPTIONS
 #include <CL/cl.hpp>
 #include <iostream>
@@ -86,13 +93,6 @@ static int oclconv_imgproc(char *kernelName, unsigned char *data_in, unsigned ch
 #endif
    return 0;
 }
-/*----------------------------------------------------------------------------------------------------------------------*/
-static bool          canny_first_call = true;
-static Context       canny_ctx(CL_DEVICE_TYPE_ACCELERATOR);
-static CommandQueue *canny_Q;
-static Buffer       *canny_gradX, *canny_gradY, *canny_mag, *canny_scratch, *canny_numItems;
-static Kernel       *canny_K;
-static Buffer       *canny_input, *canny_output;
 
 /******************************************************************************
  * Canny Edge Detection - called on ARM, but algorithm dispatched to 1 DSP
@@ -106,9 +106,16 @@ static Buffer       *canny_input, *canny_output;
  *****************************************************************************/
 static int ocl_canny(unsigned char *data_in, unsigned char *data_out, unsigned short height, unsigned short width)
 {
-    int numelem = (int)height*(int)width;
+    int          numelem = (int)height*(int)width;
+    static bool  canny_first_call = true;
+    CommandQueue *canny_Q;
+    Buffer       *canny_gradX, *canny_gradY, *canny_mag, *canny_scratch, *canny_numItems;
+    Kernel       *canny_K;
+    Buffer       *canny_input, *canny_output;
+
     try 
     {
+        Context canny_ctx(CL_DEVICE_TYPE_ACCELERATOR);
         Event canny_ev, canny_ev1, canny_ev2;
         /*---------------------------------------------------------------------
         * Cache as much OpenCL plumbing on the first call, so the cost is not 
@@ -165,7 +172,7 @@ static int ocl_canny(unsigned char *data_in, unsigned char *data_out, unsigned s
 #ifdef __cplusplus
 extern "C" {
 #endif
-int oclconv_kernel(int kernel_type, int filter_size, 
+int oclconv_kernel(int kernel_type, int filter_size, char *arbkernel,
                    unsigned char *data_in, unsigned char *data_out, 
                    int width, int height, int dstride, int sstride)
 {
@@ -194,6 +201,9 @@ int oclconv_kernel(int kernel_type, int filter_size,
       /* filter size is ignored */
       retval = ocl_canny (data_in, data_out, width, height); /* input and output stride assumed to be == width */
       break;
+    case 4: /* user defined kernel */
+      retval = oclconv_imgproc (arbkernel, data_in, data_out, width, height, sstride, dstride);
+      break;
     default:
       break;
   }