• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  */
fastlog2(long x)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  */
validateParametersFC32(const void * pSrc,const void * pDst,const ARMsFFTSpec_FC32 * pFFTSpec)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 
validateParametersF32(const void * pSrc,const void * pDst,const ARMsFFTSpec_R_FC32 * pFFTSpec)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