diff include/ne10/NE10_types.h @ 379:24c3a0663d54 prerelease

Added Ne10 headers within include directory
author andrewm
date Sun, 12 Jun 2016 18:16:20 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/include/ne10/NE10_types.h	Sun Jun 12 18:16:20 2016 +0100
@@ -0,0 +1,453 @@
+/*
+ *  Copyright 2011-15 ARM Limited and Contributors.
+ *  All rights reserved.
+ *
+ *  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 ARM Limited 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 ARM LIMITED 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 ARM LIMITED AND 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.
+ */
+
+/*
+ * NE10 Library : inc/NE10_types.h
+ */
+
+/** NE10 defines a number of types for use in its function signatures.
+ *  The types are defined within this header file.
+ */
+
+#ifndef NE10_TYPES_H
+#define NE10_TYPES_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <math.h>
+#include <string.h>
+#include <assert.h>
+
+/**
+ * @TODO Move the definition of NE10_UNROLL_LEVEL to cmake configuration files.
+ * Macro NE10_UNROLL_LEVEL controls algorithm of FFT funtions.
+ * When NE10_UNROLL_LEVEL == 0, complex FFT performs radix-4 x2 per loop.
+ * When NE10_UNROLL_LEVEL == 1, complex FFT performs radix-4 x4 per loop.
+ */
+#if !defined(NE10_UNROLL_LEVEL)
+#if defined(__arm__)
+#define NE10_UNROLL_LEVEL 0
+#elif defined(__aarch64__)
+#define NE10_UNROLL_LEVEL 1
+#else
+#define NE10_UNROLL_LEVEL 0
+#endif
+#endif
+
+/////////////////////////////////////////////////////////
+// constant values that are used across the library
+/////////////////////////////////////////////////////////
+#define NE10_OK 0
+#define NE10_ERR -1
+
+/////////////////////////////////////////////////////////
+// some external definitions to be exposed to the users
+/////////////////////////////////////////////////////////
+
+typedef signed char             ne10_int8_t;
+typedef unsigned char           ne10_uint8_t;
+typedef signed short            ne10_int16_t;
+typedef unsigned short          ne10_uint16_t;
+typedef signed int              ne10_int32_t;
+typedef unsigned int            ne10_uint32_t;
+typedef signed long long int    ne10_int64_t;
+typedef unsigned long long int  ne10_uint64_t;
+typedef float                   ne10_float32_t;
+typedef double                  ne10_float64_t;
+typedef int                     ne10_result_t;     // resulting [error-]code
+
+/**
+ * @brief a 2-tuple of ne10_float32_t values.
+ */
+typedef struct
+{
+    ne10_float32_t x;
+    ne10_float32_t y;
+} ne10_vec2f_t;
+
+/**
+ * @brief a 3-tuple of ne10_float32_t values.
+ */
+typedef struct
+{
+    ne10_float32_t x;
+    ne10_float32_t y;
+    ne10_float32_t z;
+} ne10_vec3f_t;
+
+/**
+ * @brief a 4-tuple of ne10_float32_t values.
+ */
+typedef struct
+{
+    ne10_float32_t x;
+    ne10_float32_t y;
+    ne10_float32_t z;
+    ne10_float32_t w;
+} ne10_vec4f_t;
+
+/////////////////////////////////////////////////////////
+// definitions for matrix
+/////////////////////////////////////////////////////////
+
+typedef struct
+{
+    ne10_float32_t r1;
+    ne10_float32_t r2;
+} __attribute__ ( (packed)) ne10_mat_row2f;
+
+typedef struct
+{
+    ne10_mat_row2f c1;
+    ne10_mat_row2f c2;
+
+} __attribute__ ( (packed)) ne10_mat2x2f_t;   // a 2x2 matrix
+
+static inline void createColumnMajorMatrix2x2 (ne10_mat2x2f_t * outMat, ne10_float32_t m11, ne10_float32_t m21, ne10_float32_t m12, ne10_float32_t m22)
+{
+    assert (NULL != outMat);
+
+    outMat->c1.r1 = m11;
+    outMat->c1.r2 = m21;
+    outMat->c2.r1 = m12;
+    outMat->c2.r2 = m22;
+}
+
+
+typedef struct
+{
+    ne10_float32_t r1;
+    ne10_float32_t r2;
+    ne10_float32_t r3;
+} __attribute__ ( (packed)) ne10_mat_row3f;
+
+typedef struct
+{
+    ne10_mat_row3f c1;
+    ne10_mat_row3f c2;
+    ne10_mat_row3f c3;
+
+} __attribute__ ( (packed)) ne10_mat3x3f_t;   // a 3x3 matrix
+
+static inline void createColumnMajorMatrix3x3 (ne10_mat3x3f_t * outMat, ne10_float32_t m11, ne10_float32_t m21, ne10_float32_t m31,
+        ne10_float32_t m12, ne10_float32_t m22, ne10_float32_t m32,
+        ne10_float32_t m13, ne10_float32_t m23, ne10_float32_t m33)
+{
+    assert (NULL != outMat);
+
+    outMat->c1.r1 = m11;
+    outMat->c1.r2 = m21;
+    outMat->c1.r3 = m31;
+
+    outMat->c2.r1 = m12;
+    outMat->c2.r2 = m22;
+    outMat->c2.r3 = m32;
+
+    outMat->c3.r1 = m13;
+    outMat->c3.r2 = m23;
+    outMat->c3.r3 = m33;
+}
+
+
+typedef struct
+{
+    ne10_float32_t r1;
+    ne10_float32_t r2;
+    ne10_float32_t r3;
+    ne10_float32_t r4;
+} __attribute__ ( (packed)) ne10_mat_row4f;
+
+typedef struct
+{
+    ne10_mat_row4f c1;
+    ne10_mat_row4f c2;
+    ne10_mat_row4f c3;
+    ne10_mat_row4f c4;
+
+} __attribute__ ( (packed)) ne10_mat4x4f_t;   // a 4x4 matrix
+
+static inline void createColumnMajorMatrix4x4 (ne10_mat4x4f_t * outMat, ne10_float32_t m11, ne10_float32_t m21, ne10_float32_t m31, ne10_float32_t m41,
+        ne10_float32_t m12, ne10_float32_t m22, ne10_float32_t m32, ne10_float32_t m42,
+        ne10_float32_t m13, ne10_float32_t m23, ne10_float32_t m33, ne10_float32_t m43,
+        ne10_float32_t m14, ne10_float32_t m24, ne10_float32_t m34, ne10_float32_t m44)
+{
+    assert (NULL != outMat);
+
+    outMat->c1.r1 = m11;
+    outMat->c1.r2 = m21;
+    outMat->c1.r3 = m31;
+    outMat->c1.r4 = m41;
+
+    outMat->c2.r1 = m12;
+    outMat->c2.r2 = m22;
+    outMat->c2.r3 = m32;
+    outMat->c2.r4 = m42;
+
+    outMat->c3.r1 = m13;
+    outMat->c3.r2 = m23;
+    outMat->c3.r3 = m33;
+    outMat->c3.r4 = m43;
+
+    outMat->c4.r1 = m14;
+    outMat->c4.r2 = m24;
+    outMat->c4.r3 = m34;
+    outMat->c4.r4 = m44;
+}
+
+/////////////////////////////////////////////////////////
+// definitions for fft
+/////////////////////////////////////////////////////////
+
+/**
+ * @brief structure for the floating point FFT function.
+ */
+#define NE10_MAXFACTORS             32
+typedef struct
+{
+    ne10_float32_t r;
+    ne10_float32_t i;
+} ne10_fft_cpx_float32_t;
+
+/**
+ * @brief structure for the floating point FFT state
+ *
+ */
+typedef struct
+{
+    ne10_int32_t nfft;
+    ne10_int32_t *factors;
+    ne10_fft_cpx_float32_t *twiddles;
+    ne10_fft_cpx_float32_t *buffer;
+    ne10_fft_cpx_float32_t *last_twiddles;
+    /**
+     *  @biref Flag to control scaling behaviour in forward floating point complex FFT.
+     *  @note If is_forward_scaled is set 0, Ne10 will not scale output of forward floating
+     *  point complex FFT. Otherwise, Ne10 will scale output of forward floating
+     *  point complex FFT.
+     *  @warning
+     *  Only non-power-of-2 FFT is affected by this flag.
+     */
+    ne10_int32_t is_forward_scaled;
+    /**
+     *  @biref Flag to control scaling behaviour in backward floating point complex FFT.
+     *  @note If is_backward_scaled is set 0, Ne10 will not scale output of backward floating
+     *  point complex FFT. Otherwise, Ne10 will scale output of backward floating
+     *  point complex FFT.
+     *  @warning
+     *  Only non-power-of-2 FFT is affected by this flag.
+     */
+    ne10_int32_t is_backward_scaled;
+} ne10_fft_state_float32_t;
+
+/**
+ * @brief Configure for floating point FFT.
+ */
+typedef ne10_fft_state_float32_t* ne10_fft_cfg_float32_t;
+
+typedef struct
+{
+    ne10_fft_cpx_float32_t *buffer;
+#if (NE10_UNROLL_LEVEL == 0)
+    ne10_int32_t ncfft;
+    ne10_int32_t *factors;
+    ne10_fft_cpx_float32_t *twiddles;
+    ne10_fft_cpx_float32_t *super_twiddles;
+#elif (NE10_UNROLL_LEVEL > 0)
+    ne10_int32_t nfft;
+    ne10_fft_cpx_float32_t *r_twiddles;
+    ne10_int32_t *r_factors;
+    ne10_fft_cpx_float32_t *r_twiddles_backward;
+    ne10_fft_cpx_float32_t *r_twiddles_neon;
+    ne10_fft_cpx_float32_t *r_twiddles_neon_backward;
+    ne10_int32_t *r_factors_neon;
+    ne10_fft_cpx_float32_t *r_super_twiddles_neon;
+#endif
+} ne10_fft_r2c_state_float32_t;
+
+typedef ne10_fft_r2c_state_float32_t* ne10_fft_r2c_cfg_float32_t;
+
+/**
+ * @brief structure for the 16 bits fixed point FFT function.
+ */
+typedef struct
+{
+    ne10_int16_t r;
+    ne10_int16_t i;
+} ne10_fft_cpx_int16_t;
+
+typedef struct
+{
+    ne10_int32_t nfft;
+    ne10_int32_t *factors;
+    ne10_fft_cpx_int16_t *twiddles;
+    ne10_fft_cpx_int16_t *buffer;
+} ne10_fft_state_int16_t;
+
+typedef ne10_fft_state_int16_t* ne10_fft_cfg_int16_t;
+
+typedef struct
+{
+    ne10_int32_t nfft;
+    ne10_int32_t ncfft;
+    ne10_int32_t *factors;
+    ne10_fft_cpx_int16_t *twiddles;
+    ne10_fft_cpx_int16_t *super_twiddles;
+    ne10_fft_cpx_int16_t *buffer;
+} ne10_fft_r2c_state_int16_t;
+
+typedef ne10_fft_r2c_state_int16_t* ne10_fft_r2c_cfg_int16_t;
+
+/**
+ * @brief structure for the 32 bits fixed point FFT function.
+ */
+typedef struct
+{
+    ne10_int32_t r;
+    ne10_int32_t i;
+} ne10_fft_cpx_int32_t;
+
+typedef struct
+{
+    ne10_int32_t nfft;
+    ne10_int32_t *factors;
+    ne10_fft_cpx_int32_t *twiddles;
+    ne10_fft_cpx_int32_t *buffer;
+    ne10_fft_cpx_int32_t *last_twiddles;
+} ne10_fft_state_int32_t;
+
+typedef ne10_fft_state_int32_t* ne10_fft_cfg_int32_t;
+
+typedef struct
+{
+    ne10_int32_t nfft;
+    ne10_int32_t ncfft;
+    ne10_int32_t *factors;
+    ne10_fft_cpx_int32_t *twiddles;
+    ne10_fft_cpx_int32_t *super_twiddles;
+    ne10_fft_cpx_int32_t *buffer;
+} ne10_fft_r2c_state_int32_t;
+
+typedef ne10_fft_r2c_state_int32_t* ne10_fft_r2c_cfg_int32_t;
+
+/////////////////////////////////////////////////////////
+// definitions for fir
+/////////////////////////////////////////////////////////
+
+/**
+ * @brief Instance structure for the floating-point FIR filter.
+ */
+typedef struct
+{
+    ne10_uint16_t numTaps;    /**< Length of the filter. */
+    ne10_float32_t *pState;    /**< Points to the state variable array. The array is of length numTaps+maxBlockSize-1. */
+    ne10_float32_t *pCoeffs;   /**< Points to the coefficient array. The array is of length numTaps. */
+} ne10_fir_instance_f32_t;
+
+/**
+ * @brief Instance structure for the floating point FIR Lattice filter.
+ */
+typedef struct
+{
+    ne10_uint16_t numStages;    /**< numStages of the of lattice filter. */
+    ne10_float32_t *pState;      /**< Points to the state variable array. The array is of length numStages. */
+    ne10_float32_t *pCoeffs;     /**< Points to the coefficient array. The array is of length numStages. */
+} ne10_fir_lattice_instance_f32_t;
+
+/**
+ * @brief Instance structure for the floating-point FIR Decimation.
+ */
+typedef struct
+{
+    ne10_uint8_t  M;            /**< Decimation Factor. */
+    ne10_uint16_t numTaps;      /**< Length of the filter. */
+    ne10_float32_t    *pCoeffs;      /**< Points to the coefficient array. The array is of length numTaps.*/
+    ne10_float32_t    *pState;       /**< Points to the state variable array. The array is of length numTaps+maxBlockSize-1. */
+} ne10_fir_decimate_instance_f32_t;
+
+/**
+ * @brief Instance structure for the floating-point FIR Interpolation.
+ */
+typedef struct
+{
+    ne10_uint8_t L;             /**< Interpolation Factor. */
+    ne10_uint16_t phaseLength;  /**< Length of each polyphase filter component. */
+    ne10_float32_t *pCoeffs;         /**< Points to the coefficient array. The array is of length numTaps.*/
+    ne10_float32_t *pState;          /**< Points to the state variable array. The array is of length numTaps+maxBlockSize-1. */
+} ne10_fir_interpolate_instance_f32_t;
+
+/**
+ * @brief Instance structure for the floating-point FIR Sparse filter.
+ */
+typedef struct
+{
+    ne10_uint16_t numTaps;      /**< Length of the filter. */
+    ne10_uint16_t stateIndex;   /**< Index pointer for the state buffer .*/
+    ne10_float32_t *pState;          /**< Points to the state variable array. The array is of length numTaps+maxBlockSize-1. */
+    ne10_float32_t *pCoeffs;         /**< Points to the coefficient array. The array is of length numTaps.*/
+    ne10_uint16_t  maxDelay;    /**< the largest number of delay line values .*/
+    ne10_int32_t  *pTapDelay;    /**< Pointer to the array containing positions of the non-zero tap values. */
+} ne10_fir_sparse_instance_f32_t;
+
+/**
+   * @brief Instance structure for the floating point IIR Lattice filter.
+   */
+typedef struct
+{
+    ne10_uint16_t numStages;    /**< numStages of the of lattice filter. */
+    ne10_float32_t *pState;      /**< Points to the state variable array. The array is of length numStages + blockSize -1. */
+    ne10_float32_t *pkCoeffs;    /**< Points to the reflection coefficient array. The array is of length numStages. */
+    ne10_float32_t *pvCoeffs;    /**< Points to the ladder coefficient array. The array is of length numStages+1. */
+} ne10_iir_lattice_instance_f32_t;
+
+/////////////////////////////////////////////////////////
+// definitions for imgproc module
+/////////////////////////////////////////////////////////
+
+/**
+ * @brief Structure for point in image
+ */
+typedef struct
+{
+    ne10_uint32_t x;
+    ne10_uint32_t y;
+} ne10_point_t;
+
+typedef struct
+{
+    ne10_uint32_t x;
+    ne10_uint32_t y;
+} ne10_size_t;
+
+typedef enum
+{
+    UBUNTU_COMMAND_LINE,
+    ANDROID_DEMO,
+    IOS_DEMO
+} ne10_print_target_t;
+
+#endif