Home | History | Annotate | Download | only in api
      1 /*
      2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  *
     10  *  This file was originally licensed as follows. It has been
     11  *  relicensed with permission from the copyright holders.
     12  */
     13 
     14 /**
     15  *
     16  * File Name:  armSP.h
     17  * OpenMAX DL: v1.0.2
     18  * Last Modified Revision:   7014
     19  * Last Modified Date:       Wed, 01 Aug 2007
     20  *
     21  * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
     22  *
     23  *
     24  *
     25  * File: armSP.h
     26  * Brief: Declares API's/Basic Data types used across the OpenMAX Signal Processing domain
     27  *
     28  */
     29 #ifndef _armSP_H_
     30 #define _armSP_H_
     31 
     32 #include <stdint.h>
     33 
     34 #include "dl/api/omxtypes.h"
     35 
     36 #ifdef __cplusplus
     37 extern "C" {
     38 #endif
     39 
     40 /** FFT Specific declarations */
     41 extern  OMX_S32 armSP_FFT_S32TwiddleTable[1026];
     42 extern OMX_F32 armSP_FFT_F32TwiddleTable[];
     43 
     44 typedef struct  ARMsFFTSpec_SC32_Tag
     45 {
     46     OMX_U32     N;
     47     OMX_U16     *pBitRev;
     48     OMX_SC32    *pTwiddle;
     49     OMX_SC32    *pBuf;
     50 }ARMsFFTSpec_SC32;
     51 
     52 
     53 typedef struct  ARMsFFTSpec_SC16_Tag
     54 {
     55     OMX_U32     N;
     56     OMX_U16     *pBitRev;
     57     OMX_SC16    *pTwiddle;
     58     OMX_SC16    *pBuf;
     59 }ARMsFFTSpec_SC16;
     60 
     61 typedef struct  ARMsFFTSpec_R_SC32_Tag
     62 {
     63     OMX_U32     N;
     64     OMX_U16     *pBitRev;
     65     OMX_SC32    *pTwiddle;
     66     OMX_S32     *pBuf;
     67 }ARMsFFTSpec_R_SC32;
     68 
     69 typedef struct  ARMsFFTSpec_R_SC16_Tag
     70 {
     71     OMX_U32     N;
     72     OMX_U16     *pBitRev;
     73     OMX_SC16    *pTwiddle;
     74     OMX_S16     *pBuf;
     75 } ARMsFFTSpec_R_SC16;
     76 
     77 typedef struct ARMsFFTSpec_R_FC32_Tag
     78 {
     79     OMX_U32 N;
     80     OMX_U16* pBitRev;
     81     OMX_FC32* pTwiddle;
     82     OMX_F32* pBuf;
     83 } ARMsFFTSpec_R_FC32;
     84 
     85 typedef struct ARMsFFTSpec_FC32_Tag
     86 {
     87     OMX_U32 N;
     88     OMX_U16* pBitRev;
     89     OMX_FC32* pTwiddle;
     90     OMX_FC32* pBuf;
     91 } ARMsFFTSpec_FC32;
     92 
     93 /*
     94  * Compute log2(x), where x must be a power of 2.
     95  */
     96 static inline OMX_U32 fastlog2(long x) {
     97   OMX_U32 out;
     98   asm("clz %0,%1\n\t"
     99       "sub %0, %0, #63\n\t"
    100       "neg %0, %0\n\t"
    101       : "=r"(out)
    102       : "r"(x)
    103       :);
    104   return out;
    105 }
    106 
    107 /*
    108  *  Validate args. All pointers must be non-NULL; the source and
    109  *  destination pointers must be aligned on a 32-byte boundary; the
    110  *  FFT spec must have non-NULL pointers; and the FFT size must be
    111  *  within range.
    112  */
    113 static inline int validateParametersFC32(const void* pSrc,
    114 					 const void* pDst,
    115 					 const ARMsFFTSpec_FC32* pFFTSpec) {
    116   return pSrc && pDst && pFFTSpec && !(((uintptr_t)pSrc) & 31) &&
    117          !(((uintptr_t)pDst) & 31) && pFFTSpec->pTwiddle && pFFTSpec->pBuf &&
    118          (pFFTSpec->N >= 2) && (pFFTSpec->N <= (1 << TWIDDLE_TABLE_ORDER));
    119 }
    120 
    121 static inline int validateParametersF32(const void* pSrc,
    122 					const void* pDst,
    123 					const ARMsFFTSpec_R_FC32* pFFTSpec) {
    124   return pSrc && pDst && pFFTSpec && !(((uintptr_t)pSrc) & 31) &&
    125          !(((uintptr_t)pDst) & 31) && pFFTSpec->pTwiddle && pFFTSpec->pBuf &&
    126          (pFFTSpec->N >= 2) && (pFFTSpec->N <= (1 << TWIDDLE_TABLE_ORDER));
    127 }
    128 
    129 #ifdef __cplusplus
    130 }
    131 #endif
    132 
    133 #endif
    134 
    135 /*End of File*/
    136 
    137 
    138 
    139